code wiki / _hdl_build / nx_manga_shelf_gate.nx

nx_manga_shelf_gate.nx source

↩ module page · 107 lines · 5772 B

1// nx_manga_shelf_gate.nx -- prove the LOCAL shelf catalog lib (nx_manga_shelf_lib) in ISOLATION on synthetic 2// fixtures: admission (cbz always; allowlisted-author epub; PROVEN comic via extracted cbx.json; prose OUT), 3// marker grouping + volume numbers (" vol1", ", Vol. 1_", bare "volume3"), multi-format dedupe (epub beats 4// pdf), first-token one-shot grouping, ci-alpha order + JSON tail sanity. RUN IN A SCRATCH DIR -- it writes 5// fixture files under ./knowledge/staging/media/. expect_exit: 0 license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "nx_manga_shelf_lib.nx" 8 9func gw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 10func gnum(v: i64) -> i64 { let b: *u8 = sys_mmap(32); let o: i64 = msl_catn(b, 0, v); sys_write(1, b, o); return 0 } 11func gput(path: *u8, body: *u8) -> i64 { 12 let fd: i64 = sys_openat_wr(path, 420) 13 if fd < 0 { gw("FIXTURE WRITE FAIL: " as *u8); gw(path); gw("\n" as *u8); return 0 - 1 } 14 var n: i64 = 0 15 while body[n] != (0 as u8) { n = n + 1 } 16 sys_write(fd, body, n) 17 sys_close(fd) 18 return 0 19} 20func ghas(j: *u8, jn: i64, s: *u8) -> i64 { 21 var sl: i64 = 0 22 while s[sl] != (0 as u8) { sl = sl + 1 } 23 if sl == 0 { return 0 - 1 } 24 var i: i64 = 0 25 while i + sl <= jn { 26 var k: i64 = 0 27 var hit: i64 = 1 28 while k < sl { if j[i + k] != s[k] { hit = 0; k = sl } else { k = k + 1 } } 29 if hit == 1 { return i } 30 i = i + 1 31 } 32 return 0 - 1 33} 34func tooth(name: *u8, ok: i64, fails: *i64) -> i64 { 35 if ok == 1 { gw(" GREEN " as *u8) } else { gw(" RED " as *u8); fails[0] = fails[0] + 1 } 36 gw(name) 37 gw("\n" as *u8) 38 return 0 39} 40 41func main() -> i64 { 42 gw("nx_manga_shelf_gate\n" as *u8) 43 sys_mkdir("knowledge" as *u8, 0x1ed) 44 sys_mkdir("knowledge/staging" as *u8, 0x1ed) 45 sys_mkdir("knowledge/staging/media" as *u8, 0x1ed) 46 sys_mkdir("knowledge/staging/media/reader" as *u8, 0x1ed) 47 gput("knowledge/staging/media/idx_book.wsl" as *u8, "/x/books/Unknown/dlance vol1 aa (10)/dlance vol1 aa - Unknown.cbz\n/x/books/Unknown/dlance vol2 bb (11)/dlance vol2 bb - Unknown.cbz\n/x/books/Kubo, Tite/Bleach, Vol. 1_ Straw (7540)/Bleach 1 - Kubo.epub\n/x/books/Kubo, Tite/Bleach, Vol. 2_ Soul (7541)/Bleach 2 - Kubo.pdf\n/x/books/Kubo, Tite/Bleach, Vol. 2_ Soul (7541)/Bleach 2 - Kubo.epub\n/x/books/Prose, Guy/Some Novel (99)/novel.epub\n/x/books/Prose, Guy/Hidden Comic (98)/hidden.epub\n/x/books/Unknown/samuraivolume3 xx (12)/f.cbz\n/x/books/Unknown/swordsx alpha (13)/f.cbz\n/x/books/Unknown/swordsx beta (14)/f.cbz\n" as *u8) 48 gput("knowledge/staging/media/shelf_authors.txt" as *u8, "Kubo, Tite\n" as *u8) 49 gput("knowledge/staging/media/shelf_markers.txt" as *u8, ", vol\n vol\nvolume\n issue\n chapter\n ch.\n #\n" as *u8) 50 // PROVEN-comic fixture: reader/<slug-of-hidden.epub>/cbx.json 51 let hp: *u8 = "/x/books/Prose, Guy/Hidden Comic (98)/hidden.epub" as *u8 52 let hn: i64 = msl_slen(hp) 53 let slug: *u8 = sys_mmap(32) 54 msl_pathslug(hp, 0, hn, slug) 55 let dir: *u8 = sys_mmap(256) 56 var o: i64 = msl_cats(dir, 0, "knowledge/staging/media/reader/" as *u8) 57 var si: i64 = 0 58 while slug[si] != (0 as u8) { dir[o] = slug[si]; o = o + 1; si = si + 1 } 59 dir[o] = 0 as u8 60 sys_mkdir(dir, 0x1ed) 61 let o2: i64 = msl_cats(dir, o, "/cbx.json" as *u8) 62 dir[o2] = 0 as u8 63 gput(dir, "{\"kind\":\"cbx\",\"cfix\":2,\"pages\":[{\"file\":\"page000.jpg\"}]}" as *u8) 64 // run the lib exactly as /api/shelf will 65 let out: *u8 = sys_mmap(262144) 66 let n: i64 = msl_shelf_json(out, 262144) 67 gw("json bytes=" as *u8) 68 gnum(n) 69 gw("\n" as *u8) 70 let fails: *i64 = sys_mmap(8) as *i64 71 fails[0] = 0 72 var t1: i64 = 0 73 if ghas(out, n, "{\"t\":\"dlance\",\"a\":\"Unknown\",\"n\":2" as *u8) >= 0 { t1 = 1 } 74 tooth("T1 cbz admission + marker series (dlance n=2)" as *u8, t1, fails) 75 var t2: i64 = 0 76 let p1: i64 = ghas(out, n, "dlance vol1 aa\"" as *u8) 77 let p2: i64 = ghas(out, n, "dlance vol2 bb\"" as *u8) 78 if p1 >= 0 { if p2 > p1 { t2 = 1 } } 79 tooth("T2 volumes ordered v1 before v2" as *u8, t2, fails) 80 var t3: i64 = 0 81 if ghas(out, n, "Some Novel" as *u8) < 0 { t3 = 1 } 82 tooth("T3 prose novel excluded" as *u8, t3, fails) 83 var t4: i64 = 0 84 if ghas(out, n, "{\"t\":\"Bleach\",\"a\":\"Kubo, Tite\",\"n\":2" as *u8) >= 0 { t4 = 1 } 85 tooth("T4 allowlisted author admitted + , Vol. cut (Bleach n=2)" as *u8, t4, fails) 86 var t5: i64 = 0 87 if ghas(out, n, "Bleach 2 - Kubo.epub" as *u8) >= 0 { if ghas(out, n, "Bleach 2 - Kubo.pdf" as *u8) < 0 { t5 = 1 } } 88 tooth("T5 multi-format dedupe keeps epub over pdf" as *u8, t5, fails) 89 var t6: i64 = 0 90 if ghas(out, n, "{\"t\":\"Hidden Comic\",\"p\":\"/x/books/Prose, Guy/Hidden Comic (98)/hidden.epub\",\"v\":0,\"x\":1}" as *u8) >= 0 { t6 = 1 } 91 tooth("T6 PROVEN comic admitted via extracted cbx.json (x=1)" as *u8, t6, fails) 92 var t7: i64 = 0 93 if ghas(out, n, "{\"t\":\"samurai\",\"a\":\"Unknown\",\"n\":1" as *u8) >= 0 { if ghas(out, n, "\"v\":3" as *u8) >= 0 { t7 = 1 } } 94 tooth("T7 bare volume marker inside mashed token (samurai v3)" as *u8, t7, fails) 95 var t8: i64 = 0 96 if ghas(out, n, "{\"t\":\"swordsx\",\"a\":\"Unknown\",\"n\":2" as *u8) >= 0 { t8 = 1 } 97 tooth("T8 first-token one-shot grouping (swordsx n=2)" as *u8, t8, fails) 98 var t9: i64 = 0 99 if ghas(out, n, "\"total\":5}" as *u8) >= 0 { if out[n - 1] == (125 as u8) { t9 = 1 } } 100 tooth("T9 five series total + JSON tail" as *u8, t9, fails) 101 if fails[0] == 0 { gw("GATE nx_manga_shelf 9/9 GREEN\n" as *u8); sys_exit(0); return 0 } 102 gw("GATE nx_manga_shelf RED fails=" as *u8) 103 gnum(fails[0]) 104 gw("\n" as *u8) 105 sys_exit(1) 106 return 1 107}