nx_treaty_test.nx source
↩ module page · 105 lines · 4389 B
1// nx_treaty_test.nx -- smoke for nx_treaty.
2
3import "nx_syscalls.nx"
4import "nx_tier.nx"
5import "nx_budget.nx"
6import "nx_attention_class.nx"
7import "nx_evict_journal.nx"
8import "nx_treaty.nx"
9
10func main() -> i64 {
11 // 1: state enum sealed
12 if NX_TR_N_STATES != 4 { return 1 }
13 if nx_tr_state_is_valid(NX_TR_PROPOSED) != 1 { return 2 }
14 if nx_tr_state_is_valid(NX_TR_RELEASED) != 1 { return 3 }
15 if nx_tr_state_is_valid(-1) != 0 { return 4 }
16 if nx_tr_state_is_valid(4) != 0 { return 5 }
17
18 // 2: equal-priority treaty: dev cell + dev cell, 50/50 share
19 let t1: *NxTreaty = nx_treaty_propose(1,
20 100, NX_AC_DEV,
21 200, NX_AC_DEV,
22 512, 512, 1000)
23 if (t1 as i64) == 0 { return 6 }
24 if t1.state != NX_TR_PROPOSED { return 7 }
25 if t1.a_id != 100 { return 8 }
26 if t1.ram_share_a_q10 != 512 { return 9 }
27
28 // 3: accept transitions to ACTIVE
29 if nx_treaty_accept(t1, 2000) != NX_TREATY_OK { return 10 }
30 if t1.state != NX_TR_ACTIVE { return 11 }
31 if nx_treaty_is_active(t1) != 1 { return 12 }
32
33 // 4: party_share queries
34 if nx_treaty_party_share_q10(t1, 100, NX_RES_RAM) != 512 { return 13 }
35 if nx_treaty_party_share_q10(t1, 200, NX_RES_RAM) != 512 { return 14 }
36 if nx_treaty_party_share_q10(t1, 999, NX_RES_RAM) != -1 { return 15 }
37
38 // 5: PRIORITY INVERSION rejected -- foreground game (a) cannot
39 // propose to surrender VRAM to background inference (b)
40 let t_bad: *NxTreaty = nx_treaty_propose(2,
41 100, NX_AC_INTERACTIVE_FOREGROUND_GAME,
42 200, NX_AC_BACKGROUND_INFERENCE,
43 256, 256, 1000)
44 if (t_bad as i64) != 0 { return 16 }
45
46 // 6: NMS-via-Steam treaty -- both foreground (game + video call),
47 // Steam-NMS gets 60% VRAM, our gen-img cell gets 40%
48 let nms_steam: *NxTreaty = nx_treaty_propose(3,
49 1234, NX_AC_INTERACTIVE_FOREGROUND_GAME, // Steam-NMS pid 1234
50 5678, NX_AC_VIDEO_CALL, // gen-img cell
51 512, 614, 3000) // 60% VRAM to NMS
52 if (nms_steam as i64) == 0 { return 17 }
53 nx_treaty_accept(nms_steam, 3100)
54 if nx_treaty_party_share_q10(nms_steam, 1234, NX_RES_VRAM) != 614 { return 18 }
55 if nx_treaty_party_share_q10(nms_steam, 5678, NX_RES_VRAM) != 410 { return 19 }
56
57 // 7: breach check -- pool is 12GB VRAM. NMS gets 60% = 7.2GB.
58 // NMS observed 9GB (overshoot 1280 Q10) -> breach trigger.
59 let pool: nx_size = 12000000000
60 let breach1: nx_int = nx_treaty_check_breach(nms_steam, pool,
61 9000000000, 4000000000, NX_RES_VRAM, 4000)
62 if breach1 != 1 { return 20 }
63 if nms_steam.state != NX_TR_BREACHED { return 21 }
64 if nms_steam.breach_count != 1 { return 22 }
65 if nx_treaty_is_active(nms_steam) != 0 { return 23 }
66
67 // 8: renegotiate after breach -- NMS now agrees to 50/50
68 let rc_reneg: nx_int = nx_treaty_renegotiate_shares(nms_steam,
69 512, 512, 5000)
70 if rc_reneg != NX_TREATY_OK { return 24 }
71 if nms_steam.state != NX_TR_PROPOSED { return 25 }
72 // breach_count preserved across renegotiation
73 if nms_steam.breach_count != 1 { return 26 }
74 // accept again
75 nx_treaty_accept(nms_steam, 5100)
76 if nms_steam.state != NX_TR_ACTIVE { return 27 }
77
78 // 9: within-share consumption does NOT breach
79 let breach2: nx_int = nx_treaty_check_breach(nms_steam, pool,
80 5500000000, 5500000000, NX_RES_VRAM, 6000)
81 if breach2 != 0 { return 28 }
82 if nms_steam.state != NX_TR_ACTIVE { return 29 }
83
84 // 10: release dissolves the treaty
85 nx_treaty_release(nms_steam, 7000)
86 if nms_steam.state != NX_TR_RELEASED { return 30 }
87 if nx_treaty_is_active(nms_steam) != 0 { return 31 }
88
89 // 11: renegotiate on RELEASED treaty rejected
90 let rc_dead: nx_int = nx_treaty_renegotiate_shares(nms_steam,
91 500, 500, 8000)
92 if rc_dead != NX_TREATY_ERR_RELEASED { return 32 }
93
94 // 12: invalid shares (>1024 or <0) rejected
95 let rc_inv: nx_int = nx_treaty_renegotiate_shares(t1, 2000, 0, 9000)
96 if rc_inv != NX_TREATY_ERR_SHARES_INVALID { return 33 }
97 let rc_neg: nx_int = nx_treaty_renegotiate_shares(t1, -1, 0, 9000)
98 if rc_neg != NX_TREATY_ERR_SHARES_INVALID { return 34 }
99
100 // 13: accept on already-ACTIVE rejected
101 let rc_re_accept: nx_int = nx_treaty_accept(t1, 10000)
102 if rc_re_accept != NX_TREATY_ERR_NOT_PROPOSED { return 35 }
103
104 return 0
105}