nx_gatherer_test.nx source
↩ module page · 63 lines · 2762 B
1// nx_gatherer_test.nx -- smoke for nx_gatherer.
2
3import "nx_syscalls.nx"
4import "nx_gatherer.nx"
5
6func main() -> i64 {
7 // 1: enums sealed
8 if NX_GFK_N_KINDS != 5 { return 1 }
9 if NX_GYK_N_KINDS != 4 { return 2 }
10 if nx_gfk_is_valid(NX_GFK_PRIMITIVE) != 1 { return 3 }
11 if nx_gfk_is_valid(5) != 0 { return 4 }
12 if nx_gyk_is_valid(NX_GYK_MS_SAVED) != 1 { return 5 }
13 if nx_gyk_is_valid(4) != 0 { return 6 }
14
15 // 2: construction
16 let g: *NxGatherer = nx_gatherer_new(8)
17 if g.capacity != 8 { return 7 }
18 if g.count != 0 { return 8 }
19 if nx_gatherer_session_emitted(g) != 0 { return 9 }
20
21 // 3: sow 3 fields
22 if nx_gatherer_sow(g, 10, NX_GFK_PRIMITIVE, 0xa1, 1000) != 0 { return 10 }
23 if nx_gatherer_sow(g, 20, NX_GFK_SMOKE, 0xb2, 1100) != 1 { return 11 }
24 if nx_gatherer_sow(g, 30, NX_GFK_METRIC, 0xc3, 1200) != 2 { return 12 }
25 if g.count != 3 { return 13 }
26 if nx_gatherer_session_emitted(g) != 1 { return 14 }
27
28 // 4: duplicate / bad-kind refused
29 if nx_gatherer_sow(g, 10, NX_GFK_PRIMITIVE, 0, 1300) != -1 { return 15 }
30 if nx_gatherer_sow(g, 40, 99, 0, 1300) != -1 { return 16 }
31
32 // 5: harvest yields -- 200ms saved on field 10
33 if nx_gatherer_harvest(g, 10, NX_GYK_MS_SAVED, 200, 2000) != NX_GATHERER_OK { return 17 }
34 // additional 100ms saved on same field (compounds)
35 if nx_gatherer_harvest(g, 10, NX_GYK_MS_SAVED, 100, 2100) != NX_GATHERER_OK { return 18 }
36 if nx_gatherer_total_ms_saved(g) != 300 { return 19 }
37
38 // 6: bytes_shaved on field 20
39 if nx_gatherer_harvest(g, 20, NX_GYK_BYTES_SHAVED, 4096, 2200) != NX_GATHERER_OK { return 20 }
40 if nx_gatherer_total_bytes_shaved(g) != 4096 { return 21 }
41
42 // 7: false_positive_eliminated on field 30
43 if nx_gatherer_harvest(g, 30, NX_GYK_FALSE_POSITIVE_ELIMINATED, 5, 2300) != NX_GATHERER_OK { return 22 }
44 if nx_gatherer_total_fp_eliminated(g) != 5 { return 23 }
45
46 // 8: coverage_axis_+1 on field 10
47 if nx_gatherer_harvest(g, 10, NX_GYK_COVERAGE_AXIS_PLUS_ONE, 1, 2400) != NX_GATHERER_OK { return 24 }
48 if nx_gatherer_harvest(g, 20, NX_GYK_COVERAGE_AXIS_PLUS_ONE, 2, 2500) != NX_GATHERER_OK { return 25 }
49 if nx_gatherer_total_coverage_delta(g) != 3 { return 26 }
50
51 // 9: bad yield kind rejected
52 if nx_gatherer_harvest(g, 10, 99, 100, 2600) != NX_GATHERER_ERR_BAD_KIND { return 27 }
53
54 // 10: harvest unknown field rejected
55 if nx_gatherer_harvest(g, 9999, NX_GYK_MS_SAVED, 50, 2700) != NX_GATHERER_ERR_NOT_FOUND { return 28 }
56
57 // 11: count_by_kind
58 if nx_gatherer_count_by_kind(g, NX_GFK_PRIMITIVE) != 1 { return 29 }
59 if nx_gatherer_count_by_kind(g, NX_GFK_SMOKE) != 1 { return 30 }
60 if nx_gatherer_count_by_kind(g, NX_GFK_COMPOST) != 0 { return 31 }
61
62 return 0
63}