nx_print_session_test.nx source
↩ module page · 74 lines · 3232 B
1// nx_print_session_test.nx -- end-to-end push-and-play test.
2// One function call, full bulletproof pipeline.
3//
4// Closed-form invariants:
5// (a) SAFE case: tetrahedron + Qidi + PLA + 0.2mm layer + 0.4mm
6// line + 20% infill -> NX_SESSION_OK, emitter populated,
7// n_layers >= 4, emitter.len > 500 bytes.
8// (b) REFUSED case 1: 500mm tetrahedron exceeds Qidi build volume
9// -> NX_SESSION_REFUSED, preflight_reason == MESH_TOO_LARGE,
10// NO emitter (or empty), n_layers == 0.
11// (c) REFUSED case 2: non-manifold mesh (T3 removed) -> REFUSED
12// + NOT_MANIFOLD reason.
13// (d) REFUSED case 3: bad layer height (0.5mm on 0.4mm nozzle) ->
14// REFUSED + LAYER_TOO_THICK reason.
15// (e) Verdict names non-NULL.
16//
17// expect_exit: 0
18// license_tier: ORIGINAL
19
20import "nx_syscalls.nx"
21import "nx_mesh.nx"
22import "nx_machine_graph.nx"
23import "nx_material_profile.nx"
24import "nx_preflight.nx"
25import "nx_gcode_emit.nx"
26import "nx_print_session.nx"
27
28const Q14: i64 = 16384
29
30func main() -> i64 {
31 let qidi: *NxMachineGraph = nx_machine_graph_qidi_xmax3()
32 let pla: *NxMaterialProfile = nx_material_profile_generic_pla()
33 let lh: i64 = 3277 // 0.2mm
34 let lw: i64 = 6554 // 0.4mm
35
36 // --- (a) SAFE case ---
37 let tet: *NxMesh = nx_mesh_make_tetrahedron(Q14, 0)
38 let s_ok: *NxPrintSession = nx_print_session_run(tet, qidi, pla,
39 lh, lw, 20, 65536)
40 if s_ok.verdict != NX_SESSION_OK { return 10 }
41 if (s_ok.emitter as i64) == 0 { return 11 }
42 if s_ok.n_layers < 4 { return 12 }
43 if s_ok.emitter.len < 500 { return 13 }
44
45 // --- (b) REFUSED: oversize ---
46 let huge: *NxMesh = nx_mesh_make_tetrahedron(500 * Q14, 0)
47 let s_big: *NxPrintSession = nx_print_session_run(huge, qidi, pla,
48 lh, lw, 20, 65536)
49 if s_big.verdict != NX_SESSION_REFUSED { return 20 }
50 if s_big.preflight_reason != NX_PFR_MESH_TOO_LARGE { return 21 }
51 if s_big.n_layers != 0 { return 22 }
52
53 // --- (c) REFUSED: non-manifold ---
54 let bad: *NxMesh = nx_mesh_make_tetrahedron(Q14, 0)
55 bad.n_tris = 3 // open mesh
56 let s_nm: *NxPrintSession = nx_print_session_run(bad, qidi, pla,
57 lh, lw, 20, 65536)
58 if s_nm.verdict != NX_SESSION_REFUSED { return 30 }
59 if s_nm.preflight_reason != NX_PFR_NOT_MANIFOLD { return 31 }
60
61 // --- (d) REFUSED: 0.5mm layer (above 0.3mm max for 0.4mm nozzle) ---
62 let lh_bad: i64 = 8192 // 0.5mm in Q14
63 let s_lh: *NxPrintSession = nx_print_session_run(tet, qidi, pla,
64 lh_bad, lw, 20, 65536)
65 if s_lh.verdict != NX_SESSION_REFUSED { return 40 }
66 if s_lh.preflight_reason != NX_PFR_LAYER_TOO_THICK { return 41 }
67
68 // --- (e) Verdict names ---
69 if (nx_session_verdict_name(NX_SESSION_OK) as i64) == 0 { return 50 }
70 if (nx_session_verdict_name(NX_SESSION_REFUSED) as i64) == 0 { return 51 }
71 if (nx_session_verdict_name(NX_SESSION_EMIT_ERR) as i64) == 0 { return 52 }
72
73 return 0
74}