code wiki / (root) / nx_recovery_test.nx

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}