code wiki / (root) / nx_ferment_invent_test.nx

nx_ferment_invent_test.nx source

↩ module page · 50 lines · 2336 B

1// nx_ferment_invent_test.nx -- smoke for nx_ferment_invent (R5). 2// 3// Proves generative fermentation design that is SAFE BY CONSTRUCTION: 4// - invents a viable yogurt: safe, warm, sets within target (1-5) 5// - the invented recipe RE-VALIDATES safe under R0 (6) 6// - REFUSES a too-cold anaerobic batch (never acidifies in time) (7) 7// - REFUSES an under-salted vegetable ferment (botulism risk) (8) 8// - invents a viable kraut once salt is adequate (9) 9// Exit code = failed assertion number; 0 = all pass. 10 11import "nx_syscalls.nx" 12import "nx_ferment_safety.nx" 13import "nx_ferment_kinetics.nx" 14import "nx_ferment_invent.nx" 15 16func main() -> i64 { 17 let env: *NxFermentSafetyEnvelope = nx_ferment_safety_envelope_default(1) 18 let nolog: *NxFermentReadingLog = (0) as *NxFermentReadingLog 19 20 // --- invent a yogurt: dairy, anaerobic, 20..50 C, within 48 h --- 21 let yog: *NxFermentRecipe = nx_ferment_invent(env, NX_FK_DAIRY_CULTURED, 22 NX_OX_ANAEROBIC, 20, 50, 48, 0) 23 if yog.safe != 1 { return 1 } 24 if yog.hold_temp_c < 30 { return 2 } // picked a warm hold 25 if yog.hold_temp_c > 54 { return 3 } // stayed below culture-kill 26 if yog.predicted_set_hours <= 0 { return 4 } 27 if yog.predicted_set_hours > 48 { return 5 } // meets the time target 28 29 // --- the invented recipe RE-VALIDATES safe under the R0 law --- 30 let yph: i64 = nx_ferment_kinetics_ph_at(yog.hold_temp_c, 48) 31 if nx_ferment_validate(env, NX_FK_DAIRY_CULTURED, NX_OX_ANAEROBIC, 32 (yog.hold_temp_c * 1000) as nx_size, yph as nx_size, 0, 48, 0, nolog, 48) != NX_FS_OK { return 6 } 33 34 // --- REFUSES a too-cold anaerobic batch (5..15 C never sets in time) --- 35 let cold: *NxFermentRecipe = nx_ferment_invent(env, NX_FK_DAIRY_CULTURED, 36 NX_OX_ANAEROBIC, 5, 15, 48, 0) 37 if cold.safe != 0 { return 7 } 38 39 // --- REFUSES an under-salted vegetable ferment (salt 1.0% < 2.0%) --- 40 let undersalt: *NxFermentRecipe = nx_ferment_invent(env, NX_FK_VEG_ANAEROBIC, 41 NX_OX_ANAEROBIC, 20, 35, 96, 1000) 42 if undersalt.safe != 0 { return 8 } 43 44 // --- invents a viable kraut once salt is adequate (3.0%) --- 45 let kraut: *NxFermentRecipe = nx_ferment_invent(env, NX_FK_VEG_ANAEROBIC, 46 NX_OX_ANAEROBIC, 20, 35, 96, 3000) 47 if kraut.safe != 1 { return 9 } 48 49 return 0 50}