def test_eq_between_classes(self):
        class Vec7(CoordinateVector):
            @classmethod
            def dimension(cls):
                return 7

            @classmethod
            def zero(cls):
                coords = tuple(0 for _ in range(0, cls.dimension()))
                return Vec7(*coords)

        self.assertFalse(Vec6(1, 2, 3, 4, 5, 6) == Vec7(1, 2, 3, 4, 5, 6, 7))
        self.assertFalse(Vec7(1, 2, 3, 4, 5, 6, 7) == Vec6(1, 2, 3, 4, 5, 6))
    def test_add_incompatible_subclasses(self):
        def random_vec2():
            return Vec2(self.random_scalar(), self.random_scalar())

        with self.assertRaises(TypeError, msg='should raise TypeError when not compatible subclasses'):        
            u = Vec6(*self.random_coordinates(6))
            v = random_vec2()
            u + v
    def test_mult_incompatible_types(self):
        class A():
            def sayHello(self):
                return 'hello'

        with self.assertRaises(TypeError, msg='should raise TypeError when not compatible class'):        
            u = Vec6(*self.random_coordinates(6))
            v = A()
            u + v
    def test_add_between_classes_2(self):
        class Vec7(CoordinateVector):
            @classmethod
            def dimension(cls):
                return 7

            @classmethod
            def zero(cls):
                coords = tuple(0 for _ in range(0, cls.dimension()))
                return Vec7(*coords)

        with self.assertRaises(TypeError, msg='should raise TypeError when not compatible class'):        
            Vec7(1, 2, 3, 4, 5, 6, 7) + Vec6(1, 2, 3, 4, 5, 6)
 def test_scalar_rmult_args(self):
     with self.assertRaises(TypeError, msg='should raise TypeError when passing numeric scalar'):
         u = Vec6(*self.random_coordinates(6))
         s = 'a'
         s * u
 def test_negate_vector(self):
     self.assertEqual(-Vec6(-1, 2, -3, 4, -5, 6), Vec6(1, -2, 3, -4, 5, -6))
 def test_zero_vector(self):
     self.assertEqual(Vec6.zero(), Vec6(0, 0, 0, 0, 0, 0))
 def test_vector6d_is_vector_space(self):
     for _ in range(0, 100):
         a, b = self.random_scalar(), self.random_scalar()
         u, v, w = Vec6(*self.random_coordinates(6)), Vec6(*self.random_coordinates(6)), Vec6(*self.random_coordinates(6))
         self.check_vector_space_rules(self.approx_equal, a, b, u, v, w)
 def test_sub_incompatible_types(self):
     with self.assertRaises(TypeError, msg='should raise TypeError when not compatible class'):        
         u = Vec6(*self.random_coordinates(6))
         v = 'v'
         u - v
 def test_scalar_division(self):
     self.approx_equal(Vec6(1, -2, 3, -4, 5.1, pi) / 3.25, Vec6(1 / 3.25, -2 / 3.25, 3 / 3.25, -4 / 3.25, 5.1 / 3.25, pi / 3.25))