diff --git a/examples/tests/cp_model_test.py b/examples/tests/cp_model_test.py index ede12bd6d3..ab7281cbfe 100644 --- a/examples/tests/cp_model_test.py +++ b/examples/tests/cp_model_test.py @@ -4,6 +4,8 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function + +import unittest from ortools.sat import cp_model_pb2 from ortools.sat.python import cp_model from ortools.sat.python import cp_model_helper @@ -23,19 +25,7 @@ class SolutionCounter(cp_model.CpSolverSolutionCallback): return self.__solution_count -class CpModelTest(object): - def assertEqual(self, a, b): - if isinstance(a, cp_model.LinearExpr) and hasattr( - a.__class__, 'Index'): - if a.Index() != b.Index(): - print('Error: ' + repr(a) + ' != ' + repr(b) + '|' + - str(a.Index()) + " <-> " + str(b.Index())) - elif a != b: - print('Error: ' + str(a) + ' != ' + str(b)) - - def assertTrue(self, a, msg): - if not a: - print('Error:', msg) +class CpModelTest(unittest.TestCase): def testDomainFromValues(self): print('testDomainFromValues') @@ -595,51 +585,5 @@ class CpModelTest(object): if __name__ == '__main__': - cp_model_test = CpModelTest() - cp_model_test.testDomainFromValues() - cp_model_test.testDomainFromIntervals() - cp_model_test.testCreateIntegerVariable() - cp_model_test.testNegation() - cp_model_test.testLinear() - cp_model_test.testCstLeVar() - cp_model_test.testLinearNonEqual() - cp_model_test.testEq() - cp_model_test.testGe() - cp_model_test.testGt() - cp_model_test.testLe() - cp_model_test.testLt() - cp_model_test.testEqVar() - cp_model_test.testGeVar() - cp_model_test.testGtVar() - cp_model_test.testLeVar() - cp_model_test.testLtVar() - cp_model_test.testSimplification1() - cp_model_test.testSimplification2() - cp_model_test.testSimplification3() - cp_model_test.testSimplification4() - cp_model_test.testLinearNonEqualWithConstant() - cp_model_test.testLinearWithEnforcement() - cp_model_test.testNaturalApiMinimize() - cp_model_test.testNaturalApiMaximize() - cp_model_test.testSum() - cp_model_test.testAllDifferent() - cp_model_test.testMaxEquality() - cp_model_test.testMinEquality() - cp_model_test.testMinEqualityWithConstant() - cp_model_test.testAbs() - cp_model_test.testDivision() - cp_model_test.testModulo() - cp_model_test.testProdEquality() - cp_model_test.testBoolOr() - cp_model_test.testBoolAnd() - cp_model_test.testBoolXOr() - cp_model_test.testAssertIsInt64() - cp_model_test.testCapInt64() - cp_model_test.testCapSub() - cp_model_test.testGetOrMakeIndexFromConstant() - cp_model_test.testStr() - cp_model_test.testRepr() - cp_model_test.testDisplayBounds() - cp_model_test.testIntegerExpressionErrors() - cp_model_test.testLinearizedBoolAndEqual() - cp_model_test.testSequentialSolve() + unittest.main() + diff --git a/examples/tests/domain_test.py b/examples/tests/domain_test.py new file mode 100644 index 0000000000..4748ebfd94 --- /dev/null +++ b/examples/tests/domain_test.py @@ -0,0 +1,49 @@ +"""Tests for ortools.util.sorted_interval_list.py.""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function + +import unittest +from ortools.util import sorted_interval_list + + +class DomainTest(unittest.TestCase): + def testCtorAndGetter(self): + bool_domain = sorted_interval_list.Domain(0, 1) + self.assertEqual(2, bool_domain.Size()) + self.assertEqual(0, bool_domain.Min()) + self.assertEqual(1, bool_domain.Max()) + self.assertFalse(bool_domain.IsEmpty()) + self.assertEqual(str(bool_domain), '[0,1]') + + def testFromValues(self): + domain = sorted_interval_list.Domain.FromValues([1, 3, -5, 5]) + self.assertEqual(4, domain.Size()) + self.assertEqual(-5, domain.Min()) + self.assertEqual(5, domain.Max()) + self.assertEqual([-5, -5, 1, 1, 3, 3, 5, 5], domain.FlattenedIntervals()) + self.assertTrue(domain.Contains(1)) + self.assertFalse(domain.Contains(0)) + + def testFromIntervals(self): + domain = sorted_interval_list.Domain.FromIntervals([[2, 4], [-2, 0]]) + self.assertEqual(6, domain.Size()) + self.assertEqual(-2, domain.Min()) + self.assertEqual(4, domain.Max()) + self.assertEqual([-2, 0, 2, 4], domain.FlattenedIntervals()) + + def testFromFlatIntervals(self): + domain = sorted_interval_list.Domain.FromFlatIntervals([2, 4, -2, 0]) + self.assertEqual(6, domain.Size()) + self.assertEqual(-2, domain.Min()) + self.assertEqual(4, domain.Max()) + self.assertEqual([-2, 0, 2, 4], domain.FlattenedIntervals()) + + def testNegation(self): + domain = sorted_interval_list.Domain(5, 20) + self.assertEqual([-20, -5], domain.Negation().FlattenedIntervals()) + + +if __name__ == '__main__': + unittest.main() diff --git a/makefiles/Makefile.python.mk b/makefiles/Makefile.python.mk index 7cb57211c7..20d192f1ab 100755 --- a/makefiles/Makefile.python.mk +++ b/makefiles/Makefile.python.mk @@ -631,6 +631,7 @@ check_python_pimpl: \ test_python_tests: \ rpy_lp_test \ rpy_cp_model_test \ + rpy_domain_test \ rpy_test_cp_api \ rpy_test_routing_api \ rpy_test_lp_api diff --git a/ortools/sat/csharp/IntegerExpressions.cs b/ortools/sat/csharp/IntegerExpressions.cs index 026ca59001..b4a3e39b4c 100644 --- a/ortools/sat/csharp/IntegerExpressions.cs +++ b/ortools/sat/csharp/IntegerExpressions.cs @@ -22,14 +22,17 @@ namespace Google.OrTools.Sat // IntVar[] helper class. public static class IntVarArrayHelper { + [Obsolete("This Sum method is deprecated, please use LinearExpr.Sum() instead.")] public static LinearExpr Sum(this IntVar[] vars) { return LinearExpr.Sum(vars); } + [Obsolete("This ScalProd method is deprecated, please use LinearExpr.ScalProd() instead.")] public static LinearExpr ScalProd(this IntVar[] vars, int[] coeffs) { return LinearExpr.ScalProd(vars, coeffs); } + [Obsolete("This ScalProd method is deprecated, please use LinearExpr.ScalProd() instead.")] public static LinearExpr ScalProd(this IntVar[] vars, long[] coeffs) { return LinearExpr.ScalProd(vars, coeffs); diff --git a/ortools/util/csharp/sorted_interval_list.i b/ortools/util/csharp/sorted_interval_list.i index 696b6cf80e..e83e4cf4bf 100644 --- a/ortools/util/csharp/sorted_interval_list.i +++ b/ortools/util/csharp/sorted_interval_list.i @@ -43,18 +43,23 @@ JAGGED_MATRIX_AS_CSHARP_ARRAY(int64, int64, long, UtilInt64VectorVector); %unignore operations_research::Domain; %unignore operations_research::Domain::Domain; + +%unignore operations_research::Domain::AdditionWith; %unignore operations_research::Domain::AllValues; %unignore operations_research::Domain::Complement; %unignore operations_research::Domain::Contains; +%unignore operations_research::Domain::DebugString; %unignore operations_research::Domain::FlattenedIntervals; %unignore operations_research::Domain::FromFlatIntervals; %rename (FromIntervals) operations_research::Domain::FromVectorIntervals; %unignore operations_research::Domain::FromValues; +%unignore operations_research::Domain::IntersectionWith; %unignore operations_research::Domain::IsEmpty; %unignore operations_research::Domain::Max; %unignore operations_research::Domain::Min; %unignore operations_research::Domain::Negation; %unignore operations_research::Domain::Size; +%unignore operations_research::Domain::UnionWith; %include "ortools/util/sorted_interval_list.h" diff --git a/ortools/util/java/sorted_interval_list.i b/ortools/util/java/sorted_interval_list.i index 5baf9386ee..93ecfa2322 100644 --- a/ortools/util/java/sorted_interval_list.i +++ b/ortools/util/java/sorted_interval_list.i @@ -38,8 +38,12 @@ %rename (toString) operations_research::SortedDisjointIntervalList::DebugString; // Wrap the domain class here. +%unignore operations_research; + %unignore operations_research::Domain; %unignore operations_research::Domain::Domain; + +%rename (additionWith) operations_research::Domain::AdditionWith; %rename (allValues) operations_research::Domain::AllValues; %rename (complement) operations_research::Domain::Complement; %rename (contains) operations_research::Domain::Contains; @@ -47,11 +51,14 @@ %rename (fromFlatIntervals) operations_research::Domain::FromFlatIntervals; %rename (fromIntervals) operations_research::Domain::FromVectorIntervals; %rename (fromValues) operations_research::Domain::FromValues; +%rename (intersectionWith) operations_research::Domain::IntersectionWith; %rename (isEmpty) operations_research::Domain::IsEmpty; %rename (max) operations_research::Domain::Max; %rename (min) operations_research::Domain::Min; %rename (negation) operations_research::Domain::Negation; %rename (size) operations_research::Domain::Size; +%rename (toString) operations_research::Domain::DebugString; +%rename (unionWith) operations_research::Domain::UnionWith; %include "ortools/util/sorted_interval_list.h" %unignoreall diff --git a/ortools/util/python/sorted_interval_list.i b/ortools/util/python/sorted_interval_list.i index 921222b35b..ae1c99b5a7 100644 --- a/ortools/util/python/sorted_interval_list.i +++ b/ortools/util/python/sorted_interval_list.i @@ -25,8 +25,11 @@ %ignoreall %unignore operations_research; + %unignore operations_research::Domain; %unignore operations_research::Domain::Domain; + +%unignore operations_research::Domain::AdditionWith; %unignore operations_research::Domain::AllValues; %unignore operations_research::Domain::Complement; %unignore operations_research::Domain::Contains; @@ -34,12 +37,16 @@ %unignore operations_research::Domain::FromFlatIntervals; %rename (FromIntervals) operations_research::Domain::FromVectorIntervals; %unignore operations_research::Domain::FromValues; +%unignore operations_research::Domain::IntersectionWith; %unignore operations_research::Domain::IsEmpty; %unignore operations_research::Domain::Max; %unignore operations_research::Domain::Min; %unignore operations_research::Domain::Negation; %unignore operations_research::Domain::Size; +%rename (__str__) operations_research::Domain::ToString; +%unignore operations_research::Domain::UnionWith; %include "ortools/util/sorted_interval_list.h" -%unignoreall \ No newline at end of file +%unignoreall +