'''
unité de test
'''

import unittest
from polygone import *

class MyTest(unittest.TestCase):
    def test_clean(self):
        '''
        test de la fonction clean
        '''
        polygone = [(3, 0) , (9, -2), (4, -6), (4, -6), (9, -2), ( -1, -3), (0, 0), (3, 0) ]
        result = clean(polygone)
        expected = [(3, 0), (9, -2), (4, -6), (9, -2), ( -1, -3), (0, 0)]
        self.assertListEqual(result, expected)

    def test_vecteur(self):
        '''
        test de la fonction vecteur
        '''
        A = (2, 5)
        B = (3,10)
        result = vecteur(A, B)
        expected = (1, 5)
        self.assertEqual(result, expected)

    def test_product(self):
        '''
        test de la fonction product
        '''
        vAB = (4, 1)
        vAC = (2, 5)
        result = product(vAB, vAC)
        expected = 18
        self.assertEqual(result, expected)

        # on peut tester dans l'autre sens
        result = product(vAC, vAB)
        expected = -18
        self.assertEqual(result, expected)

    def test_side_gauche(self):
        '''
        premier test de la fonction get_side_of_AB
        C à gauche
        '''
        A = (1, 1)
        B = (11, 3)
        C = (3, 9)
        result = get_side_of_AB(A, B, C)
        expected = 1
        self.assertEqual(result, expected)

    def test_side_droite(self):
        '''
        2e test de la fonction get_side_of_AB
        C à droite
        '''
        A = (1, 1)
        B = (11, 3)
        C = (2, -5)
        result = get_side_of_AB(A, B, C)
        expected = -1
        self.assertEqual(result, expected)

    def test_side_sur(self):
        '''
        3e test de la fonction get_side_of_AB
        C sur (AB)
        '''
        A = (1, 1)
        B = (11, 3)
        C = (6, 2)
        result = get_side_of_AB(A, B, C)
        expected = 0
        self.assertEqual(result, expected)

    def test_is_convexe_oui(self):
        '''
        premier test de ma fonction is_convexe
        polygone convexe
        '''
        polygone = [(0,0), (5,1), (7,6), (3, 8), (-1,4)]
        result = is_convexe(polygone)
        self.assertTrue(result)

    def test_is_convexe_non(self):
        '''
        2e test de ma fonction is_convexe
        polygone non convexe
        '''
        polygone = [(0,0), (5,1), (7,6), (3, 4), (-1,4)]
        result = is_convexe(polygone)
        self.assertFalse(result)

    def test_is_convexe_pas_nettoyé(self):
        '''
        3e test de ma fonction is_convexe
        polygone convexe mais pas nettoyé
        '''
        polygone = [(0,0), (5,1), (7,6), (3, 8), (3,8), (-1,4), (0,0)]
        result = is_convexe(polygone)
        self.assertTrue(result)

    def test_aire_triangle(self):
        '''
        test de la fonction aire_triangle
        '''
        A = (0, 0)
        B = (7, 2)
        C = (3, 10)
        result = aire_triangle(A, B, C)
        expected = 32
        self.assertEqual(result, expected)

    def test_aire_polygone(self):
        '''
        test de la fonction aire_polygone
        '''
        polygone = [(0,0), (5,1), (7,6), (3, 8), (-1,4)]
        result = aire_polygone(polygone)
        expected = 40.5
        self.assertEqual(result, expected)

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