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