nx_recovery_test.nx source
↩ module page · 60 lines · 1984 B
1// nx_recovery_test.nx -- smoke for nx_recovery.
2
3import "nx_syscalls.nx"
4import "nx_recovery.nx"
5
6func main() -> i64 {
7 if NX_RP_N_PHASES != 7 { return 1 }
8 if nx_rp_is_valid(NX_RP_NOT_STARTED) != 1 { return 2 }
9 if nx_rp_is_valid(NX_RP_COMPLETE) != 1 { return 3 }
10 if nx_rp_is_valid(7) != 0 { return 4 }
11
12 // Fresh session
13 let r: *NxRecoverySession = nx_recovery_new(42, 1000)
14 if r.session_id != 42 { return 5 }
15 if r.current_phase != NX_RP_NOT_STARTED { return 6 }
16 if nx_recovery_is_complete(r) != 0 { return 7 }
17
18 // Advance through phases step by step
19 nx_recovery_advance(r, 1100)
20 if nx_recovery_phase(r) != NX_RP_PAUSE_ADMISSION { return 8 }
21
22 nx_recovery_advance(r, 1200)
23 if nx_recovery_phase(r) != NX_RP_LYSE_HOSTILE { return 9 }
24
25 // Record lyses
26 nx_recovery_record_lysed(r, 3)
27 if r.cells_lysed != 3 { return 10 }
28
29 // Recording wrong phase rejected
30 if nx_recovery_record_promoted(r, 2) != NX_RC_ERR_BAD_PHASE { return 11 }
31
32 nx_recovery_advance(r, 1300)
33 nx_recovery_record_promoted(r, 2)
34 if r.cells_promoted != 2 { return 12 }
35
36 nx_recovery_advance(r, 1400)
37 nx_recovery_record_composted(r, 5)
38 if r.resources_composted != 5 { return 13 }
39
40 nx_recovery_advance(r, 1500)
41 if nx_recovery_phase(r) != NX_RP_NOTIFY_OPERATOR { return 14 }
42
43 nx_recovery_advance(r, 1600)
44 if nx_recovery_phase(r) != NX_RP_COMPLETE { return 15 }
45 if nx_recovery_is_complete(r) != 1 { return 16 }
46 if nx_recovery_duration_us(r) != 600 { return 17 }
47
48 // Cannot advance past COMPLETE
49 if nx_recovery_advance(r, 2000) != NX_RC_ERR_BAD_PHASE { return 18 }
50
51 // run_full convenience
52 let r2: *NxRecoverySession = nx_recovery_new(43, 2000)
53 nx_recovery_run_full(r2, 4, 3, 7, 2500)
54 if nx_recovery_is_complete(r2) != 1 { return 19 }
55 if r2.cells_lysed != 4 { return 20 }
56 if r2.cells_promoted != 3 { return 21 }
57 if r2.resources_composted != 7 { return 22 }
58
59 return 0
60}