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}