code wiki / (root) / nx_rrf_test.nx

nx_rrf_test.nx source

↩ module page · 37 lines · 1304 B

1// nx_rrf_test.nx -- KAT for Reciprocal Rank Fusion. 2// Native sovereign lane; exit 0 = pass, N = assertion N failed. 3// 4// 3 items, 2 rankers: A=[0,1], B=[1,2]. item1 ranks in BOTH (rank2 in A + 5// rank1 in B) -> highest fused; item0 only in A (rank1); item2 only in B 6// (rank2). So fused: item1 > item0 > item2, and argmax == item1. 7 8import "fx.nx" 9import "nx_rrf.nx" 10 11func main() -> i64 { 12 let scores: *i64 = sys_mmap(3 * 8) as *i64 13 var i: i64 = 0 14 while i < 3 { scores[i] = 0; i = i + 1 } 15 16 let oA: *i64 = sys_mmap(2 * 8) as *i64 17 oA[0] = 0; oA[1] = 1 18 let oB: *i64 = sys_mmap(2 * 8) as *i64 19 oB[0] = 1; oB[1] = 2 20 21 nx_rrf_add(oA, 2, scores) 22 nx_rrf_add(oB, 2, scores) 23 24 // item1 appears in both rankers -> strictly highest 25 if scores[1] <= scores[0] { return 1 } 26 if scores[1] <= scores[2] { return 2 } 27 // item0 (rank1 in A: 1/61) beats item2 (rank2 in B: 1/62) 28 if scores[0] <= scores[2] { return 3 } 29 // exact integer values: 1/(60+1) and 1/(60+2) in Q16.16 30 if scores[0] != fx_from_frac(1, 61) { return 4 } 31 if scores[2] != fx_from_frac(1, 62) { return 5 } 32 if scores[1] != fx_from_frac(1, 62) + fx_from_frac(1, 61) { return 6 } 33 // argmax picks the both-rankers winner 34 if nx_rrf_argmax(scores, 3) != 1 { return 7 } 35 36 return 0 37}