nx_fbench_probe.nx source
↩ module page · 87 lines · 2251 B
1// nx_fbench_probe.nx -- FORGE gap-bench: runtime-verifies every syntax fact taught by the
2// NishiLang coding context pack v0 (knowledge/forge/). If this builds GREEN, the pack's
3// exemplar code is proven against the live toolchain, not assumed (verified-facts rule).
4// Expected stdout: FBPROBE n0=0 n1=12345 n2=987 rev=cba vowels=1 sum=6 ok
5// license_tier: ORIGINAL expect_exit: 0
6import "nx_syscalls.nx"
7const K_MAGIC_12345: i64 = 12345
8
9func fb_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
10
11func fb_puts(s: *u8) -> i64 { let n: i64 = fb_slen(s); sys_write(1, s, n); return 0 }
12
13func fb_pdec(n: i64) -> i64 {
14 let buf: *u8 = sys_mmap(32) as *u8
15 if n == 0 { fb_puts("0" as *u8); return 0 }
16 var v: i64 = n
17 var i: i64 = 31
18 while v > 0 {
19 let q: i64 = v / 10
20 let d: i64 = v - q * 10
21 buf[i] = (48 + d) as u8
22 v = q
23 i = i - 1
24 }
25 let o: i64 = i + 1
26 let p: *u8 = buf + o
27 let len: i64 = 31 - i
28 sys_write(1, p, len)
29 return 0
30}
31
32func fb_rev(src: *u8, dst: *u8) -> i64 {
33 let n: i64 = fb_slen(src)
34 var i: i64 = 0
35 while i < n {
36 let j: i64 = n - 1 - i
37 dst[i] = src[j]
38 i = i + 1
39 }
40 dst[n] = 0 as u8
41 return 0
42}
43
44func fb_is_vowel(c: i64) -> i64 {
45 if c == 97 { return 1 }
46 if c == 101 { return 1 }
47 if c == 105 { return 1 }
48 if c == 111 { return 1 }
49 if c == 117 { return 1 }
50 return 0
51}
52
53func main(argc: i64, argv: *i64) -> i64 {
54 fb_puts("FBPROBE n0=" as *u8)
55 fb_pdec(0)
56 fb_puts(" n1=" as *u8)
57 fb_pdec(K_MAGIC_12345)
58 fb_puts(" n2=" as *u8)
59 fb_pdec(987)
60 let dst: *u8 = sys_mmap(64) as *u8
61 fb_rev("abc" as *u8, dst)
62 fb_puts(" rev=" as *u8)
63 fb_puts(dst)
64 var vc: i64 = 0
65 let s: *u8 = "abc" as *u8
66 var i: i64 = 0
67 let n: i64 = fb_slen(s)
68 while i < n {
69 let c: i64 = s[i] as i64
70 let v: i64 = fb_is_vowel(c)
71 vc = vc + v
72 i = i + 1
73 }
74 fb_puts(" vowels=" as *u8)
75 fb_pdec(vc)
76 var sum: i64 = 0
77 var k: i64 = 1
78 while k < 4 {
79 sum = sum + k
80 k = k + 1
81 }
82 fb_puts(" sum=" as *u8)
83 fb_pdec(sum)
84 fb_puts(" ok\n" as *u8)
85 sys_exit(0)
86 return 0
87}