code wiki / (root) / nx_doc_xref_test.nx

nx_doc_xref_test.nx source

↩ module page · 125 lines · 5706 B

1// nx_doc_xref_test.nx -- KAT for cross-reference verification. 2 3import "nx_syscalls.nx" 4import "nx_string_ops.nx" 5import "nx_doc_xref.nx" 6 7func main() -> i64 { 8 let content: *u8 = sys_mmap(256) 9 let out_name: *u8 = sys_mmap(64) 10 let res_buf: *u8 = sys_mmap(32) 11 let res: *NxLinkScanResult = res_buf as *NxLinkScanResult 12 13 // ----- T1 Extract single link: 'see [[foo]] end' ----- 14 let bs1: *u8 = "see [[foo]] end" 15 nx_str_slice_copy(bs1, 0, 15, content, 256) 16 nx_doc_extract_link_target(content, 15, 0, out_name, 64, res) 17 if res.next_offset != 11 { return 1 } // ']]' at 9-10; past = 11 18 if res.n_target != 3 { return 2 } 19 if out_name[0] != 102 { return 3 } // 'f' 20 if out_name[1] != 111 { return 4 } // 'o' 21 if out_name[2] != 111 { return 5 } // 'o' 22 if out_name[3] != 0 { return 6 } // NUL 23 24 // ----- T2 No link: 'no markers here' ----- 25 let bs2: *u8 = "no markers here" 26 nx_str_slice_copy(bs2, 0, 15, content, 256) 27 nx_doc_extract_link_target(content, 15, 0, out_name, 64, res) 28 if res.next_offset != -1 { return 10 } 29 if res.n_target != 0 { return 11 } 30 31 // ----- T3 Two links in one buffer: iterate ----- 32 let bs3: *u8 = "[[alpha]] mid [[bravo]] end" 33 nx_str_slice_copy(bs3, 0, 27, content, 256) 34 nx_doc_extract_link_target(content, 27, 0, out_name, 64, res) 35 if res.next_offset != 9 { return 20 } // past first ']]' at 7-8 36 if res.n_target != 5 { return 21 } // "alpha" 37 if out_name[0] != 97 { return 22 } // 'a' 38 39 // Second iteration starting at res.next_offset 40 nx_doc_extract_link_target(content, 27, res.next_offset, out_name, 64, res) 41 if res.next_offset != 23 { return 30 } // past second ']]' 42 if res.n_target != 5 { return 31 } // "bravo" 43 if out_name[0] != 98 { return 32 } // 'b' 44 45 // Third iteration (no more) -> -1 46 nx_doc_extract_link_target(content, 27, res.next_offset, out_name, 64, res) 47 if res.next_offset != -1 { return 40 } 48 49 // ----- T4 Empty target '[[]]' rejected ----- 50 let bs4: *u8 = "see [[]] empty" 51 nx_str_slice_copy(bs4, 0, 14, content, 256) 52 nx_doc_extract_link_target(content, 14, 0, out_name, 64, res) 53 if res.next_offset != -1 { return 50 } // empty name_len <= 0 = no link 54 if res.n_target != 0 { return 51 } 55 56 // ----- T5 Cap exhaustion: target too big for out_cap ----- 57 let bs5: *u8 = "see [[verylongname]] end" 58 nx_str_slice_copy(bs5, 0, 24, content, 256) 59 nx_doc_extract_link_target(content, 24, 0, out_name, 8, res) 60 if res.next_offset != 20 { return 60 } // past ']]' regardless 61 if res.n_target != -1 { return 61 } // sentinel for cap-exceeded 62 63 // ----- T6 Open '[[' without close ----- 64 let bs6: *u8 = "see [[unclosed forever" 65 nx_str_slice_copy(bs6, 0, 22, content, 256) 66 nx_doc_extract_link_target(content, 22, 0, out_name, 64, res) 67 if res.next_offset != -1 { return 70 } // no closing ']]' 68 69 // ----- T7 Validator: target in newline-separated namespace ----- 70 let names_buf: *u8 = sys_mmap(64) 71 let names_str: *u8 = "alpha\nbravo\ncharlie\n" 72 nx_str_slice_copy(names_str, 0, 20, names_buf, 64) 73 // 'alpha' exists 74 let alpha: *u8 = "alpha" 75 if nx_doc_link_target_exists(alpha, 5, names_buf, 20) != 1 { return 80 } 76 // 'bravo' exists 77 let bravo: *u8 = "bravo" 78 if nx_doc_link_target_exists(bravo, 5, names_buf, 20) != 1 { return 81 } 79 // 'charlie' exists (last line, with or without trailing newline) 80 let charlie: *u8 = "charlie" 81 if nx_doc_link_target_exists(charlie, 7, names_buf, 20) != 1 { return 82 } 82 // 'delta' missing 83 let delta: *u8 = "delta" 84 if nx_doc_link_target_exists(delta, 5, names_buf, 20) != 0 { return 83 } 85 86 // ----- T8 Validator edge cases ----- 87 // Empty target 88 if nx_doc_link_target_exists(alpha, 0, names_buf, 20) != 0 { return 90 } 89 // Empty blob 90 if nx_doc_link_target_exists(alpha, 5, names_buf, 0) != 0 { return 91 } 91 92 // ----- T9 Validator: prefix-of-name is NOT a match ----- 93 // 'alp' is prefix of 'alpha' but exact match required 94 let alp: *u8 = "alp" 95 if nx_doc_link_target_exists(alp, 3, names_buf, 20) != 0 { return 100 } 96 97 // ----- T10 Validator: case-sensitive (substrate-honest) ----- 98 let ALPHA_UC: *u8 = "ALPHA" 99 if nx_doc_link_target_exists(ALPHA_UC, 5, names_buf, 20) != 0 { return 110 } 100 101 // ----- T11 Backtick-aware: [[X]] inside `code` is skipped ----- 102 let bs_tick: *u8 = "see `[[buffer(N)]]` attr" 103 nx_str_slice_copy(bs_tick, 0, 24, content, 256) 104 nx_doc_extract_link_target(content, 24, 0, out_name, 64, res) 105 if res.next_offset != -1 { return 120 } // skipped; no valid [[X]] found 106 107 // ----- T12 Backtick-aware: [[X]] OUTSIDE backticks still found ----- 108 let bs_mix: *u8 = "see [[real-ref]] vs `[[code]]` here" 109 nx_str_slice_copy(bs_mix, 0, 35, content, 256) 110 nx_doc_extract_link_target(content, 35, 0, out_name, 64, res) 111 if res.next_offset != 16 { return 130 } // past first ']]' 112 if res.n_target != 8 { return 131 } // "real-ref" 113 // Next iteration: 'code' is inside backticks -- skipped 114 nx_doc_extract_link_target(content, 35, res.next_offset, out_name, 64, res) 115 if res.next_offset != -1 { return 132 } // no more outside-backtick links 116 117 // ----- T13 Triple-backtick fence: [[X]] inside code block skipped ----- 118 let bs_fence: *u8 = "```\n[[fenced]]\n``` and [[outside]]" 119 nx_str_slice_copy(bs_fence, 0, 34, content, 256) 120 nx_doc_extract_link_target(content, 34, 0, out_name, 64, res) 121 if res.next_offset != 34 { return 140 } // skips fenced; finds 'outside' 122 if res.n_target != 7 { return 141 } // "outside" 123 124 return 0 125}