diff --git a/examples/tests/test_routing_api.py b/examples/tests/test_routing_api.py index 6e1678df75..97828e31bc 100644 --- a/examples/tests/test_routing_api.py +++ b/examples/tests/test_routing_api.py @@ -16,6 +16,9 @@ class TestRoutingIndexManager(unittest.TestCase): self.assertEqual(42, manager.GetNumberOfNodes()) self.assertEqual(3, manager.GetNumberOfVehicles()) self.assertEqual(42+3*2-1, manager.GetNumberOfIndices()) + for i in range(manager.GetNumberOfVehicles()): + self.assertEqual(7, manager.IndexToNode(manager.GetStartIndex(i))) + self.assertEqual(7, manager.IndexToNode(manager.GetEndIndex(i))) def test_ctor_multi_same(self): manager = pywrapcp.RoutingIndexManager(42, 3, [0,0,0], [0,0,0]) @@ -23,6 +26,9 @@ class TestRoutingIndexManager(unittest.TestCase): self.assertEqual(42, manager.GetNumberOfNodes()) self.assertEqual(3, manager.GetNumberOfVehicles()) self.assertEqual(42+3*2-1, manager.GetNumberOfIndices()) + for i in range(manager.GetNumberOfVehicles()): + self.assertEqual(0, manager.IndexToNode(manager.GetStartIndex(i))) + self.assertEqual(0, manager.IndexToNode(manager.GetEndIndex(i))) def test_ctor_multi_all_diff(self): manager = pywrapcp.RoutingIndexManager(42, 3, [1,2,3], [4,5,6]) @@ -30,6 +36,9 @@ class TestRoutingIndexManager(unittest.TestCase): self.assertEqual(42, manager.GetNumberOfNodes()) self.assertEqual(3, manager.GetNumberOfVehicles()) self.assertEqual(42, manager.GetNumberOfIndices()) + for i in range(manager.GetNumberOfVehicles()): + self.assertEqual(i+1, manager.IndexToNode(manager.GetStartIndex(i))) + self.assertEqual(i+4, manager.IndexToNode(manager.GetEndIndex(i))) class TestRoutingModel(unittest.TestCase): @@ -47,7 +56,11 @@ class TestRoutingModel(unittest.TestCase): self.assertIsNotNone(manager) routing = pywrapcp.RoutingModel(manager) self.assertIsNotNone(routing) - self.assertTrue(routing.Solve()) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(0, assignment.ObjectiveValue()) def test_unary_transit_vector(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -57,7 +70,11 @@ class TestRoutingModel(unittest.TestCase): transit_id = routing.RegisterUnaryTransitVector([i+1 for i in range(5)]) self.assertEqual(1, transit_id) routing.SetArcCostEvaluatorOfAllVehicles(transit_id) - self.assertTrue(routing.Solve()) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(15, assignment.ObjectiveValue()) def test_unary_transit_callback(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -67,7 +84,11 @@ class TestRoutingModel(unittest.TestCase): transit_id = routing.RegisterUnaryTransitCallback(lambda from_index: 1) self.assertEqual(1, transit_id) routing.SetArcCostEvaluatorOfAllVehicles(transit_id) - self.assertTrue(routing.Solve()) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(5, assignment.ObjectiveValue()) def test_transit_matrix(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -78,7 +99,11 @@ class TestRoutingModel(unittest.TestCase): transit_id = routing.RegisterTransitMatrix(matrix) self.assertEqual(1, transit_id) routing.SetArcCostEvaluatorOfAllVehicles(transit_id) - self.assertTrue(routing.Solve()) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(15, assignment.ObjectiveValue()) def test_transit_callback(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -88,32 +113,30 @@ class TestRoutingModel(unittest.TestCase): transit_id = routing.RegisterTransitCallback(lambda from_index, to_indx: 1) self.assertEqual(1, transit_id) routing.SetArcCostEvaluatorOfAllVehicles(transit_id) - self.assertTrue(routing.Solve()) - - def test_pair(self): - p = pywrapcp.IntBoolPair(5, True) - if __debug__: - print(f"class IntBoolPair: {dir(p)}") - self.assertEqual(5, p[0]) - self.assertEqual(True, p[1]) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(5, assignment.ObjectiveValue()) def test_vector_dimension(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) self.assertIsNotNone(manager) routing = pywrapcp.RoutingModel(manager) self.assertIsNotNone(routing) - res = routing.AddVectorDimension( + transit_id, success = routing.AddVectorDimension( [i+1 for i in range(5)], 10, # capacity True, # fix_start_cumul_to_zero "DimensionName") - if __debug__: - print(f"class IntBoolPair: {dir(res)}") - print(f"result: {res}") - self.assertEqual(res[0], 1) - self.assertEqual(res[1], True) - routing.SetArcCostEvaluatorOfAllVehicles(res[0]) - self.assertTrue(routing.Solve()) + self.assertTrue(success) + self.assertEqual(transit_id, 1) + routing.SetArcCostEvaluatorOfAllVehicles(transit_id) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(16, assignment.ObjectiveValue()) def test_matrix_dimension(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -121,18 +144,19 @@ class TestRoutingModel(unittest.TestCase): routing = pywrapcp.RoutingModel(manager) self.assertIsNotNone(routing) matrix = [[i+1 for i in range(5)] for j in range(5)] - res = routing.AddMatrixDimension( + transit_id, success = routing.AddMatrixDimension( matrix, 10, # capacity True, # fix_start_cumul_to_zero "DimensionName") - if __debug__: - print(f"class IntBoolPair: {dir(res)}") - print(f"result: {res}") - self.assertEqual(res[0], 1) - self.assertEqual(res[1], True) - routing.SetArcCostEvaluatorOfAllVehicles(res[0]) - self.assertTrue(routing.Solve()) + self.assertTrue(success) + self.assertEqual(transit_id, 1) + routing.SetArcCostEvaluatorOfAllVehicles(transit_id) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(16, assignment.ObjectiveValue()) def test_matrix_dimension_2(self): manager = pywrapcp.RoutingIndexManager(5, 2, 0) @@ -140,15 +164,21 @@ class TestRoutingModel(unittest.TestCase): routing = pywrapcp.RoutingModel(manager) self.assertIsNotNone(routing) matrix = [[i+1 for i in range(5)] for j in range(5)] - routing.AddMatrixDimension( + transit_id, success = routing.AddMatrixDimension( matrix, 10, # capacity True, # fix_start_cumul_to_zero "DimensionName") - transit_id = routing.RegisterTransitMatrix(matrix) - self.assertEqual(2, transit_id) - routing.SetArcCostEvaluatorOfAllVehicles(transit_id) - self.assertTrue(routing.Solve()) + self.assertTrue(success) + self.assertEqual(transit_id, 1) + transit2_id = routing.RegisterTransitMatrix(matrix) + self.assertEqual(transit2_id, 2) + routing.SetArcCostEvaluatorOfAllVehicles(transit2_id) + self.assertEqual(routing.ROUTING_NOT_SOLVED, routing.status()) + assignment = routing.Solve() + self.assertEqual(routing.ROUTING_SUCCESS, routing.status()) + self.assertIsNotNone(assignment) + self.assertEqual(16, assignment.ObjectiveValue()) if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/ortools/constraint_solver/python/routing_index_manager.i b/ortools/constraint_solver/python/routing_index_manager.i index cad5842bab..0809d6e0ad 100644 --- a/ortools/constraint_solver/python/routing_index_manager.i +++ b/ortools/constraint_solver/python/routing_index_manager.i @@ -31,8 +31,8 @@ DEFINE_INDEX_TYPE_TYPEDEF(operations_research::RoutingNodeIndex, namespace operations_research { %unignore RoutingIndexManager; -%unignore RoutingIndexManager::GetStartIndex(int); -%unignore RoutingIndexManager::GetEndIndex(int); +%unignore RoutingIndexManager::GetStartIndex; +%unignore RoutingIndexManager::GetEndIndex; %unignore RoutingIndexManager::IndexToNode; %unignore RoutingIndexManager::NodeToIndex; %unignore RoutingIndexManager::RoutingIndexManager(