#!/usr/bin/python3 import point import linesegment def test_init(): """Test init routine""" line_seg = linesegment.LineSegment() assert line_seg.get_startpoint().get_x() == 0 assert line_seg.get_startpoint().get_y() == 0 assert line_seg.get_endpoint().get_x() == 0 assert line_seg.get_endpoint().get_y() == 0 line_seg = linesegment.LineSegment( \ point.Point(10,20), point.Point(40,30)) assert line_seg.get_startpoint().get_x() == 10 assert line_seg.get_startpoint().get_y() == 20 assert line_seg.get_endpoint().get_x() == 40 assert line_seg.get_endpoint().get_y() == 30 def test_set_and_get_endpoints(): """Test setting and changing the endpoints""" line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(40, 30)) assert line_seg.get_startpoint() == point.Point(10, 20) assert line_seg.get_endpoint() == point.Point(40, 30) assert line_seg[0] == point.Point(10, 20) assert line_seg[1] == point.Point(40, 30) assert line_seg.get_min_x() == 10 assert line_seg.get_min_y() == 20 assert line_seg.get_max_x() == 40 assert line_seg.get_max_y() == 30 assert str(line_seg) == "(10/20)-->(40/30)" line_seg.set_startpoint(point.Point(60, 70)) assert line_seg.get_startpoint() == point.Point(60, 70) assert line_seg.get_endpoint() == point.Point(40, 30) assert line_seg[0] == point.Point(60, 70) assert line_seg[1] == point.Point(40, 30) assert line_seg.get_min_x() == 40 assert line_seg.get_min_y() == 30 assert line_seg.get_max_x() == 60 assert line_seg.get_max_y() == 70 assert str(line_seg) == "(60/70)-->(40/30)" line_seg.set_endpoint(point.Point(90, 20)) assert line_seg.get_startpoint() == point.Point(60, 70) assert line_seg.get_endpoint() == point.Point(90, 20) assert line_seg[0] == point.Point(60, 70) assert line_seg[1] == point.Point(90, 20) assert line_seg.get_min_x() == 60 assert line_seg.get_min_y() == 20 assert line_seg.get_max_x() == 90 assert line_seg.get_max_y() == 70 assert str(line_seg) == "(60/70)-->(90/20)" line_seg[0] = point.Point(30, 40) line_seg[1] = point.Point(60, 10) assert line_seg.get_startpoint() == point.Point(30, 40) assert line_seg.get_endpoint() == point.Point(60, 10) assert line_seg[0] == point.Point(30, 40) assert line_seg[1] == point.Point(60, 10) assert line_seg.get_min_x() == 30 assert line_seg.get_min_y() == 10 assert line_seg.get_max_x() == 60 assert line_seg.get_max_y() == 40 assert str(line_seg) == "(30/40)-->(60/10)" assert line_seg[2] is None def test_get_random(): """Test generating random linesegments""" min_x = 10 max_x = 25 min_y = 30 max_y = 50 for _ in range(100): line_seg = linesegment.get_random(min_x, max_x, min_y, max_y) assert min_x <= line_seg[0].get_x() <= max_x assert min_y <= line_seg[0].get_y() <= max_y assert min_x <= line_seg[1].get_x() <= max_x assert min_y <= line_seg[1].get_y() <= max_y def test_get_length(): """Test length calculation of linesegment.""" line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(10, 70)) assert line_seg.get_length() == 50 line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(70, 20)) assert line_seg.get_length() == 60 line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(70, 60)) assert line_seg.get_length() == 72.11102550927978 def test_get_slope(): """Test slope calculation of linesegment.""" line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(10, 70)) assert line_seg.get_slope() is None line_seg = linesegment.LineSegment( \ point.Point(10, 70), point.Point(10, 20)) assert line_seg.get_slope() is None line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(50, 20)) assert line_seg.get_slope() == 0 line_seg = linesegment.LineSegment( \ point.Point(50, 20), point.Point(10, 20)) assert line_seg.get_slope() == 0 line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(50, 60)) assert line_seg.get_slope() == 1 line_seg = linesegment.LineSegment( \ point.Point(50, 60), point.Point(10, 20)) assert line_seg.get_slope() == 1 line_seg = linesegment.LineSegment( \ point.Point(16, 7), point.Point(68, 25)) assert line_seg.get_slope() == 0.34615384615384615 line_seg = linesegment.LineSegment( \ point.Point(68, 25), point.Point(16, 7)) assert line_seg.get_slope() == 0.34615384615384615 def test_get_y_at(): """Test get_y_at() function of class LineSegment.""" line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(90, 20)) assert line_seg.get_y_at(50) == 20 line_seg = linesegment.LineSegment( \ point.Point(10, 20), point.Point(90, 70)) assert line_seg.get_y_at(50) == 45 def test_intersection(): """Test intersection() function for two linesegments.""" line_seg_a = linesegment.LineSegment( \ point.Point(10, 20), point.Point(10, 70)) line_seg_b = linesegment.LineSegment( \ point.Point(90, 70), point.Point(90, 20)) assert linesegment.intersection(line_seg_a, line_seg_b) is None line_seg_a = linesegment.LineSegment( \ point.Point(10, 20), point.Point(90, 70)) line_seg_b = linesegment.LineSegment( \ point.Point(10, 70), point.Point(90, 20)) assert linesegment.intersection(line_seg_a, line_seg_b) == \ point.Point(50, 45) line_seg_a = linesegment.LineSegment( \ point.Point(10, 10), point.Point(50, 50)) line_seg_b = linesegment.LineSegment( \ point.Point(50, 50), point.Point(90, 90)) assert linesegment.intersection(line_seg_a, line_seg_b)[0] == \ point.Point(50, 50) assert linesegment.intersection(line_seg_a, line_seg_b)[1] == \ point.Point(50, 50) line_seg_a = linesegment.LineSegment( \ point.Point(10, 10), point.Point(60, 60)) line_seg_b = linesegment.LineSegment( \ point.Point(40, 40), point.Point(90, 90)) assert linesegment.intersection(line_seg_a, line_seg_b)[0] == \ point.Point(40, 40) assert linesegment.intersection(line_seg_a, line_seg_b)[1] == \ point.Point(60, 60) line_seg_a = linesegment.LineSegment( \ point.Point(40, 40), point.Point(90, 90)) line_seg_b = linesegment.LineSegment( \ point.Point(10, 10), point.Point(60, 60)) assert linesegment.intersection(line_seg_a, line_seg_b)[0] == \ point.Point(40, 40) assert linesegment.intersection(line_seg_a, line_seg_b)[1] == \ point.Point(60, 60)