nx_mvault_ingest_gate.nx source
↩ module page · 124 lines · 4911 B
1// nx_mvault_ingest_gate.nx -- proves orthogonal class x type + all types.
2//
3// Load-bearing: a MIXED source (tumblr, one provenance=real) splits per-item
4// by CONTENT TYPE; and gen-vs-real is independent of type (a gen 3D model, a
5// real audiobook). run-exit == 0 means GREEN.
6
7import "nx_syscalls.nx"
8import "nx_mvault_ingest.nx"
9
10func fill_jpeg(b: *u8) -> i64 {
11 b[0] = 0xFF as u8; b[1] = 0xD8 as u8; b[2] = 0xFF as u8; b[3] = 0xE0 as u8
12 return 4
13}
14func fill_mp4(b: *u8) -> i64 {
15 b[0] = 0 as u8; b[1] = 0 as u8; b[2] = 0 as u8; b[3] = 0x18 as u8
16 b[4] = 0x66 as u8; b[5] = 0x74 as u8; b[6] = 0x79 as u8; b[7] = 0x70 as u8
17 b[8] = 0x69 as u8; b[9] = 0x73 as u8; b[10] = 0x6F as u8; b[11] = 0x6D as u8
18 return 12
19}
20func fill_gif(b: *u8) -> i64 {
21 b[0] = 0x47 as u8; b[1] = 0x49 as u8; b[2] = 0x46 as u8
22 b[3] = 0x38 as u8; b[4] = 0x39 as u8; b[5] = 0x61 as u8
23 return 6
24}
25func fill_png(b: *u8) -> i64 {
26 b[0] = 0x89 as u8; b[1] = 0x50 as u8; b[2] = 0x4E as u8; b[3] = 0x47 as u8
27 b[4] = 0x0D as u8; b[5] = 0x0A as u8; b[6] = 0x1A as u8; b[7] = 0x0A as u8
28 return 8
29}
30func fill_html(b: *u8) -> i64 {
31 b[0] = 0x3C as u8; b[1] = 0x68 as u8; b[2] = 0x74 as u8
32 b[3] = 0x6D as u8; b[4] = 0x6C as u8; b[5] = 0x3E as u8
33 return 6
34}
35func fill_story(b: *u8) -> i64 {
36 var i: i64 = 0
37 while i < 16 { b[i] = 0x61 as u8; i = i + 1 }
38 return 16
39}
40func fill_glb(b: *u8) -> i64 {
41 b[0] = 0x67 as u8; b[1] = 0x6C as u8; b[2] = 0x54 as u8; b[3] = 0x46 as u8 // glTF
42 return 4
43}
44
45func streq(a: *u8, b: *u8) -> i64 {
46 var i: i64 = 0
47 while 1 == 1 {
48 if a[i] != b[i] { return 0 }
49 if a[i] == (0 as u8) { return 1 }
50 i = i + 1
51 }
52 return 0
53}
54
55func main(argc: i64, argv: *i64) -> i64 {
56 var fails: i64 = 0
57 let empty: *u8 = sys_mmap(1)
58 let jb: *u8 = sys_mmap(16)
59 let vb: *u8 = sys_mmap(16)
60 let gb: *u8 = sys_mmap(16)
61 let pb: *u8 = sys_mmap(16)
62 let hb: *u8 = sys_mmap(16)
63 let sb: *u8 = sys_mmap(16)
64 let mb: *u8 = sys_mmap(16)
65 let jn: i64 = fill_jpeg(jb)
66 let vn: i64 = fill_mp4(vb)
67 let gn: i64 = fill_gif(gb)
68 let pn: i64 = fill_png(pb)
69 let hn: i64 = fill_html(hb)
70 let sn: i64 = fill_story(sb)
71 let mn: i64 = fill_glb(mb)
72
73 // T1: tumblr JPEG (real, mixed) -> REAL / IMAGE, and NOT VIDEO
74 if mv_class(MV_PROV_REAL) != MV_CLASS_REAL { fails = fails + 1 }
75 let t1: i64 = mv_type_bytes(MV_HINT_NONE, jb, jn, empty, 0, empty, 0)
76 if t1 != MV_TYPE_IMAGE { fails = fails + 1 }
77 if t1 == MV_TYPE_VIDEO { fails = fails + 1 }
78
79 // T2: tumblr MP4 (same source) -> VIDEO
80 if mv_type_bytes(MV_HINT_NONE, vb, vn, empty, 0, empty, 0) != MV_TYPE_VIDEO { fails = fails + 1 }
81 // T3: tumblr GIF -> GIF
82 if mv_type_bytes(MV_HINT_NONE, gb, gn, empty, 0, empty, 0) != MV_TYPE_GIF { fails = fails + 1 }
83
84 // T4: generated PNG -> GEN / IMAGE
85 if mv_class(MV_PROV_GEN) != MV_CLASS_GEN { fails = fails + 1 }
86 if mv_type_bytes(MV_HINT_NONE, pb, pn, empty, 0, empty, 0) != MV_TYPE_IMAGE { fails = fails + 1 }
87
88 // T5: real (cam) MP4 -> REAL / VIDEO
89 if mv_class(MV_PROV_REAL) != MV_CLASS_REAL { fails = fails + 1 }
90 if mv_type_bytes(MV_HINT_NONE, vb, vn, empty, 0, empty, 0) != MV_TYPE_VIDEO { fails = fails + 1 }
91
92 // T6: text story -> STORY ; T7: html page -> PAGE
93 if mv_type_bytes(MV_HINT_NONE, sb, sn, empty, 0, empty, 0) != MV_TYPE_STORY { fails = fails + 1 }
94 if mv_type_bytes(MV_HINT_NONE, hb, hn, empty, 0, empty, 0) != MV_TYPE_PAGE { fails = fails + 1 }
95
96 // T8: manga hint ; T9: audiobook hint
97 if mv_type_bytes(MV_HINT_MANGA, empty, 0, empty, 0, empty, 0) != MV_TYPE_MANGA { fails = fails + 1 }
98 if mv_type_bytes(MV_HINT_AUDIOBOOK, empty, 0, empty, 0, empty, 0) != MV_TYPE_AUDIOBOOK { fails = fails + 1 }
99
100 // T10: GEN 3D via glTF magic -> GEN / MODEL3D
101 if mv_class(MV_PROV_GEN) != MV_CLASS_GEN { fails = fails + 1 }
102 if mv_type_bytes(MV_HINT_NONE, mb, mn, empty, 0, empty, 0) != MV_TYPE_MODEL3D { fails = fails + 1 }
103 // T11: REAL 3D via hint -> MODEL3D
104 if mv_type_bytes(MV_HINT_MODEL3D, empty, 0, empty, 0, empty, 0) != MV_TYPE_MODEL3D { fails = fails + 1 }
105
106 // T12: MLS classify-at-the-door
107 if mv_level(0) != MV_LVL_TS { fails = fails + 1 }
108 if mv_level(1) != MV_LVL_U { fails = fails + 1 }
109
110 // T13: canonical string mappers (the record field values)
111 let want_mod: *u8 = "model3d" as *u8
112 let want_gen: *u8 = "gen" as *u8
113 let want_ts: *u8 = "TS" as *u8
114 if streq(mv_type_str(MV_TYPE_MODEL3D), want_mod) != 1 { fails = fails + 1 }
115 if streq(mv_class_str(MV_CLASS_GEN), want_gen) != 1 { fails = fails + 1 }
116 if streq(mv_level_str(MV_LVL_TS), want_ts) != 1 { fails = fails + 1 }
117
118 if fails == 0 {
119 sys_write(1, "MVAULT-INGEST-GATE GREEN 21/21\n" as *u8, 31)
120 return 0
121 }
122 sys_write(1, "MVAULT-INGEST-GATE RED\n" as *u8, 23)
123 return 1
124}