Sam 2daf5f7b19
Some checks failed
Build Simulation and Test / Run All Tests (push) Failing after 1m46s
Add unit tests for configuration and core simulation components
2025-11-08 19:45:35 -06:00

111 lines
3.8 KiB
Python

"""Tests for configuration system."""
import pytest
import json
import tempfile
import os
from config.simulation_config import SimulationConfig, HeadlessConfig, InteractiveConfig, ExperimentConfig
from config.config_loader import ConfigLoader
class TestSimulationConfig:
"""Test simulation configuration."""
def test_custom_values(self):
"""Test custom configuration values."""
config = SimulationConfig(
grid_width=50,
grid_height=40,
cell_size=15,
initial_cells=100,
initial_food=200,
food_spawning=False,
random_seed=999,
default_tps=120.0
)
assert config.grid_width == 50
assert config.grid_height == 40
assert config.cell_size == 15
assert config.initial_cells == 100
assert config.initial_food == 200
assert config.food_spawning == False
assert config.random_seed == 999
assert config.default_tps == 120.0
class TestConfigLoader:
"""Test configuration loader."""
def test_load_headless_config(self):
"""Test loading headless configuration from file."""
# Create a temporary file
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
temp_file = f.name
json.dump({
"max_ticks": 10000,
"max_duration": 300.0,
"output": {
"enabled": True,
"directory": "test_output",
"formats": ["json", "csv"]
},
"simulation": {
"grid_width": 50,
"grid_height": 40,
"initial_cells": 100,
"default_tps": 60.0
}
}, f)
try:
config = ConfigLoader.load_headless_config(temp_file)
assert config.max_ticks == 10000
assert config.max_duration == 300.0
assert config.output.enabled == True
assert config.output.directory == "test_output"
assert config.output.formats == ["json", "csv"]
assert config.simulation.grid_width == 50
assert config.simulation.grid_height == 40
assert config.simulation.initial_cells == 100
assert config.simulation.default_tps == 60.0
finally:
os.unlink(temp_file)
def test_save_load_json(self):
"""Test saving and loading configuration from JSON file."""
# Create a temporary file
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
temp_file = f.name
try:
# Create test configuration
original_config = HeadlessConfig(
max_ticks=5000,
simulation=SimulationConfig(
grid_width=25,
grid_height=20,
initial_cells=75,
default_tps=90.0
)
)
# Save to JSON
ConfigLoader.save_config(original_config, temp_file)
# Load from JSON
loaded_config = ConfigLoader.load_headless_config(temp_file)
# Verify loaded config matches original
assert loaded_config.max_ticks == original_config.max_ticks
assert loaded_config.simulation.grid_width == original_config.simulation.grid_width
assert loaded_config.simulation.grid_height == original_config.simulation.grid_height
assert loaded_config.simulation.initial_cells == original_config.simulation.initial_cells
assert loaded_config.simulation.default_tps == original_config.simulation.default_tps
finally:
# Clean up temporary file
if os.path.exists(temp_file):
os.unlink(temp_file)