A computational geometry learning and experimentation tool.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.9 KiB

import pytest
from clusterview.points import Attribute, Point, PointSet
def test_add_to_point_set():
l = PointSet(3)
l.add_point(1, 2)
points = list(l.points)
p = Point(1, 2, 3)
assert len(points) == 1
assert points[0] == p
assert len(l.attributes(p)) == 0
def test_add_to_point_set_with_attributes():
attribute = Attribute("thing", 1)
l = PointSet(3)
l.add_point(2, 3, attrs=[attribute])
points = list(l.points)
point = Point(2, 3, 3)
attrs = l.attributes(point)
assert len(points) == 1
assert points[0] == point
assert len(l.attributes(point)) == 1
def test_remove_point_exact_click():
attribute = Attribute("thing", 1)
l = PointSet(8)
l.add_point(1, 2, attrs=[attribute])
p = Point(1, 2, 8)
l.remove_point(1, 2)
points = list(l.points)
assert len(points) == 0
with pytest.raises(KeyError):
# We expect a call to attributes on a removed
# point to raise a KeyError because it no
# longer exists in the point -> attribute_list
# dictionary.
l.attributes(p)
def test_remove_point_bounding_box():
"""
This test checks the bounding box hit heuristic.
"""
attribute = Attribute("thing", 1)
l = PointSet(8)
l.add_point(1, 2, attrs=[attribute])
p = Point(1, 2, 8)
# The click-point (2, 1) will be inside of our point size 8
# bounding box.
l.remove_point(2, 1)
points = list(l.points)
assert len(points) == 0
with pytest.raises(KeyError):
# We expect a call to attributes on a removed
# point to raise a KeyError because it no
# longer exists in the point -> attribute_list
# dictionary.
l.attributes(p)
def test_attributes_must_be_array_of_attributes():
with pytest.raises(ValueError):
l = PointSet(8)
l.add_point(1, 2, attrs=[1,2,3,4,5])