code wiki / (root) / nx_twincard_gate.nx

nx_twincard_gate.nx source

↩ module page · 247 lines · 20355 B

1// nx_twincard_gate.nx -- the referee for nx_twincard_lib (aesthetictwin AT23, 2026-09-16). In-process, on fixtures built at 2// runtime under /tmp/twincard_gate/ (never the production schema, canon or a real card): a good card is accepted with its method 3// partition, coverage and completed left-right pairs exact, and a bad card is refused with every defect class counted and the 4// first offender named -- the group-label neg-control (an "ancestry" axis) is refused BY NAME, a face id not in the canon is 5// undeclared, a paired axis without a side and an unpaired axis with one are refused, a feature of unknown kind, unknown region 6// or outside its chart is refused, a signed value parses, a class word outside its declared set is refused. Values are printed 7// with gv_kv; the verdict line stays LAST. 8// license_tier: ORIGINAL No hw writes (Rule 26). 9import "nx_syscalls.nx" 10import "nx_gate_verdict.nx" 11import "nx_twincard_lib.nx" 12 13const TG_DIR: *u8 = "/tmp/twincard_gate" 14const TG_SCHEMA: *u8 = "/tmp/twincard_gate/twincard.axes" 15const TG_CANON: *u8 = "/tmp/twincard_gate/facecanon.conf" 16const TG_GOOD: *u8 = "/tmp/twincard_gate/good.card" 17const TG_BAD: *u8 = "/tmp/twincard_gate/bad.card" 18const TG_BAD2: *u8 = "/tmp/twincard_gate/bad2.card" 19const TG_BAD2_TEXT: *u8 = "card|gamma|Gamma Fixture|real|F|REVIEW|1\naxis|ident|ancestry|C|anything|observed|r1|2026-09-16\n" 20const TG_NEG20: i64 = 0 - 20 21const TG_SCHEMA_TEXT: *u8 = "axis|ident|stature|cm10|1200|2200|0|standing height\naxis|ident|sex|class|0|0|0|sex\nclass|ident|sex|F\nclass|ident|sex|M\nclass|ident|sex|X\naxis|skin|freckle_density|class|0|0|0|freckles\nclass|skin|freckle_density|none\nclass|skin|freckle_density|moderate\naxis|soft|areola_over_breast|permil|50|400|1|areola over breast base\naxis|eyes|canthal_tilt|deg10|-150|150|1|lateral canthus above medial is positive\nregion|face|the face chart\nregion|chest|the chest chart\nruler|soft|areola_over_breast|/tmp/twincard_gate/organ_present.nx|am_areola\nruler|face|*|/tmp/twincard_gate/organ_nosymbol.nx|pm_landmarks\nclass|shot|presentation|nude-art\nclass|shot|presentation|glamour\nclass|shot|makeup|none\nclass|shot|makeup|full\nclass|shot|hair_state|natural\nclass|shot|hair_state|styled\nclass|shot|retouch|raw\nclass|shot|retouch|unknown\n" 22const TG_CANON_TEXT: *u8 = "canon|facial_index|bizygomatic|trichion-menton|744|0|0|A|permil|BRIEF|BRIEF\ncanon|vthird_upper|trichion-glabella|trichion-menton|333|0|0|A|permil|BRIEF|BRIEF\n" 23const TG_GOOD_TEXT: *u8 = "card|alpha|Alpha Fixture|real|F|REVIEW|1\nref|r1|knowledge/fetched/fx.jpg|0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef|REVIEW|mirrored\nref|r2|-|-|REVIEW|unmirrored paste\nshot|r1|2019-05|22|seated|neutral|dappled|wicker|eye-level|necklace|nude-art|none|natural|raw\nshot|r2|-|-|standing|smile|soft|studio|eye-level|-|glamour|full|styled|unknown\naxis|ident|stature|C|1680|measured|r1|2026-09-16\naxis|ident|sex|C|F|declared|operator|2026-09-16\naxis|skin|freckle_density|C|moderate|observed|r2|2026-09-16\naxis|soft|areola_over_breast|L|180|observed|r2|2026-09-16\naxis|soft|areola_over_breast|R|172|observed|r2|2026-09-16\naxis|eyes|canthal_tilt|L|-20|measured|r1|2026-09-16\naxis|face|facial_index|C|744|measured|r1|2026-09-16\nfeature|freckle|L|face|412|388|120|620|180|210|observed|r2\nfeature|mole|C|chest|500|300|450|350|150|120|measured|r1\n" 24const TG_BAD_TEXT: *u8 = "card|beta|Beta Fixture|human|F|REVIEW|1\naxis|ident|ancestry|C|anything|observed|r1|2026-09-16\naxis|face|golden_ratio|C|618|measured|r1|2026-09-16\naxis|ident|stature|C|3000|measured|r1|2026-09-16\naxis|ident|stature|C|1700|measured|r1|2026-09-16\naxis|skin|freckle_density|C|lots|observed|r1|2026-09-16\naxis|eyes|canthal_tilt|L|10|guessed|r1|2026-09-16\naxis|soft|areola_over_breast|C|200|observed|r1|2026-09-16\naxis|ident|stature|L|1650|measured|r1|2026-09-16\nref|r1|-|abc|REVIEW|bad sha\nshot|r9|-|-|-|-|-|-|-|-|nude-art|none|natural|raw\nshot|r1|-|-|-|-|-|-|-|-|beach|none|natural|raw\nfeature|wart|L|face|10|10|10|500|0|0|observed|r1\nfeature|freckle|L|nowhere|10|10|10|500|0|0|observed|r1\nfeature|freckle|L|face|2000|10|10|500|0|0|observed|r1\n" 25const TG_GOOD_AXES: i64 = 7 26const TG_GOOD_MEASURED: i64 = 3 27const TG_GOOD_OBSERVED: i64 = 3 28const TG_GOOD_DECLARED: i64 = 1 29const TG_GOOD_REFS: i64 = 2 30const TG_GOOD_SHOTS: i64 = 2 31const TG_GOOD_FEATURES: i64 = 2 32const TG_SCHEMA_SECTIONS: i64 = 4 33const TG_FACE_DECLARED: i64 = 2 34const TG_SOFT_DECLARED: i64 = 2 35const TG_EYES_DECLARED: i64 = 2 36const TG_TOTAL_DECLARED: i64 = 9 37const TG_TOTAL_FILLED: i64 = 7 38const TG_PAIRS_DECLARED: i64 = 2 39const TG_HALF: i64 = 500 40const TG_BAD_DEFECTS: i64 = 15 41const TG_BAD_SHOTS: i64 = 2 42const TG_COV_AXES: i64 = 7 43const TG_COV_RULED: i64 = 3 44const TG_COV_UNRULED: i64 = 4 45const TG_BAD_UNDECLARED: i64 = 2 46const TG_BAD_SIDE: i64 = 2 47const TG_BAD_FEATURES: i64 = 3 48const TG_BAD_AXES: i64 = 8 49const TG_CENSUS_N: i64 = 4 50// the ruler census has its own fixture so every bucket is reached by construction: a planted organ that declares its symbol, a 51// planted organ that does not, and a path removed at setup. The first cut named real-looking runtime/ organs it assumed would never 52// exist, and went RED the day one of them (nx_photomark) was built -- a fixture that depends on what the tree holds measures the tree. 53const TG_CEN_SCHEMA: *u8 = "/tmp/twincard_gate/census.axes" 54const TG_ORGAN_PRESENT: *u8 = "/tmp/twincard_gate/organ_present.nx" 55const TG_ORGAN_NOSYMBOL: *u8 = "/tmp/twincard_gate/organ_nosymbol.nx" 56const TG_ORGAN_MISSING: *u8 = "/tmp/twincard_gate/organ_missing.nx" 57const TG_ORGAN_PRESENT_TEXT: *u8 = "func am_areola(x: i64) -> i64 {\n return x\n}\n" 58const TG_ORGAN_NOSYMBOL_TEXT: *u8 = "func tg_unrelated(x: i64) -> i64 {\n return x\n}\n" 59const TG_CEN_SCHEMA_TEXT: *u8 = "ruler|soft|areola_over_breast|/tmp/twincard_gate/organ_present.nx|am_areola\nruler|face|*|/tmp/twincard_gate/organ_nosymbol.nx|pm_landmarks\nruler|eyes|canthal_tilt|/tmp/twincard_gate/organ_missing.nx|ct_tilt\n" 60const TG_CEN_ROWS: i64 = 3 61const TG_CEN_ABSENT_AFTER: i64 = 2 62 63func tg_write(path: *u8, text: *u8) -> i64 { 64 let fd: i64 = sys_openat_wr(path, RI_MODE644) 65 if fd < 0 { return 0 - 1 } 66 let w: i64 = sys_write(fd, text, ri_slen(text)) 67 sys_close(fd) 68 return w 69} 70 71func main(argc: i64, argv: *i64) -> i64 { 72 gv_head("nx_twincard_gate -- twin card: declared axes, canon face ids, sides, features, method partition, coverage, named refusals" as *u8) 73 let ctr: *i64 = gv_ctr() 74 sys_mkdir(TG_DIR, RI_MODE755) 75 gv_need("fixture-schema-written" as *u8, (tg_write(TG_SCHEMA, TG_SCHEMA_TEXT) > 0) as i64, ctr) 76 gv_need("fixture-canon-written" as *u8, (tg_write(TG_CANON, TG_CANON_TEXT) > 0) as i64, ctr) 77 gv_need("fixture-good-card-written" as *u8, (tg_write(TG_GOOD, TG_GOOD_TEXT) > 0) as i64, ctr) 78 gv_need("fixture-bad-card-written" as *u8, (tg_write(TG_BAD, TG_BAD_TEXT) > 0) as i64, ctr) 79 gv_need("fixture-census-schema-written" as *u8, (tg_write(TG_CEN_SCHEMA, TG_CEN_SCHEMA_TEXT) > 0) as i64, ctr) 80 gv_need("fixture-organ-declaring-the-symbol-written" as *u8, (tg_write(TG_ORGAN_PRESENT, TG_ORGAN_PRESENT_TEXT) > 0) as i64, ctr) 81 gv_need("fixture-organ-without-the-symbol-written" as *u8, (tg_write(TG_ORGAN_NOSYMBOL, TG_ORGAN_NOSYMBOL_TEXT) > 0) as i64, ctr) 82 sys_unlinkat(TG_ORGAN_MISSING) 83 let mfd: i64 = sys_openat_rd(TG_ORGAN_MISSING) 84 if mfd >= 0 { sys_close(mfd) } 85 gv_need("fixture-missing-organ-is-missing" as *u8, (mfd < 0) as i64, ctr) 86 let sl: *i64 = sys_mmap(RI_I64) as *i64 87 let schema: *u8 = ri_load(TG_SCHEMA, sl) 88 let kl: *i64 = sys_mmap(RI_I64) as *i64 89 let canon: *u8 = ri_load(TG_CANON, kl) 90 let gl: *i64 = sys_mmap(RI_I64) as *i64 91 let good: *u8 = ri_load(TG_GOOD, gl) 92 let bl: *i64 = sys_mmap(RI_I64) as *i64 93 let bad: *u8 = ri_load(TG_BAD, bl) 94 let sn: i64 = sl[0] 95 let kn: i64 = kl[0] 96 let gn: i64 = gl[0] 97 let bn: i64 = bl[0] 98 gv_check("fixtures-reached-the-condition-readable" as *u8, ((sn > 0) as i64) * ((kn > 0) as i64) * ((gn > 0) as i64) * ((bn > 0) as i64), ctr) 99 // the good card 100 let rep: *i64 = sys_mmap(TC_R_N * RI_I64) as *i64 101 let first: *u8 = sys_mmap(RI_ROWB) 102 let gdef: i64 = tc_validate(good, gn, schema, sn, canon, kn, rep, first) 103 gv_check_eq("good-card-defects" as *u8, gdef, 0, ctr) 104 gv_check_eq("good-card-header" as *u8, rep[TC_R_HEADER], 1, ctr) 105 gv_check_eq("good-card-axes" as *u8, rep[TC_R_AXES], TG_GOOD_AXES, ctr) 106 gv_check_eq("good-card-valid-equals-axes" as *u8, rep[TC_R_VALID], TG_GOOD_AXES, ctr) 107 let msum: i64 = rep[TC_R_MEASURED] + rep[TC_R_OBSERVED] + rep[TC_R_DECLARED] + rep[TC_R_GENERATED] 108 gv_check_eq("good-card-method-partition-sums-to-valid" as *u8, msum, rep[TC_R_VALID], ctr) 109 gv_check_eq("good-card-measured" as *u8, rep[TC_R_MEASURED], TG_GOOD_MEASURED, ctr) 110 gv_check_eq("good-card-observed" as *u8, rep[TC_R_OBSERVED], TG_GOOD_OBSERVED, ctr) 111 gv_check_eq("good-card-declared" as *u8, rep[TC_R_DECLARED], TG_GOOD_DECLARED, ctr) 112 gv_check_eq("good-card-generated" as *u8, rep[TC_R_GENERATED], 0, ctr) 113 gv_check_eq("good-card-side-defects" as *u8, rep[TC_R_SIDE], 0, ctr) 114 gv_check_eq("good-card-refs" as *u8, rep[TC_R_REFS], TG_GOOD_REFS, ctr) 115 gv_check_eq("good-card-badref" as *u8, rep[TC_R_BADREF], 0, ctr) 116 gv_check_eq("good-card-shots" as *u8, rep[TC_R_SHOTS], TG_GOOD_SHOTS, ctr) 117 gv_check_eq("good-card-badshot" as *u8, rep[TC_R_BADSHOT], 0, ctr) 118 gv_check_eq("good-card-features" as *u8, rep[TC_R_FEATURES], TG_GOOD_FEATURES, ctr) 119 gv_check_eq("good-card-badfeature" as *u8, rep[TC_R_BADFEATURE], 0, ctr) 120 gv_check("good-card-first-offender-empty" as *u8, (first[0] == (0 as u8)) as i64, ctr) 121 let pairs: *i64 = sys_mmap(RI_I64) as *i64 122 let done: i64 = tc_pairs_complete(good, gn, schema, sn, pairs) 123 gv_check_eq("pairs-declared-2" as *u8, pairs[0], TG_PAIRS_DECLARED, ctr) 124 gv_check_eq("pairs-complete-1-areola-both-sides-canthal-left-only" as *u8, done, 1, ctr) 125 // the helpers the validator rests on 126 gv_check_eq("signed-value-parses" as *u8, tc_atoi_signed("-20" as *u8), TG_NEG20, ctr) 127 gv_check("class-word-declared-accepted" as *u8, tc_class_ok(schema, sn, "skin" as *u8, "freckle_density" as *u8, "moderate" as *u8), ctr) 128 gv_check("neg-control-class-word-undeclared-refused" as *u8, (tc_class_ok(schema, sn, "skin" as *u8, "freckle_density" as *u8, "lots" as *u8) == 0) as i64, ctr) 129 let pos: *i64 = sys_mmap(TC_POS_N * RI_I64) as *i64 130 gv_check("face-axis-is-a-canon-id" as *u8, tc_axis_declared(schema, sn, canon, kn, "face" as *u8, "facial_index" as *u8, pos), ctr) 131 gv_check("neg-control-face-id-outside-canon-undeclared" as *u8, (tc_axis_declared(schema, sn, canon, kn, "face" as *u8, "golden_ratio" as *u8, pos) == 0) as i64, ctr) 132 gv_check("neg-control-group-label-is-not-an-axis" as *u8, (tc_axis_declared(schema, sn, canon, kn, "ident" as *u8, "ancestry" as *u8, pos) == 0) as i64, ctr) 133 gv_check("paired-axis-read-from-schema" as *u8, tc_paired(schema, sn, "soft" as *u8, "areola_over_breast" as *u8), ctr) 134 gv_check("neg-control-unpaired-axis-reads-0" as *u8, (tc_paired(schema, sn, "ident" as *u8, "stature" as *u8) == 0) as i64, ctr) 135 gv_check("side-paired-accepts-L" as *u8, tc_side_ok("soft" as *u8, 1, "L" as *u8), ctr) 136 gv_check("neg-control-side-paired-refuses-C" as *u8, (tc_side_ok("soft" as *u8, 1, "C" as *u8) == 0) as i64, ctr) 137 gv_check("neg-control-side-unpaired-refuses-R" as *u8, (tc_side_ok("ident" as *u8, 0, "R" as *u8) == 0) as i64, ctr) 138 gv_check("side-face-accepts-any" as *u8, tc_side_ok("face" as *u8, 0, "L" as *u8), ctr) 139 gv_check("region-declared" as *u8, tc_region_ok(schema, sn, "chest" as *u8), ctr) 140 gv_check("neg-control-region-undeclared" as *u8, (tc_region_ok(schema, sn, "nowhere" as *u8) == 0) as i64, ctr) 141 let organ: *u8 = sys_mmap(RI_PATHB) 142 let symbol: *u8 = sys_mmap(RI_PATHB) 143 gv_check_eq("ruler-exact-row-found" as *u8, tc_ruler_for(schema, sn, "soft" as *u8, "areola_over_breast" as *u8, organ, symbol), TC_RULER_EXACT, ctr) 144 gv_check("ruler-exact-symbol-copied" as *u8, ri_streq(symbol, "am_areola" as *u8), ctr) 145 gv_check_eq("ruler-wildcard-row-found-for-face" as *u8, tc_ruler_for(schema, sn, "face" as *u8, "facial_index" as *u8, organ, symbol), TC_RULER_WILDCARD, ctr) 146 gv_check_eq("neg-control-ruler-none" as *u8, tc_ruler_for(schema, sn, "ident" as *u8, "stature" as *u8, organ, symbol), TC_RULER_NONE, ctr) 147 // the ruler census on its own fixture: one bucket per row, each reached by construction 148 let cl: *i64 = sys_mmap(RI_I64) as *i64 149 let cschema: *u8 = ri_load(TG_CEN_SCHEMA, cl) 150 let cen: *i64 = sys_mmap(TG_CENSUS_N * RI_I64) as *i64 151 let crows: i64 = tc_ruler_census(cschema, cl[0], cen) 152 gv_check_eq("ruler-census-rows-3" as *u8, crows, TG_CEN_ROWS, ctr) 153 gv_check_eq("ruler-census-present-1-planted-organ-declares-the-symbol" as *u8, cen[TC_C_PRESENT], 1, ctr) 154 gv_check_eq("ruler-census-absent-1-planted-organ-lacks-the-symbol" as *u8, cen[TC_C_ABSENT], 1, ctr) 155 gv_check_eq("ruler-census-unjudged-1-organ-file-missing-named-not-invented" as *u8, cen[TC_C_UNJUDGED], 1, ctr) 156 gv_check_eq("ruler-census-partition-sums" as *u8, cen[TC_C_PRESENT] + cen[TC_C_ABSENT] + cen[TC_C_UNJUDGED], crows, ctr) 157 // the census reads the organ, not a constant: strip the symbol from the planted organ and the same row moves present -> absent 158 gv_need("fixture-planted-symbol-removed" as *u8, (tg_write(TG_ORGAN_PRESENT, TG_ORGAN_NOSYMBOL_TEXT) > 0) as i64, ctr) 159 let cen2: *i64 = sys_mmap(TG_CENSUS_N * RI_I64) as *i64 160 tc_ruler_census(cschema, cl[0], cen2) 161 gv_check_eq("neg-control-census-follows-the-file-present-0-after-the-symbol-is-removed" as *u8, cen2[TC_C_PRESENT], 0, ctr) 162 gv_check_eq("neg-control-census-follows-the-file-absent-2-after-the-symbol-is-removed" as *u8, cen2[TC_C_ABSENT], TG_CEN_ABSENT_AFTER, ctr) 163 // sections and coverage 164 let list: *u8 = sys_mmap(TC_LISTB) 165 let sections: i64 = tc_sections(schema, sn, list, TC_LISTB) 166 gv_check_eq("schema-sections-distinct" as *u8, sections, TG_SCHEMA_SECTIONS, ctr) 167 gv_check("schema-first-section-ident" as *u8, ri_streq(tc_list_at(list, 0), "ident" as *u8), ctr) 168 let ident_d: i64 = tc_declared_count(schema, sn, canon, kn, "ident" as *u8) 169 let ident_f: i64 = tc_filled_count(good, gn, schema, sn, canon, kn, "ident" as *u8) 170 gv_check_eq("coverage-ident-declared-2" as *u8, ident_d, 2, ctr) 171 gv_check_eq("coverage-ident-filled-2" as *u8, ident_f, 2, ctr) 172 let soft_d: i64 = tc_declared_count(schema, sn, canon, kn, "soft" as *u8) 173 let soft_f: i64 = tc_filled_count(good, gn, schema, sn, canon, kn, "soft" as *u8) 174 gv_check_eq("coverage-paired-axis-declares-two-values" as *u8, soft_d, TG_SOFT_DECLARED, ctr) 175 gv_check_eq("coverage-paired-axis-both-sides-filled" as *u8, soft_f, TG_SOFT_DECLARED, ctr) 176 let eyes_d: i64 = tc_declared_count(schema, sn, canon, kn, "eyes" as *u8) 177 let eyes_f: i64 = tc_filled_count(good, gn, schema, sn, canon, kn, "eyes" as *u8) 178 gv_check_eq("coverage-eyes-declared-2" as *u8, eyes_d, TG_EYES_DECLARED, ctr) 179 gv_check_eq("coverage-eyes-filled-1-left-only" as *u8, eyes_f, 1, ctr) 180 let face_d: i64 = tc_declared_count(schema, sn, canon, kn, "face" as *u8) 181 let face_f: i64 = tc_filled_count(good, gn, schema, sn, canon, kn, "face" as *u8) 182 gv_check_eq("coverage-face-declared-from-canon" as *u8, face_d, TG_FACE_DECLARED, ctr) 183 gv_check_eq("coverage-face-filled-1" as *u8, face_f, 1, ctr) 184 gv_check_eq("coverage-face-permil-500" as *u8, tc_permil(face_f, face_d), TG_HALF, ctr) 185 gv_check_eq("permil-of-zero-denominator-is-0-not-a-crash" as *u8, tc_permil(1, 0), 0, ctr) 186 let skin_d: i64 = tc_declared_count(schema, sn, canon, kn, "skin" as *u8) 187 let skin_f: i64 = tc_filled_count(good, gn, schema, sn, canon, kn, "skin" as *u8) 188 gv_check_eq("coverage-total-declared-9" as *u8, ident_d + skin_d + soft_d + eyes_d + face_d, TG_TOTAL_DECLARED, ctr) 189 gv_check_eq("coverage-total-filled-7" as *u8, ident_f + skin_f + soft_f + eyes_f + face_f, TG_TOTAL_FILLED, ctr) 190 // the bad card: every defect class counted, the first offender named 191 let brep: *i64 = sys_mmap(TC_R_N * RI_I64) as *i64 192 let bfirst: *u8 = sys_mmap(RI_ROWB) 193 let bdef: i64 = tc_validate(bad, bn, schema, sn, canon, kn, brep, bfirst) 194 gv_check_eq("bad-card-defects" as *u8, bdef, TG_BAD_DEFECTS, ctr) 195 gv_check_eq("bad-card-header-refused" as *u8, brep[TC_R_HEADER], 0, ctr) 196 gv_check_eq("bad-card-undeclared-2-group-label-and-non-canon-face" as *u8, brep[TC_R_UNDECLARED], TG_BAD_UNDECLARED, ctr) 197 gv_check("bad-card-first-offender-is-the-header-in-file-order" as *u8, ri_streq(bfirst, "card/header" as *u8), ctr) 198 // a second bad card whose header is sound, so the group label is the first offender and is named BY NAME 199 gv_need("fixture-bad2-card-written" as *u8, (tg_write(TG_BAD2, TG_BAD2_TEXT) > 0) as i64, ctr) 200 let b2l: *i64 = sys_mmap(RI_I64) as *i64 201 let bad2: *u8 = ri_load(TG_BAD2, b2l) 202 let b2rep: *i64 = sys_mmap(TC_R_N * RI_I64) as *i64 203 let b2first: *u8 = sys_mmap(RI_ROWB) 204 let b2def: i64 = tc_validate(bad2, b2l[0], schema, sn, canon, kn, b2rep, b2first) 205 gv_check_eq("bad2-card-defects-1" as *u8, b2def, 1, ctr) 206 gv_check_eq("bad2-card-undeclared-1" as *u8, b2rep[TC_R_UNDECLARED], 1, ctr) 207 gv_check("neg-control-group-label-refused-by-name-ident-ancestry" as *u8, ri_streq(b2first, "ident/ancestry" as *u8), ctr) 208 gv_check_eq("bad-card-range-1" as *u8, brep[TC_R_RANGE], 1, ctr) 209 gv_check_eq("bad-card-dup-1" as *u8, brep[TC_R_DUP], 1, ctr) 210 gv_check_eq("bad-card-classword-1" as *u8, brep[TC_R_CLASSWORD], 1, ctr) 211 gv_check_eq("bad-card-method-1" as *u8, brep[TC_R_METHOD], 1, ctr) 212 gv_check_eq("bad-card-side-2-paired-without-side-and-unpaired-with-one" as *u8, brep[TC_R_SIDE], TG_BAD_SIDE, ctr) 213 gv_check_eq("bad-card-badref-1" as *u8, brep[TC_R_BADREF], 1, ctr) 214 gv_check_eq("bad-card-badshot-2-unknown-ref-and-undeclared-presentation-word" as *u8, brep[TC_R_BADSHOT], TG_BAD_SHOTS, ctr) 215 // ruler coverage over the fixture schema: soft is ruled exactly, face through its wildcard, the other four axes are not 216 let cov: *i64 = sys_mmap(TG_CENSUS_N * RI_I64) as *i64 217 tc_ruler_coverage(schema, sn, canon, kn, 0, cov) 218 gv_check_eq("ruler-coverage-axes-7-schema-5-plus-canon-2" as *u8, cov[0], TG_COV_AXES, ctr) 219 gv_check_eq("ruler-coverage-ruled-3-exact-soft-and-wildcard-face" as *u8, cov[1], TG_COV_RULED, ctr) 220 gv_check_eq("ruler-coverage-unruled-4-named-by-the-cli-worklist" as *u8, cov[2], TG_COV_UNRULED, ctr) 221 gv_check_eq("ruler-coverage-partition-sums" as *u8, cov[1] + cov[2], cov[0], ctr) 222 gv_check_eq("bad-card-badfeature-3-kind-region-chart" as *u8, brep[TC_R_BADFEATURE], TG_BAD_FEATURES, ctr) 223 gv_check_eq("bad-card-axes-seen" as *u8, brep[TC_R_AXES], TG_BAD_AXES, ctr) 224 gv_check_eq("bad-card-valid-0" as *u8, brep[TC_R_VALID], 0, ctr) 225 gv_values_head() 226 gv_kv("good_defects" as *u8, gdef) 227 gv_kv("good_valid" as *u8, rep[TC_R_VALID]) 228 gv_kv("good_measured" as *u8, rep[TC_R_MEASURED]) 229 gv_kv("good_observed" as *u8, rep[TC_R_OBSERVED]) 230 gv_kv("good_declared" as *u8, rep[TC_R_DECLARED]) 231 gv_kv("good_features" as *u8, rep[TC_R_FEATURES]) 232 gv_kv("pairs_declared" as *u8, pairs[0]) 233 gv_kv("pairs_complete" as *u8, done) 234 gv_kv("schema_sections" as *u8, sections) 235 gv_kv("face_declared" as *u8, face_d) 236 gv_kv("total_declared" as *u8, ident_d + skin_d + soft_d + eyes_d + face_d) 237 gv_kv("bad_defects" as *u8, bdef) 238 gv_kv("bad_undeclared" as *u8, brep[TC_R_UNDECLARED]) 239 gv_kv("bad_side" as *u8, brep[TC_R_SIDE]) 240 gv_kv("bad_features" as *u8, brep[TC_R_BADFEATURE]) 241 gv_kv("census_rows" as *u8, crows) 242 gv_kv("census_present" as *u8, cen[TC_C_PRESENT]) 243 gv_kv("census_absent" as *u8, cen[TC_C_ABSENT]) 244 gv_kv("census_unjudged" as *u8, cen[TC_C_UNJUDGED]) 245 gv_kv("census_absent_after_strip" as *u8, cen2[TC_C_ABSENT]) 246 return gv_verdict("nx_twincard_gate" as *u8, ctr, "a good card accepted with its method partition, coverage and completed pairs exact, a bad card refused with every defect class counted and the first offender named, on runtime fixtures under /tmp/twincard_gate" as *u8) 247}