code wiki / (root) / nx_print_process_test.nx

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}