code wiki / (root) / nx_ferment_safety_test.nx

nx_ferment_safety_test.nx source

↩ module page · 98 lines · 5206 B

1// nx_ferment_safety_test.nx -- smoke for nx_ferment_safety. 2// 3// Proves the never-poison law MECHANICALLY (Rule 26 discipline): 4// - every refusal verdict actually fires (a rubber-stamp validate 5// would fail assertions 8-12, 15, 18) 6// - negative controls do NOT over-refuse (assertions 13-14, 19-21) 7// Exit code = failed assertion number; 0 = all pass. 8 9import "nx_syscalls.nx" 10import "nx_ferment_safety.nx" 11 12func main() -> i64 { 13 // --- sealed enum cardinality + validity --- 14 if NX_FK_N_KINDS != 6 { return 1 } 15 if nx_fk_is_valid(NX_FK_VEG_ANAEROBIC) != 1 { return 2 } 16 if nx_fk_is_valid(6) != 0 { return 3 } 17 var neg1: nx_int = 0 - 1 18 if nx_fk_is_valid(neg1) != 0 { return 4 } 19 20 // --- default envelope carries the cited constants --- 21 let env: *NxFermentSafetyEnvelope = nx_ferment_safety_envelope_default(1) 22 if env.botulism_ph_milli != 4600 { return 5 } 23 if env.min_raw_milk_age_days != 60 { return 6 } 24 25 let nolog: *NxFermentReadingLog = (0) as *NxFermentReadingLog 26 27 // --- SAFE: yogurt held 43 C, acidified to pH 4.4 after the window --- 28 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_ANAEROBIC, 29 43000, 4400, 0, 60, 0, nolog, 100) != NX_FS_OK { return 7 } 30 31 // --- REFUSE: culture killed (60 C > 55 C kill) --- 32 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_ANAEROBIC, 33 60000, 4400, 0, 6, 0, nolog, 101) != NX_FS_REFUSED_CULTURE_KILLED { return 8 } 34 35 // --- REFUSE: veg anaerobic under the 2% salt floor (1.5%) --- 36 if nx_ferment_validate(env, NX_FK_VEG_ANAEROBIC, NX_OX_ANAEROBIC, 37 20000, 3800, 1500, 6, 0, nolog, 102) != NX_FS_REFUSED_INSUFFICIENT_SALT { return 9 } 38 39 // --- REFUSE: raw-milk cheese aged only 30 days (< 60) --- 40 if nx_ferment_validate(env, NX_FK_CHEESE_RAWMILK, NX_OX_AEROBIC, 41 12000, 5200, 0, 6, 30, nolog, 103) != NX_FS_REFUSED_RAW_MILK_AGE { return 10 } 42 43 // --- REFUSE: botulism -- anaerobic, past 48 h window, pH still 5.0 --- 44 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_ANAEROBIC, 45 20000, 5000, 0, 72, 0, nolog, 104) != NX_FS_REFUSED_BOTULISM_PH { return 11 } 46 47 // --- REFUSE: botulism -- anaerobic veg, past window, pH unknown (0), salt OK 5% --- 48 if nx_ferment_validate(env, NX_FK_VEG_ANAEROBIC, NX_OX_ANAEROBIC, 49 20000, 0, 5000, 72, 0, nolog, 105) != NX_FS_REFUSED_BOTULISM_PH { return 12 } 50 51 // --- SAFE: anaerobic veg EARLY (within window), pH not yet down, salt OK --- 52 if nx_ferment_validate(env, NX_FK_VEG_ANAEROBIC, NX_OX_ANAEROBIC, 53 20000, 6000, 3000, 6, 0, nolog, 106) != NX_FS_OK { return 13 } 54 55 // --- SAFE: pasteurized cheese, young, aerobic (no raw-milk age rule) --- 56 if nx_ferment_validate(env, NX_FK_CHEESE_PASTEUR, NX_OX_AEROBIC, 57 12000, 5200, 0, 6, 2, nolog, 107) != NX_FS_OK { return 14 } 58 59 // --- REFUSE: bad kind (6 is out of the sealed enum) --- 60 if nx_ferment_validate(env, 6, NX_OX_AEROBIC, 61 20000, 4000, 0, 6, 0, nolog, 108) != NX_FS_REFUSED_BAD_KIND { return 15 } 62 63 // --- ABUSE-PATTERN: 3 readings in the danger zone (25 C) with pH 64 // stuck at 6.0 (> 4.6) = stalled ferment trending septic --- 65 let plog: *NxFermentReadingLog = nx_ferment_reading_log_new(16) 66 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 67 25000, 6000, 0, 1, 0, plog, 200) != NX_FS_OK { return 16 } 68 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 69 25000, 6000, 0, 1, 0, plog, 201) != NX_FS_OK { return 17 } 70 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 71 25000, 6000, 0, 1, 0, plog, 202) != NX_FS_REFUSED_PATHOGEN_PATTERN { return 18 } 72 73 // --- NEGATIVE CONTROL: cool + ACIDIFIED readings (pH 4.2) must NOT 74 // trip the pattern (proves the detector keys on pH, not noise) --- 75 let qlog: *NxFermentReadingLog = nx_ferment_reading_log_new(16) 76 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 77 25000, 4200, 0, 1, 0, qlog, 300) != NX_FS_OK { return 19 } 78 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 79 25000, 4200, 0, 1, 0, qlog, 301) != NX_FS_OK { return 20 } 80 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 81 25000, 4200, 0, 1, 0, qlog, 302) != NX_FS_OK { return 21 } 82 83 // --- NEGATIVE CONTROL 2: a normally-SOURING warm ferment (43 C, pH 84 // declining 6.5 -> 6.1 -> 5.7 -> 5.3, > 0.2 drop/reading) must 85 // NOT trip the stall pattern even though every reading is deep 86 // in the danger zone. This is the realistic yogurt case. --- 87 let rlog: *NxFermentReadingLog = nx_ferment_reading_log_new(16) 88 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 89 43000, 6500, 0, 1, 0, rlog, 400) != NX_FS_OK { return 22 } 90 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 91 43000, 6100, 0, 1, 0, rlog, 401) != NX_FS_OK { return 23 } 92 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 93 43000, 5700, 0, 1, 0, rlog, 402) != NX_FS_OK { return 24 } 94 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_AEROBIC, 95 43000, 5300, 0, 1, 0, rlog, 403) != NX_FS_OK { return 25 } 96 97 return 0 98}