def test_pow(self): # power should error for offest units and for non-integer powers x = _find_unit('m') y = _find_unit('degF') z = x**3 self.assertEqual(z, _find_unit('m**3')) x = z**(1.0 / 3.0) # checks inverse integer units self.assertEqual(x, _find_unit('m')) # test offset units: try: y**17 except TypeError as err: self.assertEqual(str(err), 'cannot exponentiate units with non-zero offset') else: self.fail('Expecting TypeError') # test non-integer powers try: x**1.2 except TypeError as err: self.assertEqual( str(err), 'Only integer and inverse integer exponents allowed') else: self.fail('Expecting TypeError') try: x**(5.0 / 2.0) except TypeError as err: self.assertEqual( str(err), 'Only integer and inverse integer exponents allowed') else: self.fail('Expecting TypeError')
def test_conversion_tuple_to(self): # test_conversion_tuple_to shoudl error when units have different power # lists w = _find_unit('cm') x = _find_unit('m') y = _find_unit('degF') z1 = _find_unit('degC') # check for non offset units self.assertEqual(w.conversion_tuple_to(x), (1 / 100.0, 0)) # check for offset units result = y.conversion_tuple_to(z1) self.assertAlmostEqual(result[0], 0.556, 3) self.assertAlmostEqual(result[1], -32.0, 3) # check for incompatible units try: x.conversion_tuple_to(z1) except TypeError as err: self.assertEqual(str(err), "Units 'm' and 'degC' are incompatible.") else: self.fail("Expecting TypeError")
def test_multiply(self): # multiplication should error for units with offsets x = _find_unit('g') y = _find_unit('s') z = _find_unit('degC') self.assertEqual( x * y, PhysicalUnit({ 's': 1, 'kg': 1 }, .001, _get_powers(mass=1, time=1), 0)) self.assertEqual( y * x, PhysicalUnit({ 's': 1, 'kg': 1 }, .001, _get_powers(mass=1, time=1), 0)) try: x * z except TypeError as err: self.assertEqual(str(err), "cannot multiply units with non-zero offset") else: self.fail("Expecting TypeError")
def test_division(self): # division should error when working with offset units w = _find_unit('kg') x = _find_unit('g') y = _find_unit('s') z = _find_unit('degC') quo = w / x quo2 = x / y self.assertEqual(quo, PhysicalUnit({'kg': 1, 'g': -1}, 1000.0, _get_powers(), 0)) self.assertEqual(quo2, PhysicalUnit({'s': -1, 'g': 1}, 0.001, _get_powers(mass=1, time=-1), 0)) quo = y / 2.0 self.assertEqual(quo, PhysicalUnit({'s': 1, "2.0": -1}, .5, _get_powers(time=1), 0)) quo = 2.0 / y self.assertEqual(quo, PhysicalUnit({'s': -1, "2.0": 1}, 2, _get_powers(time=-1), 0)) try: x / z except TypeError as err: self.assertEqual( str(err), "Can't divide units: either 'g' or 'degC' has a non-zero offset.") else: self.fail("Expecting TypeError")
def test_pow(self): # power should error for offest units and for non-integer powers x = _find_unit('m') y = _find_unit('degF') z = x**3 self.assertEqual(z, _find_unit('m**3')) x = z**(1.0 / 3.0) # checks inverse integer units self.assertEqual(x, _find_unit('m')) # test offset units: try: y**17 except TypeError as err: self.assertEqual( str(err), 'cannot exponentiate units with non-zero offset') else: self.fail('Expecting TypeError') # test non-integer powers try: x**1.2 except TypeError as err: self.assertEqual( str(err), 'Only integer and inverse integer exponents allowed') else: self.fail('Expecting TypeError') try: x**(5.0 / 2.0) except TypeError as err: self.assertEqual( str(err), 'Only integer and inverse integer exponents allowed') else: self.fail('Expecting TypeError')
def test_division(self): # division should error when working with offset units w = _find_unit('kg') x = _find_unit('g') y = _find_unit('s') z = _find_unit('degC') quo = w / x quo2 = x / y self.assertEqual(quo, PhysicalUnit({'kg': 1, 'g': -1}, 1000.0, _get_powers(), 0)) self.assertEqual(quo2, PhysicalUnit({'s': -1, 'g': 1}, 0.001, _get_powers(mass=1, time=-1), 0)) quo = y / 2.0 self.assertEqual(quo, PhysicalUnit({'s': 1, "2.0": -1}, .5, _get_powers(time=1), 0)) quo = 2.0 / y self.assertEqual(quo, PhysicalUnit({'s': -1, "2.0": 1}, 2, _get_powers(time=-1), 0)) try: x / z except TypeError as err: self.assertEqual( str(err), "cannot divide units with non-zero offset") else: self.fail("Expecting TypeError")
def test_name(self): # name should return a mathematically correct representation of the # unit x1 = _find_unit('m') x2 = _find_unit('kg') y = 1 / x1 self.assertEqual(y.name(), '1/m') y = 1 / x1 / x1 self.assertEqual(y.name(), '1/m**2') y = x1**2 self.assertEqual(y.name(), 'm**2') y = x2 / (x1**2) self.assertEqual(y.name(), 'kg/m**2')
def test_cmp(self): # should error for incompatible units, if they are compatible then it # should cmp on their factors x = _find_unit('d') y = _find_unit('s') z = _find_unit('ft') self.assertTrue(x > y) self.assertEqual(x, x) self.assertTrue(y < x) try: x < z except TypeError as err: self.assertEqual(str(err), "Incompatible units") else: self.fail("Expecting TypeError")
def test_repr_str(self): # __repr__should return a string which could be used to contruct the # unit instance, __str__ should return a string with just the unit # name for str u = _find_unit('d') self.assertEqual(repr(u), "PhysicalUnit({'d': 1},86400.0,%s,0.0)" % _get_powers(time=1)) self.assertEqual(str(u), "<PhysicalUnit d>")
def test_multiply(self): # multiplication should error for units with offsets x = _find_unit('g') y = _find_unit('s') z = _find_unit('degC') self.assertEqual(x * y, PhysicalUnit({'s': 1, 'kg': 1}, .001, _get_powers(mass=1, time=1), 0)) self.assertEqual(y * x, PhysicalUnit({'s': 1, 'kg': 1}, .001, _get_powers(mass=1, time=1), 0)) try: x * z except TypeError as err: self.assertEqual( str(err), "cannot multiply units with non-zero offset") else: self.fail("Expecting TypeError")
def test_conversion_tuple_to(self): # test_conversion_tuple_to shoudl error when units have different power # lists w = _find_unit('cm') x = _find_unit('m') y = _find_unit('degF') z1 = _find_unit('degC') # check for non offset units self.assertEqual(w.conversion_tuple_to(x), (1 / 100.0, 0)) # check for offset units result = y.conversion_tuple_to(z1) self.assertAlmostEqual(result[0], 0.556, 3) self.assertAlmostEqual(result[1], -32.0, 3) # check for incompatible units try: x.conversion_tuple_to(z1) except TypeError as err: self.assertEqual(str(err), "Incompatible units") else: self.fail("Expecting TypeError")