code wiki / (root) / nx_succession_test.nx

nx_succession_test.nx source

↩ module page · 124 lines · 6113 B

1// nx_succession_test.nx -- smoke for nx_succession. 2 3import "nx_syscalls.nx" 4import "nx_succession.nx" 5 6func main() -> i64 { 7 let now: nx_size = 1000000 8 9 // 1: enum validity 10 if nx_su_stage_is_valid(NX_SU_STAGE_PIONEER) != 1 { return 1 } 11 if nx_su_stage_is_valid(NX_SU_STAGE_RELICT) != 1 { return 2 } 12 if nx_su_stage_is_valid(-1) != 0 { return 3 } 13 if nx_su_stage_is_valid(6) != 0 { return 4 } 14 if NX_SU_STAGE_N != 6 { return 5 } 15 16 if nx_su_v_is_valid(NX_SU_V_OK) != 1 { return 6 } 17 if nx_su_v_is_valid(NX_SU_V_REGRESSION_BLOCKED) != 1 { return 7 } 18 if nx_su_v_is_valid(NX_SU_V_N) != 0 { return 8 } 19 20 // 2: stage classification predicates 21 if nx_su_stage_is_removable(NX_SU_STAGE_PIONEER) != 1 { return 9 } 22 if nx_su_stage_is_removable(NX_SU_STAGE_EARLY) != 1 { return 10 } 23 if nx_su_stage_is_removable(NX_SU_STAGE_MID) != 0 { return 11 } 24 if nx_su_stage_is_removable(NX_SU_STAGE_CLIMAX) != 0 { return 12 } 25 26 if nx_su_stage_is_load_bearing(NX_SU_STAGE_MID) != 1 { return 13 } 27 if nx_su_stage_is_load_bearing(NX_SU_STAGE_LATE) != 1 { return 14 } 28 if nx_su_stage_is_load_bearing(NX_SU_STAGE_CLIMAX) != 1 { return 15 } 29 if nx_su_stage_is_load_bearing(NX_SU_STAGE_PIONEER) != 0 { return 16 } 30 if nx_su_stage_is_load_bearing(NX_SU_STAGE_RELICT) != 0 { return 17 } 31 32 // 3: construction 33 let reg: *NxSuccessionRegistry = nx_su_new(16, 5, 3) 34 if reg.capacity != 16 { return 18 } 35 if reg.n_records != 0 { return 19 } 36 if reg.promotion_min_pass_count != 5 { return 20 } 37 if reg.climax_min_dependents != 3 { return 21 } 38 39 // 4: invalid construction 40 if nx_su_new(0, 5, 3) != (0 as *NxSuccessionRegistry) { return 22 } 41 if nx_su_new(16, 0, 3) != (0 as *NxSuccessionRegistry) { return 23 } 42 if nx_su_new(16, 5, 0) != (0 as *NxSuccessionRegistry) { return 24 } 43 44 // 5: register valid records 45 if nx_su_register(reg, 101, NX_SU_STAGE_PIONEER, 100, 0, 3, now) != NX_SU_V_OK { return 25 } 46 if nx_su_register(reg, 102, NX_SU_STAGE_EARLY, 5000, 2, 8, now) != NX_SU_V_OK { return 26 } 47 if nx_su_register(reg, 103, NX_SU_STAGE_LATE, 100000, 4, 100, now) != NX_SU_V_OK { return 27 } 48 if nx_su_register(reg, 104, NX_SU_STAGE_CLIMAX, 500000, 10, 1000, now) != NX_SU_V_OK { return 28 } 49 if reg.n_records != 4 { return 29 } 50 51 // 6: register invalid stage 52 if nx_su_register(reg, 999, 99, 100, 0, 0, now) != NX_SU_V_INVALID { return 30 } 53 54 // 7: find 55 let r101: *NxSuccessionRecord = nx_su_find(reg, 101) 56 if r101.primitive_id != 101 { return 31 } 57 if r101.stage != NX_SU_STAGE_PIONEER { return 32 } 58 if r101.smoke_pass_count != 3 { return 33 } 59 60 let r_missing: *NxSuccessionRecord = nx_su_find(reg, 9999) 61 if (r_missing as i64) != 0 { return 34 } 62 63 // 8: promotion check -- pioneer with smoke_pass_count=3 < threshold 5 -> PREMATURE 64 if nx_su_check_promotion(reg, 101) != NX_SU_V_PREMATURE { return 35 } 65 66 // 9: early with smoke_pass_count=8 >= 5 -> PROMOTION_OK 67 if nx_su_check_promotion(reg, 102) != NX_SU_V_PROMOTION_OK { return 36 } 68 69 // 10: late but n_dependents=4 >= climax_min=3 -> PROMOTION_OK (to climax) 70 if nx_su_check_promotion(reg, 103) != NX_SU_V_PROMOTION_OK { return 37 } 71 72 // 11: climax already -> OK no-op 73 if nx_su_check_promotion(reg, 104) != NX_SU_V_OK { return 38 } 74 75 // 12: late but n_dependents below threshold -> PREMATURE 76 nx_su_register(reg, 105, NX_SU_STAGE_LATE, 100000, 1, 100, now) 77 if nx_su_check_promotion(reg, 105) != NX_SU_V_PREMATURE { return 39 } 78 79 // 13: demotion gates 80 if nx_su_check_demotion(NX_SU_STAGE_PIONEER, NX_SU_STAGE_EARLY) != NX_SU_V_OK { return 40 } 81 if nx_su_check_demotion(NX_SU_STAGE_MID, NX_SU_STAGE_EARLY) != NX_SU_V_OK { return 41 } 82 if nx_su_check_demotion(NX_SU_STAGE_LATE, NX_SU_STAGE_MID) != NX_SU_V_OK { return 42 } 83 if nx_su_check_demotion(NX_SU_STAGE_CLIMAX, NX_SU_STAGE_RELICT) != NX_SU_V_OK { return 43 } 84 85 // 14: refused regressions 86 if nx_su_check_demotion(NX_SU_STAGE_CLIMAX, NX_SU_STAGE_PIONEER) != NX_SU_V_REGRESSION_BLOCKED { return 44 } 87 if nx_su_check_demotion(NX_SU_STAGE_CLIMAX, NX_SU_STAGE_MID) != NX_SU_V_REGRESSION_BLOCKED { return 45 } 88 if nx_su_check_demotion(NX_SU_STAGE_LATE, NX_SU_STAGE_EARLY) != NX_SU_V_REGRESSION_BLOCKED { return 46 } 89 if nx_su_check_demotion(NX_SU_STAGE_LATE, NX_SU_STAGE_PIONEER) != NX_SU_V_REGRESSION_BLOCKED { return 47 } 90 91 // 15: invalid stages in demotion 92 if nx_su_check_demotion(-1, NX_SU_STAGE_PIONEER) != NX_SU_V_INVALID { return 48 } 93 if nx_su_check_demotion(NX_SU_STAGE_PIONEER, 99) != NX_SU_V_INVALID { return 49 } 94 95 // 16: count by stage 96 if nx_su_count_by_stage(reg, NX_SU_STAGE_PIONEER) != 1 { return 50 } 97 if nx_su_count_by_stage(reg, NX_SU_STAGE_EARLY) != 1 { return 51 } 98 if nx_su_count_by_stage(reg, NX_SU_STAGE_LATE) != 2 { return 52 } 99 if nx_su_count_by_stage(reg, NX_SU_STAGE_CLIMAX) != 1 { return 53 } 100 if nx_su_count_by_stage(reg, NX_SU_STAGE_MID) != 0 { return 54 } 101 if nx_su_count_by_stage(reg, NX_SU_STAGE_RELICT) != 0 { return 55 } 102 103 // 17: total dependents = 0+2+4+10+1 = 17 104 if nx_su_total_dependents(reg) != 17 { return 56 } 105 106 // 18: capacity exceeded 107 let small_reg: *NxSuccessionRegistry = nx_su_new(2, 5, 3) 108 nx_su_register(small_reg, 1, NX_SU_STAGE_PIONEER, 0, 0, 0, now) 109 nx_su_register(small_reg, 2, NX_SU_STAGE_PIONEER, 0, 0, 0, now) 110 if nx_su_register(small_reg, 3, NX_SU_STAGE_PIONEER, 0, 0, 0, now) != NX_SU_V_INVALID { return 57 } 111 112 // 19: null handling 113 let null_reg: *NxSuccessionRegistry = (0 as i64) as *NxSuccessionRegistry 114 if nx_su_register(null_reg, 1, NX_SU_STAGE_PIONEER, 0, 0, 0, now) != NX_SU_V_NULL { return 58 } 115 if (nx_su_find(null_reg, 1) as i64) != 0 { return 59 } 116 if nx_su_check_promotion(null_reg, 1) != NX_SU_V_NULL { return 60 } 117 if nx_su_count_by_stage(null_reg, NX_SU_STAGE_PIONEER) != 0 { return 61 } 118 if nx_su_total_dependents(null_reg) != 0 { return 62 } 119 120 // 20: unknown primitive in check_promotion 121 if nx_su_check_promotion(reg, 9999) != NX_SU_V_INVALID { return 63 } 122 123 return 0 124}