def test_2d_intersection_segment_have_partial_internal_overlap(self): seg1 = Segment2d(Point2d(1, 1), Point2d(3, 3)) seg2 = Segment2d(Point2d(2, 2), Point2d(4, 4)) do_intersect, ixs = seg1.intersect(seg2) self.assertTrue(do_intersect)
def test_2d_intersection_segments_have_full_overlap(self): seg1 = Segment2d(Point2d(1, 1), Point2d(3, 3)) seg2 = Segment2d(Point2d(3, 3), Point2d(1, 1)) self.assertTrue(seg1 == seg2) self.assertTrue(seg2 == seg1)
def test_command_add_update_generate_segments_correctly(self): parser = CmdParser() i11 = r'a "Weber Street" (2,-1) (2,2) (5,5) (5,6) (3,8)' i11points = [ Point2d(2, -1), Point2d(2, 2), Point2d(5, 5), Point2d(5, 6), Point2d(3, 8) ] i11segments = [ Segment2d(Point2d(2, -1), Point2d(2, 2)), Segment2d(Point2d(2, 2), Point2d(5, 5)), Segment2d(Point2d(5, 5), Point2d(5, 6)), Segment2d(Point2d(5, 6), Point2d(3, 8)) ] db = {} command = parser.parse(i11) command.execute(db) self.assertEqual(command.name, 'add street') self.assertEqual(db[command.street].name, 'Weber Street') self.assertItemsEqual(db[command.street].segments, i11segments)
def test_2d_intersection_segments_intersect_in_one_point(self): seg1 = Segment2d(Point2d(0, 0), Point2d(4, 4)) seg2 = Segment2d(Point2d(0, 4), Point2d(4, 0)) do_intersect, ixs = seg1.intersect(seg2) self.assertTrue(do_intersect) self.assertTrue(ixs == Point2d(2, 2))
def test_2d_segments_are_equal(self): seg1 = Segment2d(Point2d(1, 5), Point2d(2, 6)) seg2 = Segment2d(Point2d(1, 5), Point2d(2, 6)) seg3 = Segment2d(Point2d(2, 6), Point2d(1, 5)) self.assertTrue(seg1 == seg2) self.assertTrue(seg1 == seg3)
def test_2d_intersecting_segments_do_not_contain_endpoints(self): seg1 = Segment2d(Point2d(0, 0), Point2d(4, 4)) seg2 = Segment2d(Point2d(0, 4), Point2d(4, 0)) self.assertTrue(seg1.contains(seg1.ep1)) self.assertTrue(seg1.contains(seg1.ep2)) self.assertFalse(seg1.contains(seg2.ep1)) self.assertFalse(seg1.contains(seg2.ep2)) self.assertTrue(seg2.contains(seg2.ep1)) self.assertTrue(seg2.contains(seg2.ep2)) self.assertFalse(seg2.contains(seg1.ep1)) self.assertFalse(seg2.contains(seg1.ep2))
def test_uncontained_point_is_rejected(self): sep11 = Point2d(0, 2) sep12 = Point2d(3, 2) seg1 = Segment2d(sep11, sep12) sep21 = Point2d(4, 2) sep22 = Point2d(6, 2) seg2 = Segment2d(sep21, sep22) self.assertFalse(seg1.contains(seg2.ep1)) self.assertFalse(seg1.contains(seg2.ep2)) self.assertFalse(seg2.contains(seg1.ep1)) self.assertFalse(seg2.contains(seg1.ep2))
def test_contained_point_is_detected(self): sep11 = Point2d(0, 2) sep12 = Point2d(5, 2) seg1 = Segment2d(sep11, sep12) sep21 = Point2d(4, 2) sep22 = Point2d(7, 2) seg2 = Segment2d(sep21, sep22) self.assertTrue(seg1.contains(seg2.ep1)) self.assertFalse(seg1.contains(seg2.ep2)) self.assertFalse(seg2.contains(seg1.ep1)) self.assertTrue(seg2.contains(seg1.ep2))
def test_correct_input_addupdate_street_command_parses_successfully(self): """ Tests that valid input for the 'Add street' command is parsed correctly """ parser = CmdParser() i11 = r'a "Weber Street" (2,-1) (2,2) (5,5) (5,6) (3,8)' command = parser.parse(i11) i11segments = [ Segment2d(Point2d(2, -1), Point2d(2, 2)), Segment2d(Point2d(2, 2), Point2d(5, 5)), Segment2d(Point2d(5, 5), Point2d(5, 6)), Segment2d(Point2d(5, 6), Point2d(3, 8)) ] self.assertEqual(command.name, 'add street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual(self.db[command.street], command.points) i12 = r' a "Weber Street" (2,-1) (2,2) (5,5) (5,6) (3,8)' command = parser.parse(i12) self.assertEqual(command.name, 'add street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual(self.db[command.street], command.points) i13 = r' a "Weber Street" (2,-1) (2,2) (5,5) (5,6) (3,8) ' command = parser.parse(i13) self.assertEqual(command.name, 'add street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual(self.db[command.street], command.points) i21 = r'c "Weber Street" (4,2) (4,8)' command = parser.parse(i21) self.assertEqual(command.name, 'update street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual([Point2d(4, 2), Point2d(4, 8)], command.points) i22 = r' c "Weber Street" (4,2) (4,8)' command = parser.parse(i22) self.assertEqual(command.name, 'update street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual([Point2d(4, 2), Point2d(4, 8)], command.points) i23 = r' c "Weber Street" (4,2) (4,8) ' command = parser.parse(i23) self.assertEqual(command.name, 'update street') self.assertEqual(command.street, 'Weber Street') self.assertItemsEqual([Point2d(4, 2), Point2d(4, 8)], command.points)
def test_street_constructor_builds_correct_segments(self): points = [ Point2d(2, -1), Point2d(2, 2), Point2d(5, 5), Point2d(5, 6), Point2d(3, 8) ] segments = [ Segment2d(Point2d(2, -1), Point2d(2, 2)), Segment2d(Point2d(2, 2), Point2d(5, 5)), Segment2d(Point2d(5, 5), Point2d(5, 6)), Segment2d(Point2d(5, 6), Point2d(3, 8)) ] wstreet = Street("Weber Street", points) self.assertItemsEqual(wstreet.segments, segments)
def test_2d_segments_are_not_equal(self): seg1 = Segment2d(Point2d(0, 0), Point2d(4, 4)) seg2 = Segment2d(Point2d(0, 4), Point2d(4, 0)) self.assertFalse(seg1 == seg2)