code wiki / (root) / nx_disturbance_test.nx

nx_disturbance_test.nx source

↩ module page · 121 lines · 5520 B

1// nx_disturbance_test.nx -- smoke for nx_disturbance. 2 3import "nx_syscalls.nx" 4import "nx_disturbance.nx" 5 6func main() -> i64 { 7 // 1: disturbance type enum validity 8 if nx_di_type_is_valid(NX_DI_FIRE_PRESCRIBED) != 1 { return 1 } 9 if nx_di_type_is_valid(NX_DI_NONE_FROZEN) != 1 { return 2 } 10 if nx_di_type_is_valid(-1) != 0 { return 3 } 11 if nx_di_type_is_valid(10) != 0 { return 4 } 12 if NX_DI_N_TYPES != 10 { return 5 } 13 14 // 2: ecosystem type enum validity 15 if nx_eco_type_is_valid(NX_ECO_TALLGRASS_PRAIRIE) != 1 { return 6 } 16 if nx_eco_type_is_valid(NX_ECO_ABORIGINAL_AUSTRALIAN) != 1 { return 7 } 17 if nx_eco_type_is_valid(-1) != 0 { return 8 } 18 if nx_eco_type_is_valid(10) != 0 { return 9 } 19 20 // 3: verdict enum validity 21 if nx_di_v_is_valid(NX_DI_V_REGIME_OK) != 1 { return 10 } 22 if nx_di_v_is_valid(NX_DI_V_REFUSED_EXTRACTION) != 1 { return 11 } 23 if nx_di_v_is_valid(-1) != 0 { return 12 } 24 if nx_di_v_is_valid(6) != 0 { return 13 } 25 if nx_di_v_is_valid(NX_DI_V_INVALID) != 0 { return 14 } 26 27 // 4: FPIC-required predicate (Indigenous fire only) 28 if nx_di_requires_fpic(NX_DI_FIRE_INDIGENOUS) != 1 { return 15 } 29 if nx_di_requires_fpic(NX_DI_FIRE_PRESCRIBED) != 0 { return 16 } 30 if nx_di_requires_fpic(NX_DI_COPPICE) != 0 { return 17 } 31 32 // 5: permit-required predicate 33 if nx_di_requires_permit(NX_DI_FIRE_PRESCRIBED) != 1 { return 18 } 34 if nx_di_requires_permit(NX_DI_FLOOD_PULSE) != 1 { return 19 } 35 if nx_di_requires_permit(NX_DI_BEAVER_REINTRO) != 1 { return 20 } 36 if nx_di_requires_permit(NX_DI_SELECTIVE_HARVEST) != 1 { return 21 } 37 if nx_di_requires_permit(NX_DI_COPPICE) != 0 { return 22 } 38 if nx_di_requires_permit(NX_DI_POLLARD) != 0 { return 23 } 39 if nx_di_requires_permit(NX_DI_HERBIVORY_ROTATIONAL) != 0 { return 24 } 40 41 // 6: regime frequency -- tallgrass prairie + fire = 3 years 42 if nx_di_ecosystem_regime_frequency_years( 43 NX_ECO_TALLGRASS_PRAIRIE, NX_DI_FIRE_PRESCRIBED) != 3 { return 25 } 44 45 // 7: oak savanna + fire = 2 years 46 if nx_di_ecosystem_regime_frequency_years( 47 NX_ECO_OAK_SAVANNA, NX_DI_FIRE_PRESCRIBED) != 2 { return 26 } 48 49 // 8: longleaf pine + fire = 2 years 50 if nx_di_ecosystem_regime_frequency_years( 51 NX_ECO_LONGLEAF_PINE, NX_DI_FIRE_PRESCRIBED) != 2 { return 27 } 52 53 // 9: Pacific NW old-growth + windfall = 50 years 54 if nx_di_ecosystem_regime_frequency_years( 55 NX_ECO_PACIFIC_NW_OLDGROWTH, NX_DI_WINDFALL_NATURAL) != 50 { return 28 } 56 57 // 10: riparian bottomland + flood pulse = 5 years 58 if nx_di_ecosystem_regime_frequency_years( 59 NX_ECO_RIPARIAN_BOTTOMLAND, NX_DI_FLOOD_PULSE) != 5 { return 29 } 60 61 // 11: salt marsh + flood pulse = 1 year (tidal) 62 if nx_di_ecosystem_regime_frequency_years( 63 NX_ECO_SALT_MARSH, NX_DI_FLOOD_PULSE) != 1 { return 30 } 64 65 // 12: Aboriginal Australian + Indigenous fire = 3 years 66 if nx_di_ecosystem_regime_frequency_years( 67 NX_ECO_ABORIGINAL_AUSTRALIAN, NX_DI_FIRE_INDIGENOUS) != 3 { return 31 } 68 69 // 13: mixed hardwood + coppice = 7 years 70 if nx_di_ecosystem_regime_frequency_years( 71 NX_ECO_MIXED_HARDWOOD, NX_DI_COPPICE) != 7 { return 32 } 72 73 // 14: incompatible pairing -- desert + flood pulse = 0 74 if nx_di_ecosystem_regime_frequency_years( 75 NX_ECO_DESERT_ARID, NX_DI_FLOOD_PULSE) != 0 { return 33 } 76 77 // 15: invalid inputs -> 0 78 if nx_di_ecosystem_regime_frequency_years(99, NX_DI_FIRE_PRESCRIBED) != 0 { return 34 } 79 if nx_di_ecosystem_regime_frequency_years(NX_ECO_TALLGRASS_PRAIRIE, 99) != 0 { return 35 } 80 81 // 16: classify proposal -- prairie + prescribed fire requires permit 82 let v1: nx_int = nx_di_classify_proposal( 83 NX_ECO_TALLGRASS_PRAIRIE, NX_DI_FIRE_PRESCRIBED) 84 if v1 != NX_DI_V_REQUIRES_PERMIT { return 36 } 85 86 // 17: classify -- Indigenous fire requires FPIC (priority over permit) 87 let v2: nx_int = nx_di_classify_proposal( 88 NX_ECO_ABORIGINAL_AUSTRALIAN, NX_DI_FIRE_INDIGENOUS) 89 if v2 != NX_DI_V_REQUIRES_FPIC { return 37 } 90 91 // 18: classify -- coppice on mixed hardwood = OK (no permit needed) 92 let v3: nx_int = nx_di_classify_proposal( 93 NX_ECO_MIXED_HARDWOOD, NX_DI_COPPICE) 94 if v3 != NX_DI_V_REGIME_OK { return 38 } 95 96 // 19: classify -- NONE_FROZEN is refused (preservation-as-freeze) 97 let v4: nx_int = nx_di_classify_proposal( 98 NX_ECO_MIXED_HARDWOOD, NX_DI_NONE_FROZEN) 99 if v4 != NX_DI_V_REFUSED_FROZEN { return 39 } 100 101 // 20: classify -- incompatible -> INCOMPATIBLE 102 let v5: nx_int = nx_di_classify_proposal( 103 NX_ECO_DESERT_ARID, NX_DI_FLOOD_PULSE) 104 if v5 != NX_DI_V_INCOMPATIBLE { return 40 } 105 106 // 21: classify -- invalid inputs -> INVALID 107 let v6: nx_int = nx_di_classify_proposal(99, NX_DI_FIRE_PRESCRIBED) 108 if v6 != NX_DI_V_INVALID { return 41 } 109 let v7: nx_int = nx_di_classify_proposal(NX_ECO_TALLGRASS_PRAIRIE, 99) 110 if v7 != NX_DI_V_INVALID { return 42 } 111 112 // 22: concerning predicate -- REGIME_OK not concerning; others are 113 if nx_di_v_is_concerning(NX_DI_V_REGIME_OK) != 0 { return 43 } 114 if nx_di_v_is_concerning(NX_DI_V_REQUIRES_FPIC) != 1 { return 44 } 115 if nx_di_v_is_concerning(NX_DI_V_REQUIRES_PERMIT) != 1 { return 45 } 116 if nx_di_v_is_concerning(NX_DI_V_REFUSED_FROZEN) != 1 { return 46 } 117 if nx_di_v_is_concerning(NX_DI_V_REFUSED_EXTRACTION) != 1 { return 47 } 118 if nx_di_v_is_concerning(NX_DI_V_INCOMPATIBLE) != 1 { return 48 } 119 120 return 0 121}