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}