def testEvaluateCondition(self): """ Test if evaluating conditions works properly for different combinations of types. """ # Some variables to use for tests. res_bufs = [[], [], [], []] def setter(i, value): res_bufs[i].append(value) def getter(i): return res_bufs[i][0] a = Quantity('5 T') b = Quantity('50 kG') c = 'on' res0 = Resource(getter=partial(getter,0), setter=partial(setter, 0)) res0.units = 'T' res1 = Resource(getter=partial(getter,1), setter=partial(setter, 1)) res1.units = 'kG' res2 = Resource(getter=partial(getter,2), setter=partial(setter, 2)) res2.allowed_values = ['on','off'] res0.value = a res1.value = b res2.value = c # Check 2 quantities of equivalent units. c1 = variables.Condition('quantity','quantity',a,'==',b) eq_(c1.evaluate(), True) # Check a resource against a quantity. c2 = variables.Condition('resource','quantity',res0,'==',a) eq_(c2.evaluate(), True) # Check a resource with a resource. c3 = variables.Condition('resource','resource',res0,'==',res1) eq_(c3.evaluate(), True) # Check a resource that has an allowed value with a string. c4 = variables.Condition('resource','string',res2,'==',c) eq_(c4.evaluate(), True) # Test evaluating resource names. resources = [('res0',res0),('res1',res1),('res2',res2)] c3 = variables.Condition('resource name','resource name','res0','==','res1') eq_(c3.evaluate(resources), True) # Check some things that should mess up. ## string instead of quantity. try: c5 = variables.Condition('resource','string',res0,'==','5 T') eq_(c5.evaluate(), True) except TypeError: pass else: assert False, 'Expected TypeError.' ## not matching units. try: c6 = variables.Condition('quantity','quantity',Quantity('5 A'),'==',Quantity('5 T')) eq_(c6.evaluate(), True) except IncompatibleDimensions: pass else: assert False, 'Expected IncompatibleDimensions error.'
def testEvaluateCondition(self): """ Test if evaluating conditions works properly for different combinations of types. """ # Some variables to use for tests. res_bufs = [[], [], [], []] def setter(i, value): res_bufs[i].append(value) def getter(i): return res_bufs[i][0] a = Quantity('5 T') b = Quantity('50 kG') c = 'on' res0 = Resource(getter=partial(getter, 0), setter=partial(setter, 0)) res0.units = 'T' res1 = Resource(getter=partial(getter, 1), setter=partial(setter, 1)) res1.units = 'kG' res2 = Resource(getter=partial(getter, 2), setter=partial(setter, 2)) res2.allowed_values = ['on', 'off'] res0.value = a res1.value = b res2.value = c # Check 2 quantities of equivalent units. c1 = variables.Condition('quantity', 'quantity', a, '==', b) eq_(c1.evaluate(), True) # Check a resource against a quantity. c2 = variables.Condition('resource', 'quantity', res0, '==', a) eq_(c2.evaluate(), True) # Check a resource with a resource. c3 = variables.Condition('resource', 'resource', res0, '==', res1) eq_(c3.evaluate(), True) # Check a resource that has an allowed value with a string. c4 = variables.Condition('resource', 'string', res2, '==', c) eq_(c4.evaluate(), True) # Test evaluating resource names. resources = [('res0', res0), ('res1', res1), ('res2', res2)] c3 = variables.Condition('resource name', 'resource name', 'res0', '==', 'res1') eq_(c3.evaluate(resources), True) # Check some things that should mess up. ## string instead of quantity. try: c5 = variables.Condition('resource', 'string', res0, '==', '5 T') eq_(c5.evaluate(), True) except TypeError: pass else: assert False, 'Expected TypeError.' ## not matching units. try: c6 = variables.Condition('quantity', 'quantity', Quantity('5 A'), '==', Quantity('5 T')) eq_(c6.evaluate(), True) except IncompatibleDimensions: pass else: assert False, 'Expected IncompatibleDimensions error.'