code wiki / (root) / nx_mvault_tag_gate.nx

nx_mvault_tag_gate.nx source

↩ module page · 85 lines · 3139 B

1// nx_mvault_tag_gate.nx -- proves the metadata schema is OPEN (any namespace), 2// LOSSLESS (exact quantitative attrs), and SEARCHABLE (facet keys sort by value). 3// run-exit == 0 means GREEN. 4 5import "nx_syscalls.nx" 6import "nx_mvault_tag.nx" 7 8func streq(a: *u8, b: *u8) -> i64 { 9 var i: i64 = 0 10 while 1 == 1 { 11 if a[i] != b[i] { return 0 } 12 if a[i] == (0 as u8) { return 1 } 13 i = i + 1 14 } 15 return 0 16} 17 18func main(argc: i64, argv: *i64) -> i64 { 19 var fails: i64 = 0 20 let buf: *u8 = sys_mmap(256) 21 22 // 1: a known-ish namespace (performer identity from face) 23 let ns_perf: *u8 = "performer" as *u8 24 let v_elara: *u8 = "elara" as *u8 25 let e_perf: *u8 = "performer:elara" as *u8 26 mv_tag_make(buf, ns_perf, v_elara) 27 if streq(buf, e_perf) != 1 { fails = fails + 1 } 28 if mv_tag_ns_len(buf) != 9 { fails = fails + 1 } 29 30 // 2: a NOVEL namespace -- the code hardcodes NO tag list (extensibility) 31 let ns_pose: *u8 = "pose" as *u8 32 let v_crouch: *u8 = "crouching" as *u8 33 let e_pose: *u8 = "pose:crouching" as *u8 34 mv_tag_make(buf, ns_pose, v_crouch) 35 if streq(buf, e_pose) != 1 { fails = fails + 1 } 36 if mv_tag_ns_len(buf) != 4 { fails = fails + 1 } 37 38 // 3: visual-attribute tags (booru-style) 39 let ns_hair: *u8 = "hair" as *u8 40 let v_blonde: *u8 = "blonde" as *u8 41 let e_hair: *u8 = "hair:blonde" as *u8 42 mv_tag_make(buf, ns_hair, v_blonde) 43 if streq(buf, e_hair) != 1 { fails = fails + 1 } 44 let ns_cup: *u8 = "cup" as *u8 45 let v_d: *u8 = "d" as *u8 46 let e_cup: *u8 = "cup:d" as *u8 47 mv_tag_make(buf, ns_cup, v_d) 48 if streq(buf, e_cup) != 1 { fails = fails + 1 } 49 50 // 4: LOSSLESS quantitative attribute -- hip-waist ratio, exact 0.700 51 let k_hwr: *u8 = "hip_waist_ratio" as *u8 52 let e_hwr: *u8 = "hip_waist_ratio=700/1000" as *u8 53 mv_attr_make(buf, k_hwr, 700, 1000) 54 if streq(buf, e_hwr) != 1 { fails = fails + 1 } 55 // 5: bust measurement 90.0 cm lossless 56 let k_bust: *u8 = "bust_cm" as *u8 57 let e_bust: *u8 = "bust_cm=900/10" as *u8 58 mv_attr_make(buf, k_bust, 900, 10) 59 if streq(buf, e_bust) != 1 { fails = fails + 1 } 60 61 // 6: FACET sort keys -- find large files (byte order == numeric order) 62 let kbig: *u8 = sys_mmap(64) 63 let ksml: *u8 = sys_mmap(64) 64 let f_size: *u8 = "size" as *u8 65 mv_facet_key(kbig, f_size, 5368709120) // 5 GiB 66 mv_facet_key(ksml, f_size, 100) // 100 B 67 if mv_bcmp(kbig, ksml, 13) != 1 { fails = fails + 1 } 68 if mv_bcmp(ksml, kbig, 13) != (0 - 1) { fails = fails + 1 } 69 if mv_bcmp(kbig, kbig, 13) != 0 { fails = fails + 1 } 70 71 // 7: recency facet -- newer sorts after older 72 let kold: *u8 = sys_mmap(64) 73 let knew: *u8 = sys_mmap(64) 74 let f_add: *u8 = "added" as *u8 75 mv_facet_key(kold, f_add, 1700000000) 76 mv_facet_key(knew, f_add, 1784300000) 77 if mv_bcmp(knew, kold, 14) != 1 { fails = fails + 1 } 78 79 if fails == 0 { 80 sys_write(1, "MVAULT-TAG-GATE GREEN extensible+searchable\n" as *u8, 44) 81 return 0 82 } 83 sys_write(1, "MVAULT-TAG-GATE RED\n" as *u8, 20) 84 return 1 85}