nx_tropism_test.nx source
↩ module page · 94 lines · 3809 B
1// nx_tropism_test.nx -- smoke for nx_tropism.
2
3import "nx_syscalls.nx"
4import "nx_tier.nx"
5import "nx_attention_class.nx"
6import "nx_homeostasis.nx"
7import "nx_tropism.nx"
8
9func main() -> i64 {
10 // 1: enum sealed
11 if NX_TROP_N_TARGETS != 10 { return 1 }
12
13 // 2: validation
14 if nx_tropism_is_valid(NX_TROP_LOCAL_CPU) != 1 { return 2 }
15 if nx_tropism_is_valid(NX_TROP_USER_ATTENTION) != 1 { return 3 }
16 if nx_tropism_is_valid(-1) != 0 { return 4 }
17 if nx_tropism_is_valid(10) != 0 { return 5 }
18
19 // 3: local predicate
20 if nx_tropism_is_local(NX_TROP_LOCAL_CPU) != 1 { return 6 }
21 if nx_tropism_is_local(NX_TROP_LOCAL_GPU) != 1 { return 7 }
22 if nx_tropism_is_local(NX_TROP_LOCAL_GPU_MAX_VRAM) != 1 { return 8 }
23 if nx_tropism_is_local(NX_TROP_LOCAL_DISK) != 1 { return 9 }
24 if nx_tropism_is_local(NX_TROP_PEER) != 0 { return 10 }
25 if nx_tropism_is_local(NX_TROP_CLOUD) != 0 { return 11 }
26
27 // 4: remote predicate
28 if nx_tropism_is_remote(NX_TROP_NAS) != 1 { return 12 }
29 if nx_tropism_is_remote(NX_TROP_PEER) != 1 { return 13 }
30 if nx_tropism_is_remote(NX_TROP_CLOUD) != 1 { return 14 }
31 if nx_tropism_is_remote(NX_TROP_LOCAL_CPU) != 0 { return 15 }
32
33 // 5: STEADY -> current (no move)
34 let r1: nx_int = nx_tropism_resolve(NX_HOMEO_STEADY,
35 NX_TROP_LOCAL_CPU, NX_AC_DEV, NX_TROP_PEER)
36 if r1 != NX_TROP_LOCAL_CPU { return 16 }
37
38 // 6: foreground refuses CLOUD preference
39 let r2: nx_int = nx_tropism_resolve(NX_HOMEO_MIGRATE_RAM,
40 NX_TROP_LOCAL_CPU,
41 NX_AC_INTERACTIVE_FOREGROUND_GAME, NX_TROP_CLOUD)
42 if r2 == NX_TROP_CLOUD { return 17 }
43
44 // 7: foreground VRAM pressure -> LOCAL_GPU_MAX_VRAM
45 let r3: nx_int = nx_tropism_resolve(NX_HOMEO_MIGRATE_VRAM,
46 NX_TROP_LOCAL_GPU,
47 NX_AC_INTERACTIVE_FOREGROUND_GAME, NX_TROP_LOCAL_GPU)
48 if r3 != NX_TROP_LOCAL_GPU_MAX_VRAM { return 18 }
49
50 // 8: background RAM pressure -> NAS
51 let r4: nx_int = nx_tropism_resolve(NX_HOMEO_MIGRATE_RAM,
52 NX_TROP_LOCAL_CPU,
53 NX_AC_BACKGROUND_INFERENCE, NX_TROP_LOCAL_CPU)
54 if r4 != NX_TROP_NAS { return 19 }
55
56 // 9: disk pressure always NAS
57 let r5: nx_int = nx_tropism_resolve(NX_HOMEO_MIGRATE_DISK,
58 NX_TROP_LOCAL_DISK,
59 NX_AC_IDLE_OPPORTUNISTIC, NX_TROP_LOCAL_DISK)
60 if r5 != NX_TROP_NAS { return 20 }
61
62 // 10: background thermal -> PEER
63 let r6: nx_int = nx_tropism_resolve(NX_HOMEO_MIGRATE_THERMAL,
64 NX_TROP_LOCAL_CPU,
65 NX_AC_BACKGROUND_BUILD, NX_TROP_LOCAL_CPU)
66 if r6 != NX_TROP_PEER { return 21 }
67
68 // 11: eviction storm foreground -> LOCAL_GPU_MAX_VRAM
69 let r7: nx_int = nx_tropism_resolve(NX_HOMEO_EVICTION_STORM,
70 NX_TROP_LOCAL_GPU,
71 NX_AC_INTERACTIVE_FOREGROUND_GAME, NX_TROP_LOCAL_GPU)
72 if r7 != NX_TROP_LOCAL_GPU_MAX_VRAM { return 22 }
73
74 // 12: PROMOTE_TIER foreground stays on big-VRAM GPU
75 let r8: nx_int = nx_tropism_resolve(NX_HOMEO_PROMOTE_TIER,
76 NX_TROP_LOCAL_GPU,
77 NX_AC_INTERACTIVE_FOREGROUND_GAME, NX_TROP_LOCAL_GPU)
78 if r8 != NX_TROP_LOCAL_GPU_MAX_VRAM { return 23 }
79
80 // 13: PROMOTE_TIER background allows cloud
81 let r9: nx_int = nx_tropism_resolve(NX_HOMEO_PROMOTE_TIER,
82 NX_TROP_LOCAL_CPU,
83 NX_AC_BACKGROUND_BUILD, NX_TROP_LOCAL_CPU)
84 if r9 != NX_TROP_CLOUD { return 24 }
85
86 // 14: cost-q10 monotonic local < remote
87 if nx_tropism_cost_q10(NX_TROP_LOCAL_CPU) != 0 { return 25 }
88 if nx_tropism_cost_q10(NX_TROP_LOCAL_CPU) >= nx_tropism_cost_q10(NX_TROP_LOCAL_GPU) { return 26 }
89 if nx_tropism_cost_q10(NX_TROP_LOCAL_GPU) >= nx_tropism_cost_q10(NX_TROP_NAS) { return 27 }
90 if nx_tropism_cost_q10(NX_TROP_NAS) >= nx_tropism_cost_q10(NX_TROP_CLOUD) { return 28 }
91 if nx_tropism_cost_q10(NX_TROP_CLOUD) != 1024 { return 29 }
92
93 return 0
94}