Beispiel #1
0
 def test_intersection_returns_zero_area_rectangle_when_rectangles_do_not_intersect(
         self):
     expected = Rectangle.from_array([0, 0, 0, 0])
     actual = Rectangle.from_array([1, 1, 2, 2]).intersection(
         Rectangle.from_array([5, 5, 6, 6]))
     self.failUnlessEqual(expected, actual)
     self.failUnlessEqual(actual.area(), 0)
Beispiel #2
0
 def test_intersect_test_returns_true_for_intersecting_rectangles(self):
     self.failUnless(
         Rectangle(Point(-1, -1), Point(2, 2)).intersects(
             Rectangle(Point(-2, -2), Point(1, 1))))
     self.failUnless(
         Rectangle(Point(-0.99, -0.99), Point(-2, -2)).intersects(
             Rectangle(Point(-1.01, -1.01), Point(1, 1))))
Beispiel #3
0
    def test_corners_and_dimensions_correctly_calculated(self):
        for corner1, corner2 in self.RECT_CORNER_TEST_CASES:
            # Arrange
            rect = Rectangle(corner1, corner2)

            x1 = min(corner1.x, corner2.x)
            x2 = max(corner1.x, corner2.x)
            y1 = min(corner1.y, corner2.y)
            y2 = max(corner1.y, corner2.y)
            width = x2 - x1
            height = y2 - y1

            # Check dimensions
            self.assertEquals(rect.width(), width)
            self.assertEquals(rect.height(), height)
            self.assertEquals(rect.area(), width * height)

            # Test that all corners are correct
            self.assertEqual(rect.top_left().x, x1)
            self.assertEquals(rect.top_left().y, y1)
            self.assertEquals(rect.bottom_left().x, x1)
            self.assertEquals(rect.bottom_left().y, y2)
            self.assertEquals(rect.top_right().x, x2)
            self.assertEquals(rect.top_right().y, y1)
            self.assertEquals(rect.bottom_right().x, x2)
            self.assertEquals(rect.bottom_right().y, y2)
Beispiel #4
0
 def test_corners_returns_a_list_of_valid_point_objects(self):
     corners = self.basic_rectangle.corners()
     # Test by creating using alternating corners to reconstruct the original Rectangle.
     self.failUnlessEqual(len(corners), 4)
     self.failUnlessEqual(self.basic_rectangle,
                          Rectangle(corners[0], corners[2]))
     self.failUnlessEqual(self.basic_rectangle,
                          Rectangle(corners[1], corners[3]))
Beispiel #5
0
 def test_intersection_creates_new_rectangle_with_correct_corners(self):
     expected = Rectangle.from_array([-1, -1, 2, 2])
     actual = Rectangle.from_array([-1, -1, 13, 8]).intersection(
         Rectangle.from_array([2, 2, -13, -7]))
     self.failUnlessEqual(expected, actual)
     actual = Rectangle.from_array([-1, 8, 13, -1]).intersection(
         Rectangle.from_array([2, -7, -13, 2]))
     self.failUnlessEqual(expected, actual)
Beispiel #6
0
 def test_conversion_to_integer(self):
     expected = Rectangle.from_array([1, 3, 4, 5])
     actual = Rectangle.from_array([1.4, 2.5, 3.7, 4.99]).intify()
     self.failUnlessEqual(expected, actual)
     self.failUnless(isinstance(actual.x1, int))
     self.failUnless(isinstance(actual.x2, int))
     self.failUnless(isinstance(actual.y1, int))
     self.failUnless(isinstance(actual.y2, int))
 def test_intersect_test_with_non_rectangle_object_throws_exception(self):
     self.assertRaises(TypeError,
                       Rectangle(Point(-1, -1), Point(-2, 1)).intersects,
                       5.6)
     self.assertRaises(TypeError,
                       Rectangle(Point(-1, -1), Point(-2, 1)).intersects,
                       "Hello World")
     self.assertRaises(TypeError,
                       Rectangle(Point(-1, -1), Point(-2, 1)).intersects,
                       Point(3, 4))
Beispiel #8
0
 def test_intersection_with_non_rectangle_object_throws_exception(self):
     self.failUnlessRaises(
         TypeError,
         Rectangle(Point(-1, -1), Point(-2, 1)).intersection, 5.6)
     self.failUnlessRaises(
         TypeError,
         Rectangle(Point(-1, -1), Point(-2, 1)).intersection, "Hello World")
     self.failUnlessRaises(
         TypeError,
         Rectangle(Point(-1, -1), Point(-2, 1)).intersection, Point(3, 4))
Beispiel #9
0
    def setUp(self):
        self.RECT_CORNER_TEST_CASES = [(Point(0, 0), Point(0, 0)),
                                       (Point(0, 0), Point(1, 1)),
                                       (Point(0, 0), Point(50, 20)),
                                       (Point(-22.4,
                                              -57.98), Point(-10, 154.3)),
                                       (Point(10, -11), Point(15, -20))]

        self.POINT_TEST_CASES = [Point(0, 0), Point(1, 1), Point()]
        self.basic_rectangle = Rectangle(Point(2, 3), Point(12, 16))
Beispiel #10
0
    def test_center_point_correctly_calculated(self):
        for corner1, corner2 in self.RECT_CORNER_TEST_CASES:
            # Arrange
            rect = Rectangle(corner1, corner2)

            center_x = (corner1.x + corner2.x) / 2.0
            center_y = (corner1.y + corner2.y) / 2.0

            self.assertAlmostEquals(rect.center().x, center_x)
            self.assertAlmostEquals(rect.center().y, center_y)
 def test_equality(self):
     self.assertTrue(
         Rectangle(Point(2, 3), Point(12, 16)) == self.basic_rectangle)
     self.assertFalse(
         Rectangle(Point(1, 3), Point(12, 16)) == self.basic_rectangle)
     self.assertFalse(
         Rectangle(Point(2, 1), Point(12, 16)) == self.basic_rectangle)
     self.assertFalse(
         Rectangle(Point(2, 3), Point(1, 16)) == self.basic_rectangle)
     self.assertFalse(
         Rectangle(Point(2, 3), Point(12, 1)) == self.basic_rectangle)
Beispiel #12
0
 def test_equality(self):
     self.failUnless(
         Rectangle(Point(2, 3), Point(12, 16)) == self.basic_rectangle)
     self.failIf(
         Rectangle(Point(1, 3), Point(12, 16)) == self.basic_rectangle)
     self.failIf(
         Rectangle(Point(2, 1), Point(12, 16)) == self.basic_rectangle)
     self.failIf(
         Rectangle(Point(2, 3), Point(1, 16)) == self.basic_rectangle)
     self.failIf(
         Rectangle(Point(2, 3), Point(12, 1)) == self.basic_rectangle)
 def test_conversion_to_integer(self):
     expected = Rectangle.from_array([1, 3, 4, 5])
     # rounding convention changed in python3 2.5 becomes 2 not 3
     # see:
     # https://docs.python.org/3/library/functions.html#round
     # https://stackoverflow.com/questions/21839140/python-3-rounding-behavior-in-python-2
     if sys.version_info[0] < 3:
         actual = Rectangle.from_array([1.4, 2.5, 3.7, 4.99]).intify()
     else:
         actual = Rectangle.from_array([1.4, 2.51, 3.7, 4.99]).intify()
     self.assertEqual(expected, actual)
     self.assertTrue(isinstance(actual.x1, int))
     self.assertTrue(isinstance(actual.x2, int))
     self.assertTrue(isinstance(actual.y1, int))
     self.assertTrue(isinstance(actual.y2, int))
Beispiel #14
0
 def test_scale_transform_returns_correct_result(self):
     rectangle = Rectangle(Point(-1, -1), Point(1, 1))
     self.failUnlessEqual(Rectangle(Point(-0.5, -0.5), Point(0.5, 0.5)),
                          rectangle.scale(0.5))
     self.failUnlessEqual(Rectangle(Point(-3, -3), Point(3, 3)),
                          rectangle.scale(3))
     self.failUnlessEqual(Rectangle(Point(3.5, 3.5), Point(-3.5, -3.5)),
                          rectangle.scale(-3.5))
Beispiel #15
0
class TestRectangle(TestCase):
    def setUp(self):
        self.RECT_CORNER_TEST_CASES = [(Point(0, 0), Point(0, 0)),
                                       (Point(0, 0), Point(1, 1)),
                                       (Point(0, 0), Point(50, 20)),
                                       (Point(-22.4,
                                              -57.98), Point(-10, 154.3)),
                                       (Point(10, -11), Point(15, -20))]

        self.POINT_TEST_CASES = [Point(0, 0), Point(1, 1), Point()]
        self.basic_rectangle = Rectangle(Point(2, 3), Point(12, 16))

    def test_init_with_negative_floats(self):
        rec = Rectangle(Point(-3, -0.54), Point(45, -26.78))
        self.failUnlessEqual([rec.x1, rec.x2, rec.y1, rec.y2],
                             [-3, 45, -26.78, -0.54])

    def test_create_rectangle_from_array(self):
        expected = Rectangle(Point(1, 2), Point(3, 4))
        actual = Rectangle.from_array([1, 2, 3, 4])
        self.failUnlessEqual(expected, actual)

    def test_creating_rectangle_from_array_with_incorrect_number_of_values_raises_exception(
            self):
        self.failUnlessRaises(ValueError, Rectangle.from_array, [1, 2, 3])
        self.failUnlessRaises(ValueError, Rectangle.from_array,
                              [1, 2, 3, 4, 5])
        self.failUnlessRaises(ValueError, Rectangle.from_array, [])

    def test_corners_always_sorted_in_ascending_order(self):
        rec = Rectangle(Point(45, -0.54), Point(-3, 26.78))
        self.failUnlessEqual([rec.x1, rec.x2, rec.y1, rec.y2],
                             [-3, 45, -0.54, 26.78])

    def test_zero_area_square_can_exist(self):
        rec = Rectangle(Point(0, 0), Point(0, 0))
        self.failUnlessEqual(0.0, rec.area())

    def test_string_representation_of_rectangle(self):
        self.failUnlessEqual(
            "Rectangle - (x1: 2.00, y1: 3.00); (x2: 12.00, y2: 16.00)",
            str(self.basic_rectangle))

    def test_corners_and_dimensions_correctly_calculated(self):
        for corner1, corner2 in self.RECT_CORNER_TEST_CASES:
            # Arrange
            rect = Rectangle(corner1, corner2)

            x1 = min(corner1.x, corner2.x)
            x2 = max(corner1.x, corner2.x)
            y1 = min(corner1.y, corner2.y)
            y2 = max(corner1.y, corner2.y)
            width = x2 - x1
            height = y2 - y1

            # Check dimensions
            self.assertEquals(rect.width(), width)
            self.assertEquals(rect.height(), height)
            self.assertEquals(rect.area(), width * height)

            # Test that all corners are correct
            self.assertEqual(rect.top_left().x, x1)
            self.assertEquals(rect.top_left().y, y1)
            self.assertEquals(rect.bottom_left().x, x1)
            self.assertEquals(rect.bottom_left().y, y2)
            self.assertEquals(rect.top_right().x, x2)
            self.assertEquals(rect.top_right().y, y1)
            self.assertEquals(rect.bottom_right().x, x2)
            self.assertEquals(rect.bottom_right().y, y2)

    def test_center_point_correctly_calculated(self):
        for corner1, corner2 in self.RECT_CORNER_TEST_CASES:
            # Arrange
            rect = Rectangle(corner1, corner2)

            center_x = (corner1.x + corner2.x) / 2.0
            center_y = (corner1.y + corner2.y) / 2.0

            self.assertAlmostEquals(rect.center().x, center_x)
            self.assertAlmostEquals(rect.center().y, center_y)

    def test_offset_transform_returns_correct_result(self):
        rectangle = Rectangle(Point(-1, -1), Point(1, 1))
        self.failUnlessEqual(Rectangle(Point(2, 3), Point(4, 5)),
                             rectangle.offset(Point(3, 4)))
        self.failUnlessEqual(Rectangle(Point(-3, -4), Point(-1, -2)),
                             rectangle.offset(Point(-2, -3)))

    def test_offset_transform_without_non_point_value_throws_exception(self):
        self.failUnlessRaises(TypeError, self.basic_rectangle.offset, (3, 5))

    def test_equality(self):
        self.failUnless(
            Rectangle(Point(2, 3), Point(12, 16)) == self.basic_rectangle)
        self.failIf(
            Rectangle(Point(1, 3), Point(12, 16)) == self.basic_rectangle)
        self.failIf(
            Rectangle(Point(2, 1), Point(12, 16)) == self.basic_rectangle)
        self.failIf(
            Rectangle(Point(2, 3), Point(1, 16)) == self.basic_rectangle)
        self.failIf(
            Rectangle(Point(2, 3), Point(12, 1)) == self.basic_rectangle)

    def test_equality_comparison_with_non_rectangle_value_returns_false(self):
        self.failIf(self.basic_rectangle.__eq__(4.5))
        self.failIf(self.basic_rectangle.__eq__(Point(3, 4)))
        self.failIf(self.basic_rectangle.__eq__("Hello world"))

    def test_scale_transform_returns_correct_result(self):
        rectangle = Rectangle(Point(-1, -1), Point(1, 1))
        self.failUnlessEqual(Rectangle(Point(-0.5, -0.5), Point(0.5, 0.5)),
                             rectangle.scale(0.5))
        self.failUnlessEqual(Rectangle(Point(-3, -3), Point(3, 3)),
                             rectangle.scale(3))
        self.failUnlessEqual(Rectangle(Point(3.5, 3.5), Point(-3.5, -3.5)),
                             rectangle.scale(-3.5))

    def test_intersect_test_returns_true_for_intersecting_rectangles(self):
        self.failUnless(
            Rectangle(Point(-1, -1), Point(2, 2)).intersects(
                Rectangle(Point(-2, -2), Point(1, 1))))
        self.failUnless(
            Rectangle(Point(-0.99, -0.99), Point(-2, -2)).intersects(
                Rectangle(Point(-1.01, -1.01), Point(1, 1))))

    def test_intersect_test_returns_true_for_rectangles_which_share_a_side(
            self):
        self.failUnless(
            Rectangle(Point(-1, -1), Point(-2, 1)).intersects(
                Rectangle(Point(-1, -1), Point(1, 1))))

    def test_intersect_test_returns_false_for_non_intersecting_rectangles(
            self):
        self.failIf(
            Rectangle(Point(-1.01, -1.01), Point(-2, -2)).intersects(
                Rectangle(Point(-0.99, -0.99), Point(1, 1))))

    def test_intersect_test_with_non_rectangle_object_throws_exception(self):
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersects, 5.6)
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersects, "Hello World")
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersects, Point(3, 4))

    def test_intersection_creates_new_rectangle_with_correct_corners(self):
        expected = Rectangle.from_array([-1, -1, 2, 2])
        actual = Rectangle.from_array([-1, -1, 13, 8]).intersection(
            Rectangle.from_array([2, 2, -13, -7]))
        self.failUnlessEqual(expected, actual)
        actual = Rectangle.from_array([-1, 8, 13, -1]).intersection(
            Rectangle.from_array([2, -7, -13, 2]))
        self.failUnlessEqual(expected, actual)

    def test_intersection_returns_zero_area_rectangle_when_rectangles_do_not_intersect(
            self):
        expected = Rectangle.from_array([0, 0, 0, 0])
        actual = Rectangle.from_array([1, 1, 2, 2]).intersection(
            Rectangle.from_array([5, 5, 6, 6]))
        self.failUnlessEqual(expected, actual)
        self.failUnlessEqual(actual.area(), 0)

    def test_intersection_with_non_rectangle_object_throws_exception(self):
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersection, 5.6)
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersection, "Hello World")
        self.failUnlessRaises(
            TypeError,
            Rectangle(Point(-1, -1), Point(-2, 1)).intersection, Point(3, 4))

    def test_corners_returns_a_list_of_valid_point_objects(self):
        corners = self.basic_rectangle.corners()
        # Test by creating using alternating corners to reconstruct the original Rectangle.
        self.failUnlessEqual(len(corners), 4)
        self.failUnlessEqual(self.basic_rectangle,
                             Rectangle(corners[0], corners[2]))
        self.failUnlessEqual(self.basic_rectangle,
                             Rectangle(corners[1], corners[3]))

    def test_conversion_to_integer(self):
        expected = Rectangle.from_array([1, 3, 4, 5])
        actual = Rectangle.from_array([1.4, 2.5, 3.7, 4.99]).intify()
        self.failUnlessEqual(expected, actual)
        self.failUnless(isinstance(actual.x1, int))
        self.failUnless(isinstance(actual.x2, int))
        self.failUnless(isinstance(actual.y1, int))
        self.failUnless(isinstance(actual.y2, int))

    def test_conversion_to_float(self):
        actual = Rectangle.from_array([1, 2, 3, 4]).floatify()
        self.failUnless(isinstance(actual.x1, float))
        self.failUnless(isinstance(actual.x2, float))
        self.failUnless(isinstance(actual.y1, float))
        self.failUnless(isinstance(actual.y2, float))

    def test_create_rectangle_from_centre(self):
        expected = Rectangle.from_array([-1, -1, 1, 1])
        actual = Rectangle.from_center(Point(0, 0), 2, 2)
        self.failUnlessEqual(expected, actual)

    def test_create_rectangle_from_corner(self):
        expected = Rectangle.from_array([-15, 22, 35, 95])
        actual = Rectangle.from_corner(Point(-15, 22), 50, 73)
        self.failUnlessEqual(expected, actual)

    def test_creating_rectangle_from_centre_with_invalid_type_raises_exception(
            self):
        self.failUnlessRaises(ValueError, Rectangle.from_center, "not_a_Point",
                              2, 2)
        self.failUnlessRaises(ValueError, Rectangle.from_center, 0.5, 2, 2)
        self.failUnlessRaises(ValueError, Rectangle.from_center, None, 2, 2)

    def test_creating_rectangle_from_corner_with_invalid_type_raises_exception(
            self):
        self.failUnlessRaises(ValueError, Rectangle.from_corner, "not_a_Point",
                              50, 73)
        self.failUnlessRaises(ValueError, Rectangle.from_corner, 0.5, 50, 73)
        self.failUnlessRaises(ValueError, Rectangle.from_corner, None, 50, 73)
Beispiel #16
0
 def test_zero_area_square_can_exist(self):
     rec = Rectangle(Point(0, 0), Point(0, 0))
     self.failUnlessEqual(0.0, rec.area())
Beispiel #17
0
 def test_corners_always_sorted_in_ascending_order(self):
     rec = Rectangle(Point(45, -0.54), Point(-3, 26.78))
     self.failUnlessEqual([rec.x1, rec.x2, rec.y1, rec.y2],
                          [-3, 45, -0.54, 26.78])
Beispiel #18
0
 def test_create_rectangle_from_array(self):
     expected = Rectangle(Point(1, 2), Point(3, 4))
     actual = Rectangle.from_array([1, 2, 3, 4])
     self.failUnlessEqual(expected, actual)
Beispiel #19
0
 def test_intersect_test_returns_true_for_rectangles_which_share_a_side(
         self):
     self.failUnless(
         Rectangle(Point(-1, -1), Point(-2, 1)).intersects(
             Rectangle(Point(-1, -1), Point(1, 1))))
Beispiel #20
0
 def test_create_rectangle_from_centre(self):
     expected = Rectangle.from_array([-1, -1, 1, 1])
     actual = Rectangle.from_center(Point(0, 0), 2, 2)
     self.failUnlessEqual(expected, actual)
Beispiel #21
0
 def test_init_with_negative_floats(self):
     rec = Rectangle(Point(-3, -0.54), Point(45, -26.78))
     self.failUnlessEqual([rec.x1, rec.x2, rec.y1, rec.y2],
                          [-3, 45, -26.78, -0.54])
Beispiel #22
0
 def test_create_rectangle_from_corner(self):
     expected = Rectangle.from_array([-15, 22, 35, 95])
     actual = Rectangle.from_corner(Point(-15, 22), 50, 73)
     self.failUnlessEqual(expected, actual)
Beispiel #23
0
 def test_offset_transform_returns_correct_result(self):
     rectangle = Rectangle(Point(-1, -1), Point(1, 1))
     self.failUnlessEqual(Rectangle(Point(2, 3), Point(4, 5)),
                          rectangle.offset(Point(3, 4)))
     self.failUnlessEqual(Rectangle(Point(-3, -4), Point(-1, -2)),
                          rectangle.offset(Point(-2, -3)))
Beispiel #24
0
 def test_intersect_test_returns_false_for_non_intersecting_rectangles(
         self):
     self.failIf(
         Rectangle(Point(-1.01, -1.01), Point(-2, -2)).intersects(
             Rectangle(Point(-0.99, -0.99), Point(1, 1))))
Beispiel #25
0
 def test_create_polygon_from_rectangle(self):
     rectangle = Rectangle(Point(1, 1), Point(4, 4))
     expected = Polygon(
         [Point(1, 1), Point(4, 1),
          Point(4, 4), Point(1, 4)])
     self.failUnlessEqual(expected, Polygon.from_rectangle(rectangle))
Beispiel #26
0
 def test_conversion_to_float(self):
     actual = Rectangle.from_array([1, 2, 3, 4]).floatify()
     self.failUnless(isinstance(actual.x1, float))
     self.failUnless(isinstance(actual.x2, float))
     self.failUnless(isinstance(actual.y1, float))
     self.failUnless(isinstance(actual.y2, float))