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}