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}