code wiki / (root) / nx_decl_dungeon_floor_test.nx

nx_decl_dungeon_floor_test.nx source

↩ module page · 95 lines · 3723 B

1// nx_decl_dungeon_floor_test.nx -- smoke for the fourth declarator. 2// 3// expect_exit: 0 4// 5// license_tier: ORIGINAL 6 7import "nx_syscalls.nx" 8import "nx_types.nx" 9import "nx_tier.nx" 10import "nx_decl_random_environment.nx" 11import "nx_decl_dungeon_floor.nx" 12 13func main() -> nx_int { 14 // ---- T1: mood validity ---------------------------------------- 15 if nx_dungeon_mood_is_valid(NX_DUNGEON_MOOD_CRYPT) != 1 { return 1 } 16 if nx_dungeon_mood_is_valid(NX_DUNGEON_MOOD_LAB) != 1 { return 2 } 17 if nx_dungeon_mood_is_valid(NX_DUNGEON_MOOD_N) != 0 { return 3 } 18 if nx_dungeon_mood_is_valid(-1) != 0 { return 4 } 19 20 // ---- T2: REAL dungeon -> 24x24, fantasy moods only ----------- 21 let d: *NxDungeonFloor = nx_df_alloc() 22 nx_decl_dungeon_floor(d, NX_RE_MODIFIER_REAL, 42) 23 if d.is_valid != 1 { return 10 } 24 if d.grid_width != 24 { return 11 } 25 if d.grid_height != 24 { return 12 } 26 if d.mood == NX_DUNGEON_MOOD_REACTOR { return 13 } // sci-fi only 27 if d.mood == NX_DUNGEON_MOOD_LAB { return 14 } 28 if nx_dungeon_mood_is_valid(d.mood) != 1 { return 15 } 29 if d.room_count < 4 { return 16 } 30 if d.corridor_count < 0 { return 17 } 31 if d.treasure_count < 1 { return 18 } 32 if d.trap_count < 0 { return 19 } 33 if d.light_level_q10 < 0 { return 20 } 34 if d.light_level_q10 > 1024 { return 21 } 35 36 // ---- T3: FANTASY dungeon scales up --------------------------- 37 let f: *NxDungeonFloor = nx_df_alloc() 38 nx_decl_dungeon_floor(f, NX_RE_MODIFIER_FANTASY, 42) 39 if f.grid_width != 48 { return 30 } 40 if f.grid_height != 48 { return 31 } 41 if f.room_count < 8 { return 32 } 42 if f.mood == NX_DUNGEON_MOOD_REACTOR { return 33 } // still fantasy 43 if f.mood == NX_DUNGEON_MOOD_LAB { return 34 } 44 45 // ---- T4: SCI_FI dungeon picks REACTOR or LAB only ------------ 46 let s: *NxDungeonFloor = nx_df_alloc() 47 nx_decl_dungeon_floor(s, NX_RE_MODIFIER_SCI_FI, 42) 48 if s.grid_width != 32 { return 40 } 49 if s.mood != NX_DUNGEON_MOOD_REACTOR { 50 if s.mood != NX_DUNGEON_MOOD_LAB { return 41 } 51 } 52 53 // ---- T5: determinism (same seed -> identical floor) ---------- 54 let p: *NxDungeonFloor = nx_df_alloc() 55 let q: *NxDungeonFloor = nx_df_alloc() 56 nx_decl_dungeon_floor(p, NX_RE_MODIFIER_FANTASY, 99) 57 nx_decl_dungeon_floor(q, NX_RE_MODIFIER_FANTASY, 99) 58 if p.mood != q.mood { return 50 } 59 if p.room_count != q.room_count { return 51 } 60 if p.treasure_count != q.treasure_count { return 52 } 61 if p.trap_count != q.trap_count { return 53 } 62 if p.boss_present != q.boss_present { return 54 } 63 64 // ---- T6: corridor count = room_count - 1 (when rooms >= 2) ---- 65 if p.room_count >= 2 { 66 if p.corridor_count != p.room_count - 1 { return 60 } 67 } 68 69 // ---- T7: invalid modifier -> is_valid=0 ----------------------- 70 let bad: *NxDungeonFloor = nx_df_alloc() 71 nx_decl_dungeon_floor(bad, 999, 0) 72 if bad.is_valid != 0 { return 70 } 73 74 // ---- T8: mood reflection ------------------------------------- 75 let n1: *u8 = nx_dungeon_mood_name(NX_DUNGEON_MOOD_CRYPT) 76 if (n1[0] as i64 & 255) != 67 { return 80 } // 'C' 77 78 let n2: *u8 = nx_dungeon_mood_name(NX_DUNGEON_MOOD_REACTOR) 79 if (n2[0] as i64 & 255) != 82 { return 81 } // 'R' 80 81 // Print a representative debug line. 82 sys_write(1, "modifier=" as *u8, 9) 83 let mn: *u8 = nx_re_modifier_name(f.modifier) 84 var i: i64 = 0 85 while mn[i] != 0 { i = i + 1 } 86 sys_write(1, mn, i) 87 sys_write(1, " mood=" as *u8, 6) 88 let dn: *u8 = nx_dungeon_mood_name(f.mood) 89 var j: i64 = 0 90 while dn[j] != 0 { j = j + 1 } 91 sys_write(1, dn, j) 92 sys_write(1, "\n" as *u8, 1) 93 94 return 0 95}