def test_solve2(self):
     p = Point2D(1, -1)
     p1 = Point2D(-5, -5)
     p2 = Point2D(5, 5)
     v = Vector2D(1, -1)
     sol = solve(p, p1, p2, v)
     self.assertFalse(sol['does_hit'], 'should not hit')
 def test_generate1(self):
     for i in range(250):
         g = generate(Point2D(-25, -25), Point2D(25, 25))
         p = g['pnt']
         p1 = g['pnt1']
         p2 = g['pnt2']
         v = g['vec']
         self.assertNotEqual(p1, p2, "Line is a point")
         self.assertNotEqual(p1.x, p2.x, "Simple line (x)")
         self.assertNotEqual(p1.y, p2.y, "Simple line (y)")
         self.assertTrue(solve(p, p1, p2, v)['does_hit'])
 def test_solve3(self):
     p = Point2D(12, 0)
     p1 = Point2D(11, 1)
     p2 = Point2D(11, -1)
     v = Vector2D(-1, -1)
     sol = solve(p, p1, p2, v)
     expected = (Fraction(1), Point2D(11, -1), Vector2D(1, -1))
     self.assertTrue(sol['does_hit'], 'should hit')
     self.assertEqual(
         sol['t_hit'], expected[0],
         "t_hit should be {0} but is {1}".format(expected[0], sol['t_hit']))
     self.assertEqual(
         sol['p_hit'], expected[1],
         "p_hit should be {0} but is {1}".format(expected[1], sol['p_hit']))
     self.assertEqual(
         sol['reflection'], expected[2],
         "reflection should be {0} but is {1}".format(
             expected[2], sol['reflection']))
 def test_solve5(self):
     p = Point2D(6, -3)
     p1 = Point2D(-10, -4)
     p2 = Point2D(4, -5)
     v = Vector2D(-5, -5)
     sol = solve(p, p1, p2, v)
     expected = (Fraction(2, 5), Point2D(4, -5),
                 Vector2D(Fraction(-835, 197), Fraction(1115, 197)))
     self.assertTrue(sol['does_hit'], 'should hit')
     self.assertEqual(
         sol['t_hit'], expected[0],
         "t_hit should be {0} but is {1}".format(expected[0], sol['t_hit']))
     self.assertEqual(
         sol['p_hit'], expected[1],
         "p_hit should be {0} but is {1}".format(expected[1], sol['p_hit']))
     self.assertEqual(
         sol['reflection'], expected[2],
         "reflection should be {0} but is {1}".format(
             expected[2], sol['reflection']))
 def test_solve1(self):
     p = Point2D(4, 2)
     p1 = Point2D(3, 8)
     p2 = Point2D(7, 6)
     v = Vector2D(1, 3)
     sol = solve(p, p1, p2, v)
     expected = (Fraction(11, 7), Point2D(Fraction(39, 7), Fraction(47, 7)),
                 Vector2D(Fraction(-9, 5), Fraction(-13, 5)))
     self.assertTrue(sol['does_hit'], 'should hit')
     self.assertEqual(
         sol['t_hit'], expected[0],
         "t_hit should be {0} but is {1}".format(expected[0], sol['t_hit']))
     self.assertEqual(
         sol['p_hit'], expected[1],
         "p_hit should be {0} but is {1}".format(expected[1], sol['p_hit']))
     self.assertEqual(
         sol['reflection'], expected[2],
         "reflection should be {0} but is {1}".format(
             expected[2], sol['reflection']))
 def test_solve6(self):
     p = Point2D(8, 5)
     p1 = Point2D(1, 5)
     p2 = Point2D(9, 0)
     v = Vector2D(-3, -1)
     sol = solve(p, p1, p2, v)
     expected = (Fraction(35,
                          23), Point2D(Fraction(79, 23), Fraction(80, 23)),
                 Vector2D(Fraction(-37, 89), Fraction(279, 89)))
     self.assertTrue(sol['does_hit'], 'should hit')
     self.assertEqual(
         sol['t_hit'], expected[0],
         "t_hit should be {0} but is {1}".format(expected[0], sol['t_hit']))
     self.assertEqual(
         sol['p_hit'], expected[1],
         "p_hit should be {0} but is {1}".format(expected[1], sol['p_hit']))
     self.assertEqual(
         sol['reflection'], expected[2],
         "reflection should be {0} but is {1}".format(
             expected[2], sol['reflection']))
 def test_solve4(self):
     p = Point2D(6, 13)
     p1 = Point2D(-4, 10)
     p2 = Point2D(5, -2)
     v = Vector2D(-2, -7)
     sol = solve(p, p1, p2, v)
     expected = (Fraction(49,
                          29), Point2D(Fraction(76, 29), Fraction(34, 29)),
                 Vector2D(Fraction(182, 25), Fraction(-1, 25)))
     self.assertTrue(sol['does_hit'], 'should hit')
     self.assertEqual(
         sol['t_hit'], expected[0],
         "t_hit should be {0} but is {1}".format(expected[0], sol['t_hit']))
     self.assertEqual(
         sol['p_hit'], expected[1],
         "p_hit should be {0} but is {1}".format(expected[1], sol['p_hit']))
     self.assertEqual(
         sol['reflection'], expected[2],
         "reflection should be {0} but is {1}".format(
             expected[2], sol['reflection']))