summaryrefslogtreecommitdiff
path: root/dungeon/tests/bsp_tests.rs
blob: 16a8a77cddc11b37d1737a45c6fd8371dbe34322 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! Integration Tests for BSP dungeon generation
#[cfg(test)]
mod tests {
	use dungeon::*;

	/// Basic integration test for BSP generation
	#[test]
	fn test_bsp_integration() {
		let seed = 12345u64;
		let (tiles, player_start) = bsp::generate(seed);
		// Basic integration test: ensure we get valid data
		assert!(!tiles.is_empty());
		assert!(player_start.x() < map::MAP_SIZE);
		assert!(player_start.y() < map::MAP_SIZE);
	}

	/// Test that BSP-generated floors have a valid player start
	#[test]
	fn test_bsp_player_start() {
		let seed = 12345u64;
		let (tiles, player_start) = bsp::generate(seed);
		// Ensure player start is within bounds
		assert!(player_start.x() < map::MAP_SIZE);
		assert!(player_start.y() < map::MAP_SIZE);
		// Ensure player start is a room tile
		let idx = player_start.idx();
		assert_eq!(tiles[idx], map::Tile::Room);
	}

	/// Test that BSP-generated floors have at least two rooms
	#[test]
	fn test_bsp_2_or_more_rooms() {
		let seed = 12345u64;
		let (tiles, _player_start) = bsp::generate(seed);
		// Ensure we have at least two rooms
		let mut room_count = 0;
		let mut visited = vec![false; tiles.len()];
		for (i, &tile) in tiles.iter().enumerate() {
			if tile == map::Tile::Room && !visited[i] {
				room_count += 1;
				// Mark all connected tiles as visited
				visited[i] = true;
			}
		}
		assert!(room_count >= 2);
	}
}