# -*- coding: iso-8859-1 -*-
from __future__ import division # 1/2 == .5 (par defaut, 1/2 == 0)

from customtest import *



class TestGeolibVecteurs(CustomTest):

    def setUp(self):
        pass

    def test_Vecteur(self):
        A=Point(1,2)
        B=Point(2,4)
        v=Vecteur(A, B)
        self.assert_(isinstance(v.etiquette, Label_vecteur))
        self.assert_(v.x == 1 and v.y == 2)
        self.assertEqual(v.norme,  math.sqrt(5))
        self.assertEqual(type(v.coordonnees),  tuple)
        # Test du typage dynamique :
        self.assert_(isinstance(Vecteur(1, 3), Vecteur_libre))
        self.assert_(Vecteur(1, 3).coordonnees == (1, 3))



    def test_Vecteur_libre(self):
        u = Vecteur_libre(1, -2)
        u.y = -3
        self.assertEqual(u.norme,  math.sqrt(10))
        self.assertEqual(type(u.coordonnees),  tuple)


    def test_Representant(self):
        A=Point(1,2)
        B=Point(2,4)
        v=Vecteur(A, B)
        w = Representant(v,  B)
        self.assert_(w.x == v.x and w.y == v.y and w.z == v.z)
        self.assert_(w.origine == v.point2)
        self.assertEqual(type(w.coordonnees),  tuple)
        self.assertAlmostEqual(w.extremite.coordonnees, (3, 6))
        self.assert_(w._hierarchie < w.extremite._hierarchie < w._hierarchie + 1)

    def test_Vecteur_unitaire(self):
        u = Vecteur_unitaire(Vecteur_libre(random(), random()))
        self.assertAlmostEqual(u.norme,  1)
        self.assertEqual(type(u.coordonnees),  tuple)

    def test_Somme_vecteurs(self):
        A=Point(1,2)
        B=Point(2,4)
        v=Vecteur(A, B)
        w=Vecteur_libre(-4, 5)
        u=Representant(v, Point(1, 2))
        vec = 2*u+1*v
        vec -= 5*w
        self.assert_(tuple(vec.coordonnees) == (23, -19))
        self.assertEqual(type(vec.coordonnees),  tuple)
        self.assertEqual(vec.coordonnees,  Somme_vecteurs((u, v, w), (2, 1, -5)).coordonnees)




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