nx_flavor_design_test.nx source
↩ module page · 77 lines · 2752 B
1// nx_flavor_design_test.nx -- smoke for nx_flavor_design (T5).
2//
3// Proves generative, target-driven flavor design + the MEASURED EXCEED
4// (a generated BLEND beats every single ingredient on perceived profile):
5// - distance metric basics (1-2)
6// - best single picks the closest palette ingredient (3)
7// - GENERATIVE: best 2-ingredient blend beats best single for a balanced
8// target, and it is the sweet+sour pair (4-6)
9// - generalises: a pure-sweet target picks the pure-sweet ingredient (7)
10// Exit code = failed assertion number; 0 = all pass.
11
12import "nx_syscalls.nx"
13import "nx_taste_psychophysics.nx"
14import "nx_flavor_design.nx"
15
16func main() -> i64 {
17 // --- distance basics ---
18 let a: *i64 = (sys_mmap(40)) as *i64
19 a[0] = 300
20 a[1] = 300
21 a[2] = 0
22 a[3] = 0
23 a[4] = 0
24 let b: *i64 = (sys_mmap(40)) as *i64
25 b[0] = 300
26 b[1] = 300
27 b[2] = 0
28 b[3] = 0
29 b[4] = 0
30 if nx_flavor_distance(a, b) != 0 { return 1 }
31 b[0] = 0
32 if nx_flavor_distance(a, b) != 300 { return 2 }
33
34 // --- target: balanced sweet-sour ---
35 let target: *i64 = (sys_mmap(40)) as *i64
36 target[0] = 300
37 target[1] = 300
38 target[2] = 0
39 target[3] = 0
40 target[4] = 0
41
42 // --- palette of 3 pure ingredients (flat 3*5 = 15 i64) ---
43 let pal: *i64 = (sys_mmap(8 * 15)) as *i64
44 pal[0] = 300 // ing0 pure sweet
45 pal[5] = 300; pal[6] = 0 // ing1 pure sour: index 6 = sour
46 pal[6] = 300; pal[5] = 0
47 pal[12] = 300 // ing2 pure salty (index 10..14, salty = +2)
48
49 // (set the rest explicitly to avoid relying on zero-init beyond mmap)
50 pal[1] = 0; pal[2] = 0; pal[3] = 0; pal[4] = 0
51 pal[7] = 0; pal[8] = 0; pal[9] = 0
52 pal[10] = 0; pal[11] = 0; pal[13] = 0; pal[14] = 0
53
54 // --- best single is one of the pures (distance 300 from balanced) ---
55 let bi: i64 = nx_flavor_design_best(target, pal, 3)
56 if bi < 0 { return 3 }
57 let single_d: i64 = nx_flavor_design_best_distance(target, pal, 3)
58
59 // --- GENERATIVE: best blend beats best single ---
60 let oi: *i64 = (sys_mmap(8)) as *i64
61 let oj: *i64 = (sys_mmap(8)) as *i64
62 let blend_d: i64 = nx_flavor_design_best_blend(target, pal, 3, oi, oj)
63 if blend_d >= single_d { return 4 } // a NEW combination matches better
64 if oi[0] != 0 { return 5 } // chose pure-sweet
65 if oj[0] != 1 { return 6 } // + pure-sour
66
67 // --- generalises: pure-sweet target picks the pure-sweet ingredient ---
68 let target2: *i64 = (sys_mmap(40)) as *i64
69 target2[0] = 300
70 target2[1] = 0
71 target2[2] = 0
72 target2[3] = 0
73 target2[4] = 0
74 if nx_flavor_design_best(target2, pal, 3) != 0 { return 7 }
75
76 return 0
77}