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.'