diff --git a/test/test_linesegment.py b/test/test_linesegment.py new file mode 100644 index 0000000..6fba6a2 --- /dev/null +++ b/test/test_linesegment.py @@ -0,0 +1,176 @@ +#!/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) \ No newline at end of file