Add tests for linesegment module
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-03-22 18:41:17 +01:00
parent cf004ec5de
commit c3a82ff300

176
test/test_linesegment.py Normal file
View File

@@ -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)