10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""Unit tests for numbers.py."""
20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport math
40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest
50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom numbers import Complex, Real, Rational, Integral
60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test import test_support
70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass TestNumbers(unittest.TestCase):
90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_int(self):
100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(int, Integral))
110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(int, Complex))
120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, int(7).real)
140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(0, int(7).imag)
150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, int(7).conjugate())
160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, int(7).numerator)
170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(1, int(7).denominator)
180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_long(self):
200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(long, Integral))
210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(long, Complex))
220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, long(7).real)
240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(0, long(7).imag)
250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, long(7).conjugate())
260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7, long(7).numerator)
270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(1, long(7).denominator)
280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_float(self):
300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(issubclass(float, Rational))
310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(float, Real))
320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7.3, float(7.3).real)
340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(0, float(7.3).imag)
350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertEqual(7.3, float(7.3).conjugate())
360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def test_complex(self):
380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertFalse(issubclass(complex, Real))
390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertTrue(issubclass(complex, Complex))
400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        c1, c2 = complex(3, 2), complex(4,1)
420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        # XXX: This is not ideal, but see the comment in math_trunc().
430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(AttributeError, math.trunc, c1)
440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, float, c1)
450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        self.assertRaises(TypeError, int, c1)
460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_main():
480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    test_support.run_unittest(TestNumbers)
490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == "__main__":
520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    unittest.main()
53