nx_print_process_test.nx source
↩ module page · 68 lines · 3346 B
1// nx_print_process_test.nx -- verify the sealed-enum + taxonomy
2// predicates classify each process class consistently.
3//
4// expect_exit: 0
5// license_tier: ORIGINAL
6
7import "nx_syscalls.nx"
8import "nx_print_process.nx"
9
10func main() -> i64 {
11 // --- (a) sealed enum range ---
12 if nx_process_is_valid(-1) != 0 { return 10 }
13 if nx_process_is_valid(NX_PROCESS_N) != 0 { return 11 }
14 if nx_process_is_valid(NX_PROCESS_FDM_POLYMER) != 1 { return 12 }
15 if nx_process_is_valid(NX_PROCESS_DMLS_METAL) != 1 { return 13 }
16
17 // --- (b) heated extruder predicate ---
18 if nx_process_needs_heated_extruder(NX_PROCESS_FDM_POLYMER) != 1 { return 20 }
19 if nx_process_needs_heated_extruder(NX_PROCESS_FDM_METAL) != 1 { return 21 }
20 if nx_process_needs_heated_extruder(NX_PROCESS_DIW_CEMENT) != 0 { return 22 }
21 if nx_process_needs_heated_extruder(NX_PROCESS_SLA_RESIN) != 0 { return 23 }
22 if nx_process_needs_heated_extruder(NX_PROCESS_DMLS_METAL) != 0 { return 24 }
23
24 // --- (c) powder bed predicate ---
25 if nx_process_uses_powder_bed(NX_PROCESS_DMLS_METAL) != 1 { return 30 }
26 if nx_process_uses_powder_bed(NX_PROCESS_EBM_METAL) != 1 { return 31 }
27 if nx_process_uses_powder_bed(NX_PROCESS_BINDER_JET) != 1 { return 32 }
28 if nx_process_uses_powder_bed(NX_PROCESS_FDM_POLYMER) != 0 { return 33 }
29 if nx_process_uses_powder_bed(NX_PROCESS_DIW_CLAY) != 0 { return 34 }
30
31 // --- (d) post-cure predicate ---
32 if nx_process_needs_post_cure(NX_PROCESS_DIW_CEMENT) != 1 { return 40 }
33 if nx_process_needs_post_cure(NX_PROCESS_DIW_CLAY) != 1 { return 41 }
34 if nx_process_needs_post_cure(NX_PROCESS_SLA_RESIN) != 1 { return 42 }
35 if nx_process_needs_post_cure(NX_PROCESS_BINDER_JET) != 1 { return 43 }
36 if nx_process_needs_post_cure(NX_PROCESS_FDM_POLYMER) != 0 { return 44 }
37 if nx_process_needs_post_cure(NX_PROCESS_FFF_WOOD) != 0 { return 45 }
38
39 // --- (e) direct-write vs whole-bed-scan ---
40 if nx_process_is_direct_write(NX_PROCESS_FDM_POLYMER) != 1 { return 50 }
41 if nx_process_is_direct_write(NX_PROCESS_DIW_CEMENT) != 1 { return 51 }
42 if nx_process_is_direct_write(NX_PROCESS_LDM_FOOD) != 1 { return 52 }
43 if nx_process_is_direct_write(NX_PROCESS_DMLS_METAL) != 0 { return 53 }
44 if nx_process_is_direct_write(NX_PROCESS_SLA_RESIN) != 0 { return 54 }
45 if nx_process_is_direct_write(NX_PROCESS_BINDER_JET) != 0 { return 55 }
46
47 // --- (f) robot-pickup-ready ---
48 if nx_process_robot_pickup_ready(NX_PROCESS_FDM_POLYMER) != 1 { return 60 }
49 if nx_process_robot_pickup_ready(NX_PROCESS_FDM_METAL) != 1 { return 61 }
50 if nx_process_robot_pickup_ready(NX_PROCESS_DIW_CEMENT) != 0 { return 62 }
51 if nx_process_robot_pickup_ready(NX_PROCESS_SLA_RESIN) != 0 { return 63 }
52 if nx_process_robot_pickup_ready(NX_PROCESS_DMLS_METAL) != 0 { return 64 }
53
54 // --- (g) all 13 process classes are well-defined ---
55 var p: i64 = 0
56 while p < NX_PROCESS_N {
57 if nx_process_is_valid(p) != 1 { return 70 }
58 // Every process must answer EACH predicate (no UB) -- sanity by
59 // calling and checking return is in {0, 1}.
60 let r_heat: i64 = nx_process_needs_heated_extruder(p)
61 if r_heat != 0 {
62 if r_heat != 1 { return 71 }
63 }
64 p = p + 1
65 }
66
67 return 0
68}