code wiki / (root) / nx_grove_test.nx

nx_grove_test.nx source

↩ module page · 102 lines · 4873 B

1// nx_grove_test.nx -- smoke for nx_grove. 2 3import "nx_syscalls.nx" 4import "nx_grove.nx" 5 6func main() -> i64 { 7 let now: nx_size = 1000000 8 9 // 1: enum validity 10 if nx_gr_kind_is_valid(NX_GR_KIND_ENDOWMENT_PRINCIPAL) != 1 { return 1 } 11 if nx_gr_kind_is_valid(NX_GR_KIND_TEK_CONTRIBUTION) != 1 { return 2 } 12 if nx_gr_kind_is_valid(-1) != 0 { return 3 } 13 if nx_gr_kind_is_valid(8) != 0 { return 4 } 14 if NX_GR_KIND_N != 8 { return 5 } 15 16 if nx_gr_v_is_valid(NX_GR_V_OK) != 1 { return 6 } 17 if nx_gr_v_is_valid(NX_GR_V_INVALID) != 1 { return 7 } 18 if nx_gr_v_is_valid(-1) != 0 { return 8 } 19 if nx_gr_v_is_valid(NX_GR_V_N) != 0 { return 9 } 20 21 // 2: classification predicates 22 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_ENDOWMENT_PRINCIPAL) != 1 { return 10 } 23 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_LAND_TRUST) != 1 { return 11 } 24 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_CONSERVATION_EASEMENT) != 1 { return 12 } 25 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_INDIGENOUS_STEWARDSHIP) != 1 { return 13 } 26 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_LABOR_INKIND) != 0 { return 14 } 27 if nx_gr_kind_is_in_perpetuity(NX_GR_KIND_GENERATION_SKIPPING) != 0 { return 15 } 28 29 if nx_gr_kind_is_in_kind(NX_GR_KIND_LABOR_INKIND) != 1 { return 16 } 30 if nx_gr_kind_is_in_kind(NX_GR_KIND_TEK_CONTRIBUTION) != 1 { return 17 } 31 if nx_gr_kind_is_in_kind(NX_GR_KIND_ENDOWMENT_PRINCIPAL) != 0 { return 18 } 32 33 // 3: refuse extractive discount rate at construction 34 // Q10 51 = ~5%; rates >=51 must refuse 35 if nx_gr_new(1, 4, 51, 5, now) != (0 as *NxGrove) { return 19 } 36 if nx_gr_new(1, 4, 100, 5, now) != (0 as *NxGrove) { return 20 } // ~10% 37 if nx_gr_new(1, 4, 200, 5, now) != (0 as *NxGrove) { return 21 } // ~20% 38 39 // 4: valid construction with patient discount (Q10 10 = ~1%) ok 40 let g: *NxGrove = nx_gr_new(1, 8, 10, 50, now) 41 if g.grove_id != 1 { return 22 } 42 if g.capacity != 8 { return 23 } 43 if g.minimum_horizon_years != 50 { return 24 } 44 if g.discount_rate_q10 != 10 { return 25 } 45 if g.n_contributions != 0 { return 26 } 46 47 // 5: zero discount (rate=0) also ok -- pure perpetuity capital 48 let g0: *NxGrove = nx_gr_new(2, 4, 0, 100, now) 49 if g0.discount_rate_q10 != 0 { return 27 } 50 51 // 6: refuse short horizon 52 let short_result: nx_int = nx_gr_add_contribution(g, 100, NX_GR_KIND_LAND_TRUST, 1000, 4, 0xCAFE, now) 53 if short_result != NX_GR_V_REFUSED_SHORT_HORIZON { return 28 } 54 55 // 7: refuse below minimum_horizon_years 56 let below_min: nx_int = nx_gr_add_contribution(g, 100, NX_GR_KIND_LAND_TRUST, 1000, 30, 0xCAFE, now) 57 if below_min != NX_GR_V_REFUSED_SHORT_HORIZON { return 29 } 58 59 // 8: add valid contributions 60 let r1: nx_int = nx_gr_add_contribution(g, 100, NX_GR_KIND_LAND_TRUST, 1000, 100, 0xCAFE, now) 61 if r1 != NX_GR_V_OK { return 30 } 62 let r2: nx_int = nx_gr_add_contribution(g, 200, NX_GR_KIND_LABOR_INKIND, 250, 50, 0xBEEF, now) 63 if r2 != NX_GR_V_OK { return 31 } 64 let r3: nx_int = nx_gr_add_contribution(g, 300, NX_GR_KIND_LAND_TRUST, 500, 75, 0xFADE, now) 65 if r3 != NX_GR_V_OK { return 32 } 66 let r4: nx_int = nx_gr_add_contribution(g, 400, NX_GR_KIND_TEK_CONTRIBUTION, 100, 200, 0xDEAD, now) 67 if r4 != NX_GR_V_OK { return 33 } 68 69 if g.n_contributions != 4 { return 34 } 70 71 // 9: total by kind 72 if nx_gr_total_units_by_kind(g, NX_GR_KIND_LAND_TRUST) != 1500 { return 35 } 73 if nx_gr_total_units_by_kind(g, NX_GR_KIND_LABOR_INKIND) != 250 { return 36 } 74 if nx_gr_total_units_by_kind(g, NX_GR_KIND_TEK_CONTRIBUTION) != 100 { return 37 } 75 if nx_gr_total_units_by_kind(g, NX_GR_KIND_ENDOWMENT_PRINCIPAL) != 0 { return 38 } 76 77 // 10: count by kind 78 if nx_gr_count_by_kind(g, NX_GR_KIND_LAND_TRUST) != 2 { return 39 } 79 if nx_gr_count_by_kind(g, NX_GR_KIND_LABOR_INKIND) != 1 { return 40 } 80 if nx_gr_count_by_kind(g, NX_GR_KIND_TEK_CONTRIBUTION) != 1 { return 41 } 81 if nx_gr_count_by_kind(g, NX_GR_KIND_CONSERVATION_EASEMENT) != 0 { return 42 } 82 83 // 11: longest horizon 84 if nx_gr_longest_horizon_years(g) != 200 { return 43 } 85 86 // 12: invalid kind refused 87 let bad_kind: nx_int = nx_gr_add_contribution(g, 500, 99, 100, 50, 0, now) 88 if bad_kind != NX_GR_V_ERR_INVALID_KIND { return 44 } 89 90 // 13: null guard 91 let null_g: *NxGrove = (0 as i64) as *NxGrove 92 if nx_gr_add_contribution(null_g, 1, NX_GR_KIND_LAND_TRUST, 100, 50, 0, now) != NX_GR_V_NULL { return 45 } 93 if nx_gr_total_units_by_kind(null_g, NX_GR_KIND_LAND_TRUST) != 0 { return 46 } 94 if nx_gr_longest_horizon_years(null_g) != 0 { return 47 } 95 if nx_gr_count_by_kind(null_g, NX_GR_KIND_LAND_TRUST) != 0 { return 48 } 96 97 // 14: invalid capacity rejected 98 if nx_gr_new(1, 0, 10, 5, now) != (0 as *NxGrove) { return 49 } 99 if nx_gr_new(1, -1, 10, 5, now) != (0 as *NxGrove) { return 50 } 100 101 return 0 102}