All checks were successful
		
		
	
	Build Simulation and Test / Run All Tests (push) Successful in 2m53s
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| import random
 | |
| 
 | |
| from world.world import World, Position, Rotation
 | |
| from world.objects import FoodObject, DefaultCell
 | |
| from tests.benchmarking import HeadlessSimulationBenchmark
 | |
| 
 | |
| # Hardcoded simulation parameters (copied from config/constants.py)
 | |
| CELL_SIZE = 20
 | |
| GRID_WIDTH = 30
 | |
| GRID_HEIGHT = 25
 | |
| FOOD_OBJECTS_COUNT = 500
 | |
| RANDOM_SEED = 12345
 | |
| 
 | |
| def _setup_world(seed=RANDOM_SEED):
 | |
|     world = World(CELL_SIZE, (CELL_SIZE * GRID_WIDTH, CELL_SIZE * GRID_HEIGHT))
 | |
|     random.seed(seed)
 | |
| 
 | |
|     half_width = GRID_WIDTH * CELL_SIZE // 2
 | |
|     half_height = GRID_HEIGHT * CELL_SIZE // 2
 | |
| 
 | |
|     for _ in range(FOOD_OBJECTS_COUNT):
 | |
|         x = random.randint(-half_width, half_width)
 | |
|         y = random.randint(-half_height, half_height)
 | |
|         world.add_object(FoodObject(Position(x=x, y=y)))
 | |
| 
 | |
|     for _ in range(300):
 | |
|         new_cell = DefaultCell(
 | |
|             Position(x=random.randint(-half_width, half_width), y=random.randint(-half_height, half_height)),
 | |
|             Rotation(angle=0)
 | |
|         )
 | |
|         new_cell.behavioral_model = new_cell.behavioral_model.mutate(3)
 | |
|         world.add_object(new_cell)
 | |
| 
 | |
|     return world
 | |
| 
 | |
| def test_simulation_determinism():
 | |
|     bench1 = HeadlessSimulationBenchmark(lambda seed: _setup_world(seed), random_seed=RANDOM_SEED)
 | |
|     bench2 = HeadlessSimulationBenchmark(lambda seed: _setup_world(seed), random_seed=RANDOM_SEED)
 | |
| 
 | |
|     bench1.start(ticks=100)
 | |
|     bench2.start(ticks=100)
 | |
| 
 | |
|     hash1 = bench1.get_simulation_hash()
 | |
|     hash2 = bench2.get_simulation_hash()
 | |
| 
 | |
|     assert hash1 == hash2, f"Simulation hashes differ: {hash1} != {hash2}"
 | |
| 
 | |
| def test_simulation_benchmark():
 | |
|     bench = HeadlessSimulationBenchmark(lambda seed: _setup_world(seed), random_seed=RANDOM_SEED+1)
 | |
|     tick_count = 100
 | |
|     bench.start(ticks=tick_count)
 | |
|     summary = bench.get_summary()
 | |
|     print(f"{tick_count} ticks took {summary.get('ticks_elapsed_time', 0):.4f} seconds, TPS avg: {summary['tps_avg']:.2f}, stddev: {summary['tps_stddev']:.2f}")
 | |
| 
 | |
|     assert summary['tps_avg'] > 0, "Average TPS should be greater than zero"
 | |
|     assert summary['ticks_elapsed_time'] > 0, "Elapsed time should be greater than zero" |