unit tests for numbers py import math import operator import unittest from numbers import complex real rational integral class testnumbersunittest testcase def testintself self asserttrueissubclassint integral self asserttrueissubclassint complex self assertequal7 int7 real self assertequal0 int7 imag self assertequal7 int7 conjugate self assertequal7 int7 conjugate self assertequal7 int7 numerator self assertequal1 int7 denominator def testfloatself self assertfalseissubclassfloat rational self asserttrueissubclassfloat real self assertequal7 3 float7 3 real self assertequal0 float7 3 imag self assertequal7 3 float7 3 conjugate self assertequal7 3 float7 3 conjugate def testcomplexself self assertfalseissubclasscomplex real self asserttrueissubclasscomplex complex c1 c2 complex3 2 complex4 1 xxx this is not ideal but see the comment in mathtrunc self assertraisestypeerror math trunc c1 self assertraisestypeerror operator mod c1 c2 self assertraisestypeerror divmod c1 c2 self assertraisestypeerror operator floordiv c1 c2 self assertraisestypeerror float c1 self assertraisestypeerror int c1 if name main unittest main xxx this is not ideal but see the comment in math_trunc
import math
import operator
import unittest
from numbers import Complex, Real, Rational, Integral

class TestNumbers(unittest.TestCase):
    def test_int(self):
        self.assertTrue(issubclass(int, Integral))
        self.assertTrue(issubclass(int, Complex))

        self.assertEqual(7, int(7).real)
        self.assertEqual(0, int(7).imag)
        self.assertEqual(7, int(7).conjugate())
        self.assertEqual(-7, int(-7).conjugate())
        self.assertEqual(7, int(7).numerator)
        self.assertEqual(1, int(7).denominator)

    def test_float(self):
        self.assertFalse(issubclass(float, Rational))
        self.assertTrue(issubclass(float, Real))

        self.assertEqual(7.3, float(7.3).real)
        self.assertEqual(0, float(7.3).imag)
        self.assertEqual(7.3, float(7.3).conjugate())
        self.assertEqual(-7.3, float(-7.3).conjugate())

    def test_complex(self):
        self.assertFalse(issubclass(complex, Real))
        self.assertTrue(issubclass(complex, Complex))

        c1, c2 = complex(3, 2), complex(4,1)
        
        self.assertRaises(TypeError, math.trunc, c1)
        self.assertRaises(TypeError, operator.mod, c1, c2)
        self.assertRaises(TypeError, divmod, c1, c2)
        self.assertRaises(TypeError, operator.floordiv, c1, c2)
        self.assertRaises(TypeError, float, c1)
        self.assertRaises(TypeError, int, c1)


if __name__ == "__main__":
    unittest.main()