code wiki / _hdl_build / nx_meal_plan_gate.nx

nx_meal_plan_gate.nx source

↩ module page · 122 lines · 7050 B

1// nx_meal_plan_gate.nx -- proves the recipe/unit spine on per-run /tmp fixtures. The BITE cell guards the 2// vacuous-requirement trap: a recipe with NO ingredients is trivially satisfied by an EMPTY pantry, so a naive 3// "can I cook it" check recommends phantom dishes to someone with nothing in the house. 4// license_tier: ORIGINAL No hw writes (Rule 26). 5import "nx_syscalls.nx" 6import "nx_meal_plan.nx" 7import "nx_gate_verdict.nx" 8 9const PG_PFX: i64 = 160 10const PG_FLD: i64 = 512 11 12func main(argc: i64, argv: *i64) -> i64 { 13 let ctr: *i64 = gv_ctr() 14 gv_head("nx_meal_plan -- recipes, units (family/person/restaurant), similarity, and cook-from-stock" as *u8) 15 16 let ep: i64 = sys_now_realtime_sec() 17 let pfx: *u8 = sys_mmap(PG_PFX) 18 var o: i64 = as_append(pfx, 0, "/tmp/mpl_" as *u8) 19 o = fd_apnum(pfx, o, ep) 20 o = as_append(pfx, o, "-" as *u8) 21 pfx[o] = 0 as u8 22 let inv: *u8 = sys_mmap(PG_PFX) 23 var q: i64 = as_append(inv, 0, "/tmp/mplinv_" as *u8) 24 q = fd_apnum(inv, q, ep) 25 q = as_append(inv, q, "-" as *u8) 26 inv[q] = 0 as u8 27 28 let dom: *u8 = "wests" as *u8 29 30 mp_add_recipe(pfx, "shortribs" as *u8, "Gochujang Braised Short Ribs" as *u8, "Slow-braised, deeply savoury" as *u8, 6, "beef garlic ginger soy scallion" as *u8) 31 mp_add_recipe(pfx, "twin" as *u8, "Sunday Braised Ribs" as *u8, "The same pantry, another name" as *u8, 6, "beef garlic ginger soy scallion" as *u8) 32 mp_add_recipe(pfx, "beefstirfry" as *u8, "Beef and Broccoli" as *u8, "Weeknight wok dish" as *u8, 4, "beef garlic ginger broccoli soy" as *u8) 33 mp_add_recipe(pfx, "tofusalad" as *u8, "Chilled Tofu Salad" as *u8, "No cooking at all" as *u8, 2, "tofu lettuce lemon" as *u8) 34 mp_add_recipe(pfx, "phantom" as *u8, "Dish With No Ingredients" as *u8, "The vacuity trap" as *u8, 1, "" as *u8) 35 36 // the unit's pantry: everything for the ribs, but no broccoli 37 iv_add(inv, dom, "beef" as *u8, "Short rib" as *u8, "meat" as *u8, 2, "lb" as *u8, "freezer" as *u8, 1800, 0, "" as *u8) 38 iv_add(inv, dom, "garlic" as *u8, "Garlic" as *u8, "produce" as *u8, 3, "bulb" as *u8, "pantry" as *u8, 90, 0, "" as *u8) 39 iv_add(inv, dom, "ginger" as *u8, "Ginger" as *u8, "produce" as *u8, 1, "knob" as *u8, "fridge" as *u8, 120, 0, "" as *u8) 40 iv_add(inv, dom, "soy" as *u8, "Soy sauce" as *u8, "pantry" as *u8, 1, "bottle" as *u8, "pantry" as *u8, 340, 0, "" as *u8) 41 iv_add(inv, dom, "scallion" as *u8, "Scallion" as *u8, "produce" as *u8, 4, "stalk" as *u8, "fridge" as *u8, 60, 0, "" as *u8) 42 43 // ---- T1 recipe round-trip ---- 44 let f: *u8 = sys_mmap(PG_FLD) 45 var t1: i64 = 1 46 mp_field(pfx, "shortribs" as *u8, MP_F_TITLE, f) 47 if fd_streq(f, "Gochujang Braised Short Ribs" as *u8) == 0 { t1 = 0 } 48 mp_field(pfx, "shortribs" as *u8, MP_F_BLURB, f) 49 if fd_streq(f, "Slow-braised, deeply savoury" as *u8) == 0 { t1 = 0 } 50 if mp_serves(pfx, "shortribs" as *u8) != 6 { t1 = 0 } 51 let it: *i64 = sys_mmap(8 * 64) as *i64 52 if mp_items(pfx, "shortribs" as *u8, it) != 5 { t1 = 0 } 53 if fd_streq(it[0] as *u8, "beef" as *u8) == 0 { t1 = 0 } 54 if fd_streq(it[4] as *u8, "scallion" as *u8) == 0 { t1 = 0 } 55 let allr: *i64 = sys_mmap(8 * 64) as *i64 56 if mp_recipes(pfx, allr) != 5 { t1 = 0 } 57 gv_check("T1 recipe round-trips: title, blurb, serves, and its 5 ingredient ids" as *u8, t1, ctr) 58 59 // ---- T2 one engine, three kinds of unit ---- 60 mp_add_unit(pfx, "wests" as *u8, "The West Family" as *u8, "family" as *u8, "wests" as *u8, "seattle" as *u8) 61 mp_add_unit(pfx, "ana" as *u8, "Ana" as *u8, "person" as *u8, "ana" as *u8, "seattle" as *u8) 62 mp_add_unit(pfx, "spicehouse" as *u8, "Sichuan Spice House" as *u8, "restaurant" as *u8, "spicehouse" as *u8, "portland" as *u8) 63 var t2: i64 = 1 64 mp_unit_field(pfx, "spicehouse" as *u8, MP_U_LABEL, f) 65 if fd_streq(f, "Sichuan Spice House" as *u8) == 0 { t2 = 0 } 66 mp_unit_field(pfx, "spicehouse" as *u8, MP_U_KIND, f) 67 if fd_streq(f, "restaurant" as *u8) == 0 { t2 = 0 } 68 mp_unit_field(pfx, "ana" as *u8, MP_U_KIND, f) 69 if fd_streq(f, "person" as *u8) == 0 { t2 = 0 } 70 mp_unit_field(pfx, "wests" as *u8, MP_U_AREA, f) 71 if fd_streq(f, "seattle" as *u8) == 0 { t2 = 0 } 72 let un: *i64 = sys_mmap(8 * 64) as *i64 73 if mp_units(pfx, un) != 3 { t2 = 0 } 74 gv_check("T2 family, person and restaurant register through ONE engine, none a special case" as *u8, t2, ctr) 75 76 // ---- T3 similarity is exact integer permille ---- 77 var t3: i64 = 1 78 if mp_similarity(pfx, "shortribs" as *u8, "twin" as *u8) != 1000 { t3 = 0 } 79 if mp_shared(pfx, "shortribs" as *u8, "beefstirfry" as *u8) != 4 { t3 = 0 } 80 if mp_similarity(pfx, "shortribs" as *u8, "beefstirfry" as *u8) != 666 { t3 = 0 } // 1000*4/6 81 if mp_similarity(pfx, "shortribs" as *u8, "tofusalad" as *u8) != 0 { t3 = 0 } 82 if mp_similarity(pfx, "shortribs" as *u8, "nosuchrecipe" as *u8) != 0 { t3 = 0 } 83 gv_check("T3 similarity: identical sets 1000, 4-of-6 union 666, no overlap 0, unknown resembles NOTHING" as *u8, t3, ctr) 84 85 // ---- T4 ranking ---- 86 let sr: *i64 = sys_mmap(8 * 32) as *i64 87 let ss: *i64 = sys_mmap(8 * 32) as *i64 88 let ns: i64 = mp_similar(pfx, "shortribs" as *u8, sr, ss, 8) 89 var t4: i64 = 1 90 if ns != 2 { t4 = 0 } // zero-overlap candidates omitted 91 if fd_streq(sr[0] as *u8, "twin" as *u8) == 0 { t4 = 0 } 92 if ss[0] != 1000 { t4 = 0 } 93 if fd_streq(sr[1] as *u8, "beefstirfry" as *u8) == 0 { t4 = 0 } 94 if ss[1] != 666 { t4 = 0 } 95 gv_check("T4 more-like-this ranks 1000 then 666 and omits the two zero-overlap dishes" as *u8, t4, ctr) 96 97 // ---- T5 BITE the vacuous-requirement trap ---- 98 var vac_bad: i64 = 0 99 if mp_can_cook(inv, dom, pfx, "phantom" as *u8) == 0 { vac_bad = 1 } 100 var vac_good: i64 = 0 101 if mp_can_cook(inv, dom, pfx, "shortribs" as *u8) == 0 { vac_good = 1 } 102 gv_bite("T5 cookability refuses the zero-ingredient dish, still accepts the fully stocked one" as *u8, vac_bad, vac_good, ctr) 103 104 // ---- T6 cook from stock / nearly there ---- 105 let ck: *i64 = sys_mmap(8 * 32) as *i64 106 let nk: i64 = mp_cookable(inv, dom, pfx, ck, 16) 107 var t6: i64 = 1 108 if nk != 2 { t6 = 0 } // shortribs + twin, never phantom 109 if mp_missing(inv, dom, pfx, "beefstirfry" as *u8) != 1 { t6 = 0 } // only broccoli 110 if mp_missing(inv, dom, pfx, "tofusalad" as *u8) != 3 { t6 = 0 } 111 let nr: *i64 = sys_mmap(8 * 32) as *i64 112 let nm: *i64 = sys_mmap(8 * 32) as *i64 113 let nn: i64 = mp_nearly(inv, dom, pfx, 1, nr, nm, 16) 114 if nn != 1 { t6 = 0 } 115 if fd_streq(nr[0] as *u8, "beefstirfry" as *u8) == 0 { t6 = 0 } 116 if nm[0] != 1 { t6 = 0 } 117 gv_check("T6 two dishes cookable now; beef-and-broccoli is one item away; tofu salad is three" as *u8, t6, ctr) 118 119 let rc: i64 = gv_verdict("MEAL-PLAN" as *u8, ctr, "units are one engine; similarity is explainable; an empty requirement is never satisfied" as *u8) 120 sys_exit(rc) 121 return 0 122}