code wiki / _hdl_build / nx_unitconv_gate.nx
nx_unitconv_gate.nx source
↩ module page · 171 lines · 9078 B
1// nx_unitconv_gate.nx -- benchmark the measurement-systems organ against the INTERNATIONAL DEFINITIONS and the
2// historic unit-disaster cases. Teeth are exact integers from the 1959 yard£ agreement + UK Weights and
3// Measures. Includes: exact round-trips across systems, the twin fx256 grid, UK-vs-US gallon divergence, the
4// US-survey-foot 2ppm trap, the MARS CLIMATE ORBITER lbf-s/N-s factor, the GIMLI GLIDER lb/kg fuel case, LOUD
5// dimension-mismatch refusal (neg-control), and the exactness-remainder honesty machinery. expect_exit: 0
6// license_tier: ORIGINAL
7import "nx_unitconv.nx"
8
9func ug_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
10func ug_putn(v: i64) -> i64 {
11 let bb: *u8 = sys_mmap(28)
12 var m: i64 = v
13 if m < 0 { ug_puts("-" as *u8); m = 0 - m }
14 let t: *u8 = sys_mmap(28)
15 var k: i64 = 0
16 if m == 0 { t[0] = 48 as u8; k = 1 }
17 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
18 var i: i64 = 0
19 while i < k { bb[i] = t[k - 1 - i]; i = i + 1 }
20 sys_write(1, bb, k)
21 return 0
22}
23func ug_tooth(name: *u8, pass: i64, fails: *i64) -> i64 {
24 ug_puts(" " as *u8); ug_puts(name); ug_puts(" -> " as *u8)
25 if pass == 1 { ug_puts("PASS\n" as *u8); return 0 }
26 ug_puts("FAIL\n" as *u8)
27 fails[0] = fails[0] + 1
28 return 0
29}
30
31func main() -> i64 {
32 ug_puts("=== nx_unitconv_gate -- metric + US + UK measurement systems, EXACT conversions ===\n" as *u8)
33 let fails: *i64 = sys_mmap(8) as *i64
34 fails[0] = 0
35 let u: *i64 = sys_mmap(64) as *i64
36 ur_init(u, 64)
37 let ncnt: i64 = ur_std(u)
38 ug_puts(" registry units=" as *u8); ug_putn(ncnt); ug_puts(" (all auto-reduced + overflow-guarded at add)\n" as *u8)
39 let out2: *i64 = sys_mmap(16) as *i64
40
41 let iIN: i64 = ur_find(u, "in" as *u8)
42 let iMM: i64 = ur_find(u, "mm" as *u8)
43 let iUM: i64 = ur_find(u, "um" as *u8)
44 let iFT: i64 = ur_find(u, "ft" as *u8)
45 let iYD: i64 = ur_find(u, "yd" as *u8)
46 let iMILE: i64 = ur_find(u, "mile" as *u8)
47 let iFX: i64 = ur_find(u, "fx256mm" as *u8)
48 let iNM: i64 = ur_find(u, "nm" as *u8)
49 let iUIN: i64 = ur_find(u, "uin" as *u8)
50 let iFTS: i64 = ur_find(u, "ftUSsurvey" as *u8)
51
52 // T1 registry sane: 49 units (LEN 14 + MASS 10 + FORCE 5 + VOL 10 + TIME 6 + IMPULSE 4), lookups resolve
53 var t1: i64 = 0
54 if ncnt == 49 { if iIN >= 0 { if iFX >= 0 { if iFTS >= 0 { t1 = 1 } } } }
55 let ig1: i64 = ug_tooth("T1 registry: 49 units across 6 dimensions, lookups resolve" as *u8, t1, fails)
56
57 // T2 THE 1959 DEFINITION, exact: 1 in = 25400 um EXACT (rem 0); round-trip back = 1 exact
58 ur_conv(u, 1, iIN, iUM, out2)
59 var t2: i64 = 0
60 if out2[0] == 25400 { if out2[1] == 0 {
61 ur_conv(u, 25400, iUM, iIN, out2)
62 if out2[0] == 1 { if out2[1] == 0 { t2 = 1 } }
63 } }
64 let ig2: i64 = ug_tooth("T2 1 in == 25400 um EXACT both ways (25.4mm, 1959 definition)" as *u8, t2, fails)
65
66 // T3 system-internal exactness: 12 in = 1 ft; 5280 ft = 1 mile; 1760 yd = 1 mile (all rem 0)
67 var t3: i64 = 1
68 ur_conv(u, 12, iIN, iFT, out2)
69 if out2[0] != 1 { t3 = 0 }
70 if out2[1] != 0 { t3 = 0 }
71 ur_conv(u, 5280, iFT, iMILE, out2)
72 if out2[0] != 1 { t3 = 0 }
73 if out2[1] != 0 { t3 = 0 }
74 ur_conv(u, 1760, iYD, iMILE, out2)
75 if out2[0] != 1 { t3 = 0 }
76 if out2[1] != 0 { t3 = 0 }
77 let ig3: i64 = ug_tooth("T3 12in=1ft, 5280ft=1mile, 1760yd=1mile ALL EXACT" as *u8, t3, fails)
78
79 // T4 the TWIN GRID: 5 in = 32512 fx256 EXACT; 1 in = 6502.4 fx -> 6502 with remainder FLAGGED (honesty)
80 ur_conv(u, 5, iIN, iFX, out2)
81 var t4: i64 = 0
82 if out2[0] == 32512 { if out2[1] == 0 {
83 ur_conv(u, 32512, iFX, iIN, out2)
84 if out2[0] == 5 { if out2[1] == 0 {
85 ur_conv(u, 1, iIN, iFX, out2)
86 if out2[0] == 6502 { if out2[1] != 0 { t4 = 1 } } // 6502.4: rounded + INEXACT VISIBLE
87 } }
88 } }
89 let ig4: i64 = ug_tooth("T4 twin grid: 5in==32512fx EXACT round-trip; 1in->6502fx flagged INEXACT" as *u8, t4, fails)
90
91 // T5 US SURVEY FOOT trap: 1e6 international ft vs 1e6 survey ft, in nm -- diverge ~609.6mm (2ppm)
92 ur_conv(u, 1000000, iFT, iNM, out2)
93 let intl: i64 = out2[0]
94 ur_conv(u, 1000000, iFTS, iNM, out2)
95 let surv: i64 = out2[0]
96 let diff: i64 = surv - intl
97 ug_puts(" survey-foot trap: 1e6 ft intl=" as *u8); ug_putn(intl)
98 ug_puts(" nm, survey=" as *u8); ug_putn(surv)
99 ug_puts(" nm, DIVERGENCE=" as *u8); ug_putn(diff); ug_puts(" nm (~609.6mm -- state-plane hazard)\n" as *u8)
100 var t5: i64 = 0
101 if intl == 304800000000000 { if diff > 609599000 { if diff < 609602000 { t5 = 1 } } }
102 let ig5: i64 = ug_tooth("T5 survey-vs-international foot divergence MEASURED (~609.6mm per 1e6 ft)" as *u8, t5, fails)
103
104 // T6 MARS CLIMATE ORBITER: 100 lbf-s -> nN-s = 444,822,161,526 (444.82 N-s, factor 4.4482 vs a raw N-s read)
105 let iLBFS: i64 = ur_find(u, "lbfs" as *u8)
106 let iNNS: i64 = ur_find(u, "nNs" as *u8)
107 let iNS: i64 = ur_find(u, "Ns" as *u8)
108 ur_conv(u, 100, iLBFS, iNNS, out2)
109 ug_puts(" MCO case: 100 lbf-s = " as *u8); ug_putn(out2[0]); ug_puts(" nN-s (a raw '100 N-s' read = 100000000000 -> 4.448x error)\n" as *u8)
110 var t6: i64 = 0
111 if out2[0] == 444822161526 { if out2[1] != 0 { // .05 remainder flagged
112 ur_conv(u, 100, iLBFS, iNS, out2)
113 if out2[0] == 445 { t6 = 1 } // rounded N-s, remainder visible
114 } }
115 let ig6: i64 = ug_tooth("T6 MARS-ORBITER factor: 100 lbf-s == 444822161526 nN-s EXACT-to-0.05 (4.4482x)" as *u8, t6, fails)
116
117 // T7 GIMLI GLIDER: 22300 kg fuel needed, crew computed in lb (factor 2.2): 22300 kg = 49163 lb (rounded);
118 // loading 22300 lb instead = 10115 kg -> less than HALF the fuel. Both measured via exact conversions.
119 let iKG: i64 = ur_find(u, "kg" as *u8)
120 let iLB: i64 = ur_find(u, "lb" as *u8)
121 ur_conv(u, 22300, iKG, iLB, out2)
122 let lbneed: i64 = out2[0]
123 ur_conv(u, 22300, iLB, iKG, out2)
124 let kgloaded: i64 = out2[0]
125 ug_puts(" Gimli case: need 22300 kg = " as *u8); ug_putn(lbneed)
126 ug_puts(" lb; crew loaded 22300 lb = " as *u8); ug_putn(kgloaded); ug_puts(" kg (<half -- ran dry mid-flight)\n" as *u8)
127 var t7: i64 = 0
128 if lbneed == 49163 { if kgloaded == 10115 { t7 = 1 } }
129 let ig7: i64 = ug_tooth("T7 GIMLI-GLIDER case: kg/lb mix measured (22300kg=49163lb; 22300lb=10115kg)" as *u8, t7, fails)
130
131 // T8 UK vs US volume (still-used difference): 1000 UK pints vs 1000 US pints in uL, both EXACT
132 let iPUK: i64 = ur_find(u, "pintUK" as *u8)
133 let iPUS: i64 = ur_find(u, "pintUS" as *u8)
134 let iUL: i64 = ur_find(u, "uL" as *u8)
135 ur_conv(u, 1000, iPUK, iUL, out2)
136 let puk: i64 = out2[0]
137 let pukx: i64 = out2[1]
138 ur_conv(u, 1000, iPUS, iUL, out2)
139 var t8: i64 = 0
140 if puk == 568261250 { if pukx == 0 { if out2[0] == 473176473 { if out2[1] == 0 { t8 = 1 } } } }
141 ug_puts(" UK pint=568.26125mL vs US pint=473.176473mL (x1000 both EXACT integers)\n" as *u8)
142 let ig8: i64 = ug_tooth("T8 UK vs US pint: 568261250 vs 473176473 uL per 1000, both EXACT" as *u8, t8, fails)
143
144 // T9 LOUD REFUSALS (neg-controls): dimension mismatch -2; absurd unit refused at add -1
145 let e1: i64 = ur_conv(u, 1, iIN, iLB, out2) // length -> mass: REFUSE
146 let e2: i64 = ur_add(u, "absurd" as *u8, UR_LEN, 9000000000000000, 9000000000000001)
147 var t9: i64 = 0
148 if e1 == 0 - 2 { if e2 == 0 - 1 { t9 = 1 } }
149 let ig9: i64 = ug_tooth("T9 LOUD refusal: in->lb = dim-mismatch(-2); overflow unit rejected at add(-1)" as *u8, t9, fails)
150
151 // T10 dual-dimensioning the REAL twin part: bolt radius 1280 fx (5.000mm from nx_step_nurbs) in all systems
152 ur_conv(u, 1280, iFX, iNM, out2)
153 let rnm: i64 = out2[0]
154 let rnmx: i64 = out2[1]
155 ur_conv(u, 1280, iFX, iUIN, out2)
156 let ruin: i64 = out2[0]
157 ug_puts(" BOLT RADIUS (twin): 1280 fx = " as *u8); ug_putn(rnm)
158 ug_puts(" nm EXACT = " as *u8); ug_putn(ruin); ug_puts(" uin (0.19685 in / 196.85 thou)\n" as *u8)
159 var t10: i64 = 0
160 if rnm == 5000000 { if rnmx == 0 { if ruin == 196850 { t10 = 1 } } }
161 let ig10: i64 = ug_tooth("T10 twin bolt radius: 5,000,000 nm EXACT == 196850 uin (dual-dimensioned)" as *u8, t10, fails)
162
163 ug_puts("\nANTI-JPL DOCTRINE: values carry units; conversions are exact rationals of the international\n" as *u8)
164 ug_puts("definitions; rounding is VISIBLE (remainder); mismatch/overflow REFUSE LOUDLY. Metric + US customary +\n" as *u8)
165 ug_puts("UK imperial + survey + the twin fx grid in one registry. HONEST scope: ratio units only -- temperature\n" as *u8)
166 ug_puts("(affine) and angle (pi-irrational) need their own machinery; named next rungs.\n" as *u8)
167 ug_puts("\nfails=" as *u8); ug_putn(fails[0]); ug_puts("\n" as *u8)
168 if fails[0] == 0 { ug_puts("verdict=GREEN -- measurement systems 10/10 (exact conversions, disasters caught, refusals loud)\n" as *u8); return 0 }
169 ug_puts("RED\n" as *u8)
170 return 1
171}