REMB / algorithms /backend /test_basic.py
Cuong2004's picture
restructure algo folder
5f6bdbf
"""Simple test script to verify backend installation and basic functionality."""
import sys
import traceback
def test_imports():
"""Test that all required packages can be imported."""
print("Testing imports...")
try:
import fastapi
import uvicorn
import pydantic
import numpy
import shapely
import matplotlib
import ortools
import deap
# Test new module imports
from core.optimization.grid_optimizer import GridOptimizer
from core.optimization.subdivision_solver import SubdivisionSolver
from pipeline.land_redistribution import LandRedistributionPipeline
print("βœ… All imports successful")
return True
except ImportError as e:
print(f"❌ Import failed: {e}")
return False
def test_algorithm():
"""Test basic algorithm functionality."""
print("\nTesting algorithm...")
try:
from shapely.geometry import Polygon
from core.optimization.grid_optimizer import GridOptimizer
from core.optimization.subdivision_solver import SubdivisionSolver
# Create simple test polygon
land_poly = Polygon([(0, 0), (100, 0), (100, 100), (0, 100)])
# Test grid optimizer
optimizer = GridOptimizer(land_poly)
blocks = optimizer.generate_grid_candidates(25.0, 0.0)
print(f" Generated {len(blocks)} grid blocks")
# Test subdivision solver
widths = SubdivisionSolver.solve_subdivision(50.0, 5.0, 8.0, 6.0, time_limit=5)
print(f" Subdivision result: {len(widths)} lots")
print("βœ… Algorithm tests passed")
return True
except Exception as e:
print(f"❌ Algorithm test failed: {e}")
traceback.print_exc()
return False
def test_api_models():
"""Test Pydantic models."""
print("\nTesting API models...")
try:
from api.schemas.request_schemas import AlgorithmConfig, LandPlot, OptimizationRequest
# Create test config
config = AlgorithmConfig()
print(f" Default config created: spacing={config.spacing_min}-{config.spacing_max}m")
# Create test land plot
land_plot = LandPlot(
type="Polygon",
coordinates=[[[0, 0], [100, 0], [100, 100], [0, 100], [0, 0]]]
)
print(f" Land plot created: {land_plot.type}")
# Create request
request = OptimizationRequest(config=config, land_plots=[land_plot])
print(f" Request created with {len(request.land_plots)} plots")
print("βœ… API models tests passed")
return True
except Exception as e:
print(f"❌ API models test failed: {e}")
traceback.print_exc()
return False
if __name__ == "__main__":
print("=" * 50)
print("Algorithm Backend Test Suite (Modular Architecture)")
print("=" * 50)
results = []
results.append(("Imports", test_imports()))
results.append(("API Models", test_api_models()))
results.append(("Algorithm", test_algorithm()))
print("\n" + "=" * 50)
print("Test Results:")
print("=" * 50)
for name, passed in results:
status = "βœ… PASS" if passed else "❌ FAIL"
print(f"{status} - {name}")
all_passed = all(r[1] for r in results)
print("\n" + "=" * 50)
if all_passed:
print("βœ… ALL TESTS PASSED")
sys.exit(0)
else:
print("❌ SOME TESTS FAILED")
sys.exit(1)