nx_contentdiff_typed_gate_t309.nx source
↩ module page · 82 lines · 6711 B
1// nx_contentdiff_typed_gate_t309.nx -- Compares and diffs structured content between two binary files to detect changes and classify differences.
2
3import "nx_contentdiff_typed_candidate_t309.nx"
4import "nx_fs_create_lib.nx"
5func ccg_copy(b:*u8,n:i64)->*u8{let p:*u8=sys_mmap_try(n);if (p as i64)<=0{return 0 as *u8};var i:i64=0;while i<n{p[i]=b[i];i=i+1};return p}
6func ccg_mutate(b:*u8,n:i64,s:*u8)->i64{
7 let z:i64=vw_slen(s);var hits:i64=0;var i:i64=0
8 while i<=n-z{if cdl_bytes_eq(b+i,z,s,z)==1{b[i]=63 as u8;hits=hits+1};i=i+1};return hits
9}
10func ccg_measure(a:*u8,an:i64,b:*u8,bn:i64,r:*NxCdResult,limit:i64,display:*NxCdDisplay)->i64{
11 var x:NxCdStructured;var y:NxCdStructured
12 let xi:i64=cds_init(&x,a,an);let yi:i64=cds_init(&y,b,bn)
13 let p:*i64=sys_mmap_try(CDL_P_SLOTS*__size_of(i64)) as *i64
14 var rc:i64=xi;if rc==0{rc=yi};if (p as i64)<=0{rc=CDS_RESOURCE}
15 if rc==0{p[CDL_P_MINLEN]=CD_MINLEN;p[CDL_P_MAXSAMPLES]=0;p[CDL_P_MAXTOKLEN]=0;rc=cds_measure(&x,&y,p,r)}
16 if rc==0{cd_structured_names(&x,&y,"FIXTURE-LOST",CD_STRUCT_ALL,limit,display);if display.total!=r.lost{rc=CDS_INVALID}}
17 cds_close(&x);cds_close(&y);if (p as i64)>0{sys_munmap_direct(p as *u8,CDL_P_SLOTS*__size_of(i64))};return rc
18}
19func ccg_fixture(path:*u8,b:*u8,n:i64)->i64{
20 let rc:i64=fxc_create(path,b,n);if rc==n{return 1};if rc!=FXC_EXISTS{return 0}
21 var size:i64=0;let old:*u8=sys_map_file(path,&size);if (old as i64)<=0{return 0}
22 let same:i64=cdl_bytes_eq(old,size,b,n);sys_munmap_direct(old,size);return same
23}
24func main()->i64{
25 let ctr:*i64=gv_ctr();var an:i64=0;var bn:i64=0
26 let a:*u8=sys_map_file("../nx_gltf_render_prepare_candidate_t230.elf",&an)
27 let b:*u8=sys_map_file("../nx_gltf_render_prepare_candidate_t230.sov.elf.new",&bn)
28 if (a as i64)<=0||(b as i64)<=0{return 2}
29 var r:NxCdResult;var display:NxCdDisplay
30 let actual:i64=ccg_measure(a,an,b,bn,&r,0,&display)
31 gv_check("actual pair structured zero lost one source added",actual==0&&r.state==0&&r.lost==0&&r.source_removed==0&&r.source_added==1&&display.total==0,ctr)
32 let same:i64=ccg_measure(a,an,a,an,&r,0,&display)
33 gv_check("same actual artifact no loss",same==0&&r.lost==0&&r.source_removed==0&&r.source_added==0,ctr)
34 let removed:*u8=ccg_copy(b,bn);if (removed as i64)<=0{return 2}
35 let oh:i64=ccg_mutate(removed,bn,"DESCRIPTOR_WITH_RIG_VERIFIED")
36 let oph:i64=ccg_measure(a,an,removed,bn,&r,CD_I64_MAX,&display)
37 gv_check("operational removal remains lost and fully named",oh>0&&oph==0&&r.lost>0&&display.total==r.lost&&display.shown==r.lost,ctr)
38 let ph:i64=ccg_mutate(removed,bn,"runtime/nx_gltf_render_prepare_candidate_t230.nx")
39 let path:i64=ccg_measure(a,an,removed,bn,&r,1,&display)
40 gv_check("source removal remains separate provenance loss",ph==3&&path==0&&r.source_removed==2&&r.lost>1,ctr)
41 gv_check("display one is declared prefix of total",display.shown==1&&display.total==r.lost,ctr)
42 gv_check("classification is complete partition",display.source+display.ident+display.section+display.other==r.lost,ctr)
43 let truncated:i64=ccg_measure(a,an,b,bn-1,&r,0,&display)
44 gv_check("truncated section table refuses before counts",truncated==CDS_INVALID&&r.state==CDS_INVALID,ctr)
45 removed[4]=1 as u8
46 let unknown:i64=ccg_measure(a,an,removed,bn,&r,0,&display)
47 gv_check("unsupported ELF class refuses",unknown==CDS_UNKNOWN&&r.state==CDS_UNKNOWN,ctr)
48 gv_check("CLI unreadable path refuses",cd_structured_paths("../knowledge/gates/no-such-contentdiff-input-t295", "../nx_gltf_render_prepare_candidate_t230.elf",1)==1,ctr)
49 let invalidPath:*u8="knowledge/gates/contentdiff-invalid-t295.elf"
50 if ccg_fixture(invalidPath,"ELF",3)!=1{return 3}
51 gv_check("actual CLI incomplete file refuses",cd_structured_paths(invalidPath,"../nx_gltf_render_prepare_candidate_t230.elf",1)==1,ctr)
52 let unknownPath:*u8="knowledge/gates/contentdiff-unknown-t295.elf"
53 if ccg_fixture(unknownPath,removed,bn)!=1{return 3}
54 gv_check("actual CLI unknown class refuses",cd_structured_paths("../nx_gltf_render_prepare_candidate_t230.elf",unknownPath,1)==1,ctr)
55 // Derive a boundary fixture from the old CLI cap; it is not a new production limit.
56 let tail:*u8="TAIL_ONLY_CAPABILITY_REMOVED_T295";let tailn:i64=vw_slen(tail)
57 let large:i64=CD_CAP+tailn+1
58 let la:*u8=sys_mmap_try(large);let lb:*u8=sys_mmap_try(large)
59 if (la as i64)<=0||(lb as i64)<=0{return 4}
60 var i:i64=0;while i<an{la[i]=a[i];lb[i]=a[i];i=i+1}
61 i=0;while i<tailn{la[CD_CAP+i]=tail[i];lb[CD_CAP+i]=tail[i];i=i+1};lb[CD_CAP]=63 as u8
62 let lp:*u8="knowledge/gates/contentdiff-tail-live-t295.elf";let np:*u8="knowledge/gates/contentdiff-tail-new-t295.elf"
63 if ccg_fixture(lp,la,large)!=1||ccg_fixture(np,lb,large)!=1{return 4}
64 gv_check("CLI reads beyond prior4MiB and finds tail loss",cd_structured_paths(lp,np,CD_SHOW_ALL)==1,ctr)
65 let lr:i64=ccg_measure(la,large,lb,large,&r,CD_I64_MAX,&display)
66 gv_check("tail loss exact count and enumeration",lr==0&&r.lost==1&&display.total==1&&display.shown==1,ctr)
67 gv_check("permil avoids signed product overflow",cds_permil(9223372036854775806,9223372036854775807)==999,ctr)
68 gv_check("permil equal maximal counters",cds_permil(9223372036854775807,9223372036854775807)==1000,ctr)
69 gv_check("invalid ratio refused",cds_permil(2,1)==CDS_INVALID,ctr)
70 gv_check("existing display argument semantics unchanged",cd_display_arg("all")==CD_SHOW_ALL&&cd_display_arg("0")==CD_SHOW_BAD&&cd_display_arg("18")==18,ctr)
71 var typed:NxCdResult
72 let tc:i64=cd_structured_paths_result("../nx_gltf_render_prepare_candidate_t230.elf","../nx_gltf_render_prepare_candidate_t230.sov.elf.new",0,&typed)
73 gv_check("typed actual result qualified with exact provenance",tc==0&&typed.state==0&&typed.lost==0&&typed.source_removed==0&&typed.source_added==1&&typed.checked==typed.runs,ctr)
74 let tl:i64=cd_structured_paths_result(lp,np,0,&typed)
75 gv_check("typed real tail loss remains measured refusal",tl==1&&typed.state==0&&typed.lost==1,ctr)
76 let tu:i64=cd_structured_paths_result("../nx_gltf_render_prepare_candidate_t230.elf",unknownPath,0,&typed)
77 gv_check("typed unknown preserves reason and invalidates prior counts",tu==1&&typed.state==CDS_UNKNOWN&&typed.lost==-1&&typed.runs==-1,ctr)
78 let tm:i64=cd_structured_paths_result("../knowledge/gates/no-such-contentdiff-input-t295","../nx_gltf_render_prepare_candidate_t230.elf",0,&typed)
79 gv_check("typed unreadable never inherits previous success",tm==1&&typed.state==CDS_INVALID&&typed.checked==-1&&typed.source_removed==-1,ctr)
80 sys_munmap_direct(a,an);sys_munmap_direct(b,bn);sys_munmap_direct(removed,bn);sys_munmap_direct(la,large);sys_munmap_direct(lb,large)
81 return gv_verdict("CONTENTDIFF-CLI-STRUCTURED",ctr,"Candidate only; complete-file CLI, shared iterator counts/names, unknown refuses; no behavior or serving claim")
82}