0rbix / tests /test_optimization.py
nicolasleiva's picture
Initial commit: Add complete Orbix project
3dc2617
import unittest
import numpy as np
import pandas as pd
from unittest.mock import patch, MagicMock
from src.optimization import OrbitalPathOptimizer
class TestOptimization(unittest.TestCase):
"""Pruebas unitarias para el m贸dulo de optimizaci贸n de rutas orbitales."""
def setUp(self):
"""Configuraci贸n inicial para las pruebas."""
self.optimizer = OrbitalPathOptimizer()
# Datos de prueba
self.satellite_state = {"position": (1000.0, 2000.0, 3000.0)}
self.debris_data = pd.DataFrame({
"debris_id": [101, 102, 103],
"x": [1100.0, 1200.0, 1300.0],
"y": [2100.0, 2200.0, 2300.0],
"z": [3100.0, 3200.0, 3300.0]
})
@patch('src.optimization.pywrapcp.RoutingModel.SolveWithParameters')
def test_optimize_route_success(self, mock_solve):
"""Prueba que la optimizaci贸n de ruta funcione correctamente."""
# Configurar el mock para simular una soluci贸n exitosa
mock_solution = MagicMock()
mock_solve.return_value = mock_solution
# Configurar el comportamiento del mock para simular una ruta
mock_solution.Value.return_value = 1 # Simular el siguiente nodo
# Parchear el m茅todo IsEnd para controlar el flujo del bucle
with patch('src.optimization.pywrapcp.RoutingModel.IsEnd', side_effect=[False, False, False, True]):
# Parchear IndexToNode para simular los 铆ndices de nodos
with patch('src.optimization.pywrapcp.RoutingIndexManager.IndexToNode', side_effect=[0, 1, 2, 3]):
# Ejecutar la funci贸n
result = self.optimizer.optimize_route(self.satellite_state, self.debris_data)
# Verificar el resultado
self.assertEqual(len(result), 2) # Deber铆a haber 2 puntos en la ruta (omitiendo el nodo inicial)
def test_optimize_route_empty_data(self):
"""Prueba que la optimizaci贸n maneje correctamente datos vac铆os."""
# Datos de entrada vac铆os
empty_debris_data = pd.DataFrame()
# Ejecutar la funci贸n
result = self.optimizer.optimize_route(self.satellite_state, empty_debris_data)
# Verificar que se devuelve una lista vac铆a
self.assertEqual(result, [])
def test_optimize_route_missing_position(self):
"""Prueba que la optimizaci贸n maneje correctamente un estado sin posici贸n."""
# Estado sin posici贸n
invalid_state = {"velocity": (1.0, 2.0, 3.0)}
# Ejecutar la funci贸n
result = self.optimizer.optimize_route(invalid_state, self.debris_data)
# Verificar que se devuelve una lista vac铆a
self.assertEqual(result, [])
if __name__ == '__main__':
unittest.main()