code wiki / (root) / nx_fbench_probe.nx

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}