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&pound 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}