import unittest
import student
import course
import math
import point
import cat

class TestAugust6(unittest.TestCase):
    def test_total_credits(self):
        courses = []
        courses += [course.create('Underwater basket weaving', 'ART234', '12S', 1.0, 'A')]
        courses += [course.create('Computer Science for Engineers', 'CISC106', '11F', 3.0, 'A')]

        guybrush = student.create(
            700289374,
            'Guybrush Threepwood',
            'Piracy',
            '111-555-8763',
            courses)

        self.assertEqual(student.total_credits(guybrush), 4.0)

    def test_qaulity_points(self):
        course1 = course.create('Underwater basket weaving', 'ART234', '12S', 1.0, 'C')

        self.assertEqual(course.quality_points(course1), 2.0)

    def test_gpa(self):
        courses = []
        courses += [course.create('Underwater basket weaving', 'ART234', '12S', 1.0, 'A')]
        courses += [course.create('Computer Science for Engineers', 'CISC106', '11F', 3.0, 'A')]

        guybrush = student.create(
            700289374,
            'Guybrush Threepwood',
            'Piracy',
            '111-555-8763',
            courses)

        self.assertEqual(student.gpa(guybrush), 4.0)

    def test_add_course(self):
        courses = []
        courses += [course.create('Underwater basket weaving', 'ART234', '12S', 1.0, 'A')]
        courses += [course.create('Computer Science for Engineers', 'CISC106', '11F', 3.0, 'A')]

        guybrush = student.create(
            700289374,
            'Guybrush Threepwood',
            'Piracy',
            '111-555-8763',
            courses)
        
        new_course = course.create(
            'Ghost/Zombie Piracy',
            'PIR234',
            '12S',
            3.0,
            'C')

        courses2 = courses + [new_course]

        self.assertEqual(guybrush['courses'], courses)
        
        student.add_course(guybrush, new_course)

        self.assertEqual(guybrush['courses'], courses2)

    def test_distance_between(self):
        p1 = point.create(0, 0)
        p2 = point.create(1, 1)

        self.assertEqual(point.distance_between(p1, p2), math.sqrt(2))

    def test_talk(self):
        cat1 = cat.create('Cat', 4)
        cat2 = cat.create('Kitteh', 3)

        self.assertEqual(cat.talk(cat1), 'Cat the 4 legged cat says meow!')
        self.assertEqual(cat.talk(cat2), 'Kitteh the 3 legged cat says meow!')
        
if __name__ == '__main__':
    try:
        unittest.main()
    except SystemExit:
        pass
