code wiki / (root) / nx_fn_ptr_assign_test.nx

nx_fn_ptr_assign_test.nx source

↩ module page · 56 lines · 1992 B

1// nx_fn_ptr_assign_test.nx -- exercise fn-address typed signature 2// + assignment-compat check. 3 4import "nx_kernel_v2.nx" 5 6func add2(a: nx_int, b: nx_int) -> nx_int { return a + b } 7func add3(a: nx_int, b: nx_int, c: nx_int) -> nx_int { return a + b + c } 8func add0() -> nx_int { return 7 } 9 10// ===== T1: typed assignment -- arities match, signature OK ===== 11func t1_assign_match_2() -> nx_int { 12 let op: func(nx_int, nx_int) -> nx_int = add2 13 let r: nx_int = op(10, 20) 14 if r != 30 { return 1 } 15 return 0 16} 17 18// ===== T2: typed assignment -- 3-arg fn into 3-arg fn-ptr ===== 19func t2_assign_match_3() -> nx_int { 20 let op: func(nx_int, nx_int, nx_int) -> nx_int = add3 21 let r: nx_int = op(1, 2, 3) 22 if r != 6 { return 2 } 23 return 0 24} 25 26// ===== T3: zero-arg ===== 27func t3_assign_match_0() -> nx_int { 28 let op: func() -> nx_int = add0 29 let r: nx_int = op() 30 if r != 7 { return 3 } 31 return 0 32} 33 34func main() -> nx_exit { 35 println("=== nx_fn_ptr_assign -- typed assignment-compat smoke ===" as *u8) 36 37 let r1: nx_int = t1_assign_match_2() 38 if r1 != 0 { println("T1 FAIL" as *u8); return r1 } 39 println("T1 assign_match_2 PASS func(nx_int, nx_int) = add2 accepted" as *u8) 40 41 let r2: nx_int = t2_assign_match_3() 42 if r2 != 0 { println("T2 FAIL" as *u8); return r2 } 43 println("T2 assign_match_3 PASS func(nx_int, nx_int, nx_int) = add3 accepted" as *u8) 44 45 let r3: nx_int = t3_assign_match_0() 46 if r3 != 0 { println("T3 FAIL" as *u8); return r3 } 47 println("T3 assign_match_0 PASS func() = add0 accepted" as *u8) 48 49 println("" as *u8) 50 println("Negative case (in a separate probe file) verifies REJECTION:" as *u8) 51 println(" let op: func(i64, i64, i64) -> i64 = add2 // add2 is 2-arg" as *u8) 52 println("rejected at parse time with:" as *u8) 53 println(" fn-ptr signature mismatch: annotation declares 3 arg(s)," as *u8) 54 println(" but value has 2 arg(s)" as *u8) 55 return 0 56}