Esempio n. 1
0
 def test_sqrt235(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3) + sqrt(5)
     r2 = r * r
     r4 = r2 * r2
     r6 = r2 * r4
     r8 = r2 * r6
     self.assertTrue(r > 0)
     self.assertEqual(r8 - 40 * r6 + 352 * r4 - 960 * r2 + 576, 0)
Esempio n. 2
0
 def test_sqrt235(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3) + sqrt(5)
     r2 = r*r
     r4 = r2*r2
     r6 = r2*r4
     r8 = r2*r6
     self.assertTrue(r > 0)
     self.assertEqual(r8 - 40*r6 + 352*r4 - 960*r2 + 576, 0)
Esempio n. 3
0
 def test_sqrt2(self):
     from constructible import sqrt
     r = sqrt(2)
     two = r*r
     self.assertEqual(two, 2)
     s = two._try_sqrt()
     self.assertEqual(r, s)
Esempio n. 4
0
    def test_comparison_Qsqrt2(self):
        ''' test comparison operators on instances of Q[sqrt(2)] '''
        from constructible import sqrt
        from operator import eq, ne, gt, lt, ge, le

        s = sqrt(2)
        t = 3 - 2 * s
        u = s - s
        v = -t

        self.assertTrue(s.field == t.field == u.field == v.field,
                        "Precondition")

        # numbers is sorted ascending, so the comarison of numbers and therir indices must be same
        numbers = [v, u, t, s]

        self.assertTrue(s.field == t.field == u.field == v.field,
                        "Precondition")

        for op in (eq, ne, gt, lt, ge, le):
            with self.subTest(op=op):
                for i, a in enumerate(numbers):
                    for j, b in enumerate(numbers):
                        result = op(a, b)
                        self.assertEqual(result, op(i, j))
                        self.assertIsInstance(result, bool)
Esempio n. 5
0
 def test_sqrt2(self):
     from constructible import sqrt
     r = sqrt(2)
     two = r * r
     self.assertEqual(two, 2)
     s = two._try_sqrt()
     self.assertEqual(r, s)
Esempio n. 6
0
 def test_sqrt_2(self):
     from constructible import sqrt
     r = sqrt(2)
     self.assertEqual(r.a, 0)
     self.assertEqual(r.b, 1)
     self.assertEqual(len(r.field), 2)
     self.assertEqual(r.field[0], 2)
     self.assertEqual(str(r), 'sqrt(2)')
     self.assertTrue(r > 0)
Esempio n. 7
0
 def test_sqrt_2(self):
     from constructible import sqrt
     r = sqrt(2)
     self.assertEqual(r.a, 0)
     self.assertEqual(r.b, 1)
     self.assertEqual(len(r.field), 2)
     self.assertEqual(r.field[0], 2)
     self.assertEqual(str(r), 'sqrt(2)')
     self.assertTrue(r > 0)
Esempio n. 8
0
 def test_equal(self):
     '''
     hash of multiple representations of the same value must be equal
     '''
     from constructible import sqrt
     from fractions import Fraction as F
     
     for a,b in [(sqrt(2), 2/sqrt(2)),
                 (sqrt(2), 1/sqrt(F(1,2))),
                 (sqrt(2) + sqrt(3), sqrt(3) + sqrt(2))]:
         with self.subTest(a=a, b=b):
             self.assertEqual(a,b, 'precondition for this test')
             self.assertEqual(hash(a), hash(b), '%s == %s, but hash is different' % (a,b))
Esempio n. 9
0
    def test_equal(self):
        '''
        hash of multiple representations of the same value must be equal
        '''
        from constructible import sqrt
        from fractions import Fraction as F

        for a, b in [(sqrt(2), 2 / sqrt(2)), (sqrt(2), 1 / sqrt(F(1, 2))),
                     (sqrt(2) + sqrt(3), sqrt(3) + sqrt(2))]:
            with self.subTest(a=a, b=b):
                self.assertEqual(a, b, 'precondition for this test')
                self.assertEqual(hash(a), hash(b),
                                 '%s == %s, but hash is different' % (a, b))
Esempio n. 10
0
 def test_roots(self):
     from constructible import sqrt
     r = sqrt(17)
     u = sqrt(2 * (17 - r))
     v = sqrt(2 * (17 + r))
     cos = (-1 + r + u + 2*sqrt(17 + 3*r - u - 2*v)) / 16
     sin = sqrt(1 - cos*cos)
     
     s_i = 0
     c_i = 1
     
     for i in range(17):
         s = sin * c_i + cos * s_i
         c = cos * c_i - sin * s_i
         self.assertEqual(s*s + c*c, 1, "radius not equal to 1 at i=%d" % i)
         s_i = s
         c_i = c
     
     self.assertEqual(s_i, 0)
     self.assertEqual(c_i, 1)
Esempio n. 11
0
    def test_roots(self):
        from constructible import sqrt
        r = sqrt(17)
        u = sqrt(2 * (17 - r))
        v = sqrt(2 * (17 + r))
        cos = (-1 + r + u + 2 * sqrt(17 + 3 * r - u - 2 * v)) / 16
        sin = sqrt(1 - cos * cos)

        s_i = 0
        c_i = 1

        for i in range(17):
            s = sin * c_i + cos * s_i
            c = cos * c_i - sin * s_i
            self.assertEqual(s * s + c * c, 1,
                             "radius not equal to 1 at i=%d" % i)
            s_i = s
            c_i = c

        self.assertEqual(s_i, 0)
        self.assertEqual(c_i, 1)
Esempio n. 12
0
 def test_expressions_type(self):
     from constructible import sqrt, Constructible
     s = sqrt(2)
     self.assertIsInstance(s, Constructible)
     self.assertIsInstance(2 * s, Constructible)
     self.assertIsInstance(2 - s, Constructible)
     t = 3 - 2 * s
     self.assertIsInstance(t, Constructible)
     u = s - s
     self.assertIsInstance(u, Constructible)
     v = -t
     self.assertIsInstance(v, Constructible)
Esempio n. 13
0
 def test_expressions_type(self):
     from constructible import sqrt, Constructible
     s = sqrt(2)
     self.assertIsInstance(s, Constructible)
     self.assertIsInstance(2 * s, Constructible)
     self.assertIsInstance(2 - s, Constructible)
     t = 3 - 2 * s
     self.assertIsInstance(t, Constructible)
     u = s - s
     self.assertIsInstance(u, Constructible)
     v = -t
     self.assertIsInstance(v, Constructible)
Esempio n. 14
0
    def test_degree(self):
        ''' test that `a.minpoly()` has a certain degree '''
        from constructible import sqrt, Constructible
        from fractions import Fraction as F

        def deg(num):
            assert isinstance(num, Constructible)
            value = 0
            while num.field:
                if num.b != 0:
                    value += 1
                num = num.a
            return 2**value

        for a in [
                sqrt(2), 2 / sqrt(5), 1 / sqrt(F(1, 2)),
                sqrt(2) + sqrt(3), (sqrt(3) + sqrt(2)) - sqrt(3)
        ]:
            with self.subTest(a=a):
                self.assertEqual(
                    len(a.minpoly()) - 1, deg(a),
                    'minpoly of %s has the wrong degree' % (a, ))
Esempio n. 15
0
    def test_substitution(self):
        ''' test that `a` substituted to `a.minpoly()` gives 0 '''
        from constructible import sqrt
        from fractions import Fraction as F

        def eval(poly, arg):
            value = 0
            for coef in reversed(poly):
                value = coef + value * arg
            return value

        for a in [
                sqrt(2), 2 / sqrt(5), 1 / sqrt(F(1, 2)),
                sqrt(2) + sqrt(3),
                sqrt(3) + sqrt(2)
        ]:
            with self.subTest(a=a):
                self.assertEqual(eval(a.minpoly(), a), 0,
                                 '%s is not a root of its minpoly' % (a, ))
Esempio n. 16
0
    def test_comparison_Qsqrt2(self):
        ''' test comparison operators on instances of Q[sqrt(2)] '''
        from constructible import sqrt
        from operator import eq, ne, gt, lt, ge, le

        s = sqrt(2)
        t = 3 - 2 * s
        u = s - s
        v = -t

        self.assertTrue(s.field == t.field == u.field == v.field, "Precondition")

        # numbers is sorted ascending, so the comarison of numbers and therir indices must be same
        numbers = [v, u, t, s]

        self.assertTrue(s.field == t.field == u.field == v.field, "Precondition")

        for op in (eq, ne, gt, lt, ge, le):
            with self.subTest(op=op):
                for i, a in enumerate(numbers):
                    for j, b in enumerate(numbers):
                        result = op(a, b)
                        self.assertEqual(result, op(i, j))
                        self.assertIsInstance(result, bool)
Esempio n. 17
0
 def test_sqrt_square(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3) + sqrt(5)
     self.assertEqual(sqrt(r * r), r)
Esempio n. 18
0
 def test_sqrt623(self):
     from constructible import sqrt
     r = sqrt(6) / sqrt(3)
     self.assertTrue(r > 0)
     self.assertEqual(r, sqrt(2))
Esempio n. 19
0
 def test_sqrt23(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3)
     self.assertTrue(r > 0)
     self.assertEqual(r * r * r * r - 10 * r * r + 1, 0)
Esempio n. 20
0
 def test_double_sqrt(self):
     from constructible import sqrt
     r = sqrt(2)
     s = sqrt(r)
     self.assertEqual(str(s), 'sqrt(sqrt(2))')
Esempio n. 21
0
 def test_double_sqrt(self):
     from constructible import sqrt
     r = sqrt(2)
     s = sqrt(r)
     self.assertEqual(str(s), 'sqrt(sqrt(2))')
Esempio n. 22
0
 def test_sqrt23(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3)
     self.assertTrue(r > 0)
     self.assertEqual(r*r*r*r - 10*r*r + 1, 0)
Esempio n. 23
0
 def test_sqrt623(self):
     from constructible import sqrt
     r = sqrt(6) / sqrt(3)
     self.assertTrue(r > 0)
     self.assertEqual(r, sqrt(2))
Esempio n. 24
0
 def test_sqrt_square(self):
     from constructible import sqrt
     r = sqrt(2) + sqrt(3) + sqrt(5)
     self.assertEqual(sqrt(r*r), r)