nx_vessel_design_test.nx source
↩ module page · 41 lines · 1726 B
1// nx_vessel_design_test.nx -- smoke for nx_vessel_design (H3).
2//
3// Proves hardware design CERTIFICATION in software, against the R4 recipe:
4// - a good 50 W / insulated / fused design PASSES for yogurt (1)
5// - an undersized 5 W heater is REJECTED (2)
6// - a cutoff set below the setpoint is REJECTED (3)
7// - a heat-up budget that is too tight is REJECTED (4)
8// Exit code = failed assertion number; 0 = all pass.
9
10import "nx_syscalls.nx"
11import "nx_ferment_safety.nx"
12import "nx_ferment_thermal.nx"
13import "nx_vessel_thermal.nx"
14import "nx_vessel_io.nx"
15import "nx_vessel_faults.nx"
16import "nx_ferment_recipes.nx"
17import "nx_vessel_design.nx"
18
19func main() -> i64 {
20 let env: *NxFermentSafetyEnvelope = nx_ferment_safety_envelope_default(1)
21
22 // target setpoint from the R4 yogurt recipe (bind to a local first)
23 let yr: *NxFermentRecipeSpec = nx_ferment_recipe(NX_RCP_YOGURT)
24 let setpoint: i64 = yr.hold_temp_c * 1000
25
26 // --- a GOOD design certifies PASS ---
27 let good: *NxVesselThermal = nx_vessel_thermal_new(16744, 50000, 1000, 20000)
28 if nx_vessel_design_verify(env, good, 60000, setpoint, 300) != NX_DV_PASS { return 1 }
29
30 // --- an UNDERSIZED heater is rejected ---
31 let weak: *NxVesselThermal = nx_vessel_thermal_new(16744, 5000, 1000, 20000)
32 if nx_vessel_design_verify(env, weak, 60000, setpoint, 300) != NX_DV_FAIL_UNDERSIZED { return 2 }
33
34 // --- a cutoff below the setpoint is rejected ---
35 if nx_vessel_design_verify(env, good, 40000, setpoint, 300) != NX_DV_FAIL_CUTOFF_TOO_LOW { return 3 }
36
37 // --- a too-tight heat-up budget is rejected ---
38 if nx_vessel_design_verify(env, good, 60000, setpoint, 10) != NX_DV_FAIL_TOO_SLOW { return 4 }
39
40 return 0
41}