nx_microbiome_test.nx source
↩ module page · 78 lines · 2874 B
1// nx_microbiome_test.nx -- smoke for nx_microbiome.
2
3import "nx_syscalls.nx"
4import "nx_budget.nx"
5import "nx_attention_class.nx"
6import "nx_methyl.nx"
7import "nx_cell.nx"
8import "nx_microbiome.nx"
9
10func main() -> i64 {
11 let sig: *u8 = (sys_mmap(96)) as *u8
12 sig[0] = 1 as u8
13 let mark: *NxMethylMark = nx_methyl_new(7, 0xcafe, 1000, sig, 96)
14 let b: *NxBudget = nx_budget_new(7, 1000, 0, 0, 0, 0)
15
16 if NX_MB_N_HEALTHS != 3 { return 1 }
17 if nx_mb_health_is_valid(NX_MB_HEALTHY) != 1 { return 2 }
18 if nx_mb_health_is_valid(3) != 0 { return 3 }
19
20 let mb: *NxMicrobiome = nx_microbiome_new(16)
21 if mb.count != 0 { return 4 }
22 if nx_microbiome_health(mb) != NX_MB_COLLAPSED { return 5 }
23
24 // Sterile colony stays COLLAPSED
25 let c1: *NxCell = nx_cell_new(100, NX_AC_INTERACTIVE_FOREGROUND_GAME,
26 500, mark, b, 1000)
27 nx_microbiome_add(mb, c1, 1000)
28 if mb.count != 1 { return 6 }
29 if nx_microbiome_kind_diversity(mb) != 1 { return 7 }
30 if nx_microbiome_health(mb) != NX_MB_STRESSED { return 8 }
31
32 // Duplicate cell rejected
33 if nx_microbiome_add(mb, c1, 1100) != NX_MB_ERR_DUPLICATE { return 9 }
34
35 // Add 3 more cells of DIFFERENT attention classes
36 let c2: *NxCell = nx_cell_new(101, NX_AC_BACKGROUND_INFERENCE,
37 500, mark, b, 1100)
38 let c3: *NxCell = nx_cell_new(102, NX_AC_BACKGROUND_BUILD,
39 500, mark, b, 1200)
40 let c4: *NxCell = nx_cell_new(103, NX_AC_IDLE_OPPORTUNISTIC,
41 500, mark, b, 1300)
42 nx_microbiome_add(mb, c2, 1100)
43 nx_microbiome_add(mb, c3, 1200)
44 nx_microbiome_add(mb, c4, 1300)
45 if mb.count != 4 { return 10 }
46 if nx_microbiome_kind_diversity(mb) != 4 { return 11 }
47 if nx_microbiome_health(mb) != NX_MB_HEALTHY { return 12 }
48
49 // Same kind doesn't add diversity
50 let c5: *NxCell = nx_cell_new(104, NX_AC_INTERACTIVE_FOREGROUND_GAME,
51 500, mark, b, 1400)
52 nx_microbiome_add(mb, c5, 1400)
53 if nx_microbiome_kind_diversity(mb) != 4 { return 13 }
54 if nx_microbiome_count_by_kind(mb, NX_AC_INTERACTIVE_FOREGROUND_GAME) != 2 { return 14 }
55
56 // Contains check
57 if nx_microbiome_contains(mb, 100) != 1 { return 15 }
58 if nx_microbiome_contains(mb, 9999) != 0 { return 16 }
59
60 // Remove cell -> diversity may drop
61 nx_microbiome_remove(mb, 104)
62 nx_microbiome_remove(mb, 100)
63 // After both removals: c2/c3/c4 remain = 3 distinct kinds
64 if nx_microbiome_kind_diversity(mb) != 3 { return 17 }
65 if nx_microbiome_health(mb) != NX_MB_STRESSED { return 18 }
66
67 // Drain to sterile
68 nx_microbiome_remove(mb, 101)
69 nx_microbiome_remove(mb, 102)
70 nx_microbiome_remove(mb, 103)
71 if mb.count != 0 { return 19 }
72 if nx_microbiome_health(mb) != NX_MB_COLLAPSED { return 20 }
73
74 // Remove non-existent rejected
75 if nx_microbiome_remove(mb, 9999) != NX_MB_ERR_NOT_FOUND { return 21 }
76
77 return 0
78}