def _test_is_undef(self,xxx): self.assertEqual( expressions.evaluate(xxx), expressions.undefined() ) self.assertEqual( str(xxx), 'undefined' ) self.assertEqual( xxx.evaluate(), expressions.undefined() ) self.assertEqual( str(xxx.evaluate()), 'undefined' ) self.assertFalse( xxx.is_def() ) self.assertEqual( xxx.name_or_value(), xxx.name() )
def test_more_reduce_undef_truthvals(self): a = expressions.Var('a') b = expressions.Var('b') self.assertEqual( undef_eq([a,1,b],[a,1,b]), True ) self.assertEqual( undef_eq([a,1,b],[a,a,b]), expressions.undefined() ) self.assertEqual( undef_eq([a,a,b],[b,b,b]), expressions.undefined() ) self.assertEqual( undef_eq([a,a,0],[b,b,1]), False ) self.assertEqual( undef_eq([a,1,1],[a,1,0]), False ) self.assertEqual( undef_eq([a,a,1],[a,1,0]), False )
def test_undef(self): p1 = Point() p1.x = 3 self.assertEqual( len(expressions.constraints()), 1 ) self.assertEqual( expressions.evaluate(p1.x), 3 ) self.assertEqual( expressions.evaluate(p1.x==3), True ) self.assertTrue( bool(p1.x==3) ) self.assertFalse( p1.y.is_def() ) self.assertEqual( p1==Point(3,3), expressions.undefined() ) self.assertEqual( p1==Point(0,0), False ) self.assertEqual( p1==Point(), expressions.undefined() )
def test_arr_circ(self): arr = Array(2,Circle,"circs") # arr.first.left = Point(0,Var()) # arr.last.right = Point(10,Var()) arr.first.left.x = 0 arr.last.right.x = 4 for a,b in arr.adj_objs(): a.right = b.left a.r = b.r self.assertEqual( arr[1].r, 1 ) self.assertFalse( arr[1].top.y.is_def() ) self.assertEqual( arr[1].top.y, expressions.undefined() )
def test_system(self): # Variables a = expressions.Var('a') b = expressions.Var('b') system = expressions.System() system2 = expressions.System() # Not necessary for real code, but test results expect this order self.assertTrue( hash(a) < hash(b) ) self.assertTrue( list({ a:2, b:1 }.keys())[0] is a ) # Check we can apply constraints, including duplicates system.constrain( b == a * 2 ) system.constrain( b == 2 * a ) system.constrain( -1 * b == 0 - (2 * a) ) system2.constrain( a == 1 ) self.assertEqual( system2.variables(), {a} ) self.assertEqual( system.variables(), {a,b} ) self.assertFalse( system.solved() ) self.assertEqual( system.evaluate(a), expressions.undefined() ) self.assertEqual( system.evaluate(b), expressions.undefined() ) # Check solution system.constrain( a == 3 ) self.assertTrue( system.solved() ) # Check results self.assertEqual( system.evaluate(a), 3 ) self.assertEqual( system.evaluate(b), 6 ) self.assertEqual( system.evaluate(2*b), 12 ) a == 2 system.constrain( b == a * 2 )
def test_null_evaluations(self): system = expressions.System() a = expressions.Var('a') b = expressions.Var('b') self.assertEqual( system.evaluate( 3) , 3 ) self.assertEqual( system.evaluate( 3*a +2 -2*a -a ) , 2 ) self.assertTrue( (a-a).is_null() ) self.assertFalse( (a+0).is_null() ) self.assertTrue( expressions.Expr(0).is_null() ) self.assertEqual( system.evaluate( a==b ), expressions.undefined() ) self.assertTrue( expressions.Equ( a, a ) ) self.assertTrue( expressions.Equ( a + b, b + a ) ) self.assertTrue( a == a ) self.assertTrue( a + b == b + a ) self.assertEqual( a, a ) self.assertEqual( a + b, b + a )
def test_reduce_undef_truthvals(self): a = expressions.Var('a') b = expressions.Var('b') self.assertEqual( True & expressions._Undefined() , expressions.undefined() ) self.assertEqual( False & expressions._Undefined(), False ) self.assertEqual( expressions._Undefined() & True, expressions.undefined() ) self.assertEqual( expressions._Undefined() & False, False) self.assertEqual( expressions._Undefined() & expressions._Undefined(), expressions.undefined() ) self.assertEqual( expressions._Undefined() & expressions._Undefined() & expressions._Undefined(), expressions.undefined() ) self.assertEqual( (a==a).evaluate(), True ) self.assertEqual( (a==b).evaluate(), expressions.undefined() ) self.assertEqual( (a-a==1).evaluate(), False ) self.assertEqual( (a==a) & (a==a), True ) self.assertEqual( (a==a) & (a==b), expressions.undefined() ) self.assertEqual( (a==a) & (a-a==1), False ) self.assertEqual(expressions._Undefined() & (a==b), expressions.undefined())