nx_drone_doctrine_test.nx source
↩ module page · 56 lines · 2456 B
1// nx_drone_doctrine_test.nx -- smoke for nx_drone_doctrine.
2
3import "nx_syscalls.nx"
4import "nx_intent.nx"
5import "nx_drone_doctrine.nx"
6
7func main() -> i64 {
8 if NX_DP_N_PURPOSES != 7 { return 1 }
9 if NX_DO_N_OPS != 7 { return 2 }
10 if nx_dp_is_valid(NX_DP_SEARCH_LOST) != 1 { return 3 }
11 if nx_do_is_valid(NX_DO_DEPLOY_RESCUE_BEACON) != 1 { return 4 }
12 if nx_dp_is_valid(7) != 0 { return 5 }
13
14 // Construction REFUSES non-Defensive intent
15 let bad_s: *NxDroneSession = nx_drone_session_new(100,
16 NX_DP_DEFENSIVE_FAMILY, NX_INTENT_CREATIVE, 1, 1000)
17 if (bad_s as i64) != 0 { return 6 }
18
19 // Construction with Defensive intent + defensive purpose -> OK
20 let s: *NxDroneSession = nx_drone_session_new(100,
21 NX_DP_DEFENSIVE_FAMILY, NX_INTENT_DEFENSIVE, 1, 1000)
22 if (s as i64) == 0 { return 7 }
23 if s.purpose != NX_DP_DEFENSIVE_FAMILY { return 8 }
24
25 // OBSERVE allowed for any purpose
26 if nx_drone_invoke_op(s, NX_DO_OBSERVE) != NX_DR_OK { return 9 }
27
28 // ALERT_OPERATOR allowed for DEFENSIVE_FAMILY
29 if nx_drone_invoke_op(s, NX_DO_ALERT_OPERATOR) != NX_DR_OK { return 10 }
30
31 // DEPLOY_RESCUE_BEACON refused for DEFENSIVE_FAMILY (not a search purpose)
32 if nx_drone_invoke_op(s, NX_DO_DEPLOY_RESCUE_BEACON) != NX_DR_REFUSED_PURPOSE_OP_MISMATCH { return 11 }
33
34 // SEARCH_LOST may deploy rescue beacons
35 let s2: *NxDroneSession = nx_drone_session_new(200,
36 NX_DP_SEARCH_LOST, NX_INTENT_DEFENSIVE, 1, 2000)
37 if nx_drone_invoke_op(s2, NX_DO_DEPLOY_RESCUE_BEACON) != NX_DR_OK { return 12 }
38 if nx_drone_invoke_op(s2, NX_DO_FOLLOW_PATH) != NX_DR_OK { return 13 }
39 if nx_drone_invoke_op(s2, NX_DO_HOVER_PATTERN) != NX_DR_OK { return 14 }
40
41 // INSPECTION_INFRASTRUCTURE: FOLLOW_PATH OK, HOVER refused
42 let s3: *NxDroneSession = nx_drone_session_new(300,
43 NX_DP_INSPECTION_INFRASTRUCTURE, NX_INTENT_DEFENSIVE, 1, 3000)
44 if nx_drone_invoke_op(s3, NX_DO_FOLLOW_PATH) != NX_DR_OK { return 15 }
45 if nx_drone_invoke_op(s3, NX_DO_HOVER_PATTERN) != NX_DR_REFUSED_PURPOSE_OP_MISMATCH { return 16 }
46 if nx_drone_invoke_op(s3, NX_DO_DEPLOY_RESCUE_BEACON) != NX_DR_REFUSED_PURPOSE_OP_MISMATCH { return 17 }
47
48 // Bad op rejected
49 if nx_drone_invoke_op(s, 99) != NX_DR_REFUSED_BAD_OP { return 18 }
50
51 // operation_count increments on success
52 let n: nx_int = nx_drone_operation_count(s)
53 if n < 2 { return 19 } // 2 successful ops on s
54
55 return 0
56}