code wiki / (root) / nx_vessel_design_test.nx

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}