def test_should_calculate_circle_area(self): radius = 1./sqrt(pi) circle = Circle(radius) area = circle.area() self.assertAlmostEqual(area, 1)
def test_diagram_with_two_circles_returns_nothing_when_location_of_selection_isnt_in_either_circle(self): circle1 = Circle(0, 0, 3) circle2 = Circle(0, 0, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.assertEqual(None, self.diagram.select_at(10, 0))
def test_diagram_with_two_circles_at_different_location_returns_second_circle_at_selected_location(self): circle1 = Circle(10, 10, 3) circle2 = Circle(0, 0, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.assertEqual(circle1, self.diagram.select_at(7, 10))
def test_diagram_with_two_circles_at_same_location_returns_first_circle(self): circle1 = Circle(0, 0, 3) circle2 = Circle(0, 0, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.assertEqual(circle2, self.diagram.select_at(0, 0))
def test_add_two_circles_to_diagram(self): circle1 = Circle(0, 0, 3) circle2 = Circle(0, 10, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.assertEqual(circle1, self.diagram.shapes[0]) self.assertEqual(circle2, self.diagram.shapes[1])
def test_diagram_with_two_circles_at_different_locations_deletes_second_circle(self): circle1 = Circle(0, 0, 3) circle2 = Circle(10, 10, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.diagram.delete_shape_at(9, 9) self.assertEqual([circle1], self.diagram.shapes)
def test_diagram_with_two_circles_deletes_nothing_if_point_isnt_inside_circle(self): circle1 = Circle(0, 0, 3) circle2 = Circle(0, 0, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.diagram.delete_shape_at(10, 10) self.assertEqual([circle1, circle2], self.diagram.shapes)
def test_diagram_with_two_overlapping_circles_deletes_only_first(self): circle1 = Circle(0, 0, 3) circle2 = Circle(0, 10, 3) self.diagram.add_shape(circle1) self.diagram.add_shape(circle2) self.diagram.delete_shape_at(0, 0) self.assertEqual([circle2], self.diagram.shapes)
def test_group_a_group_and_a_circle(self): rectangle1 = Rectangle(-2, -1, 4, 1) rectangle2 = Rectangle(-1, 2, 4, 2) square1 = Square(7, 3, 2) square2 = Square(10, 3, 2) circle1 = Circle(2, 6, 3) self.diagram.add_shape(rectangle1) self.diagram.add_shape(rectangle2) self.diagram.add_shape(square1) self.diagram.add_shape(square2) self.diagram.add_shape(circle1) self.diagram.group_shapes(-1, 1, 8, 6) self.diagram.group_shapes(9, 3, 8, 4) self.diagram.group_shapes(3, 6, 20, 20) self.assertEqual(circle1, self.diagram.shapes[0].shapes[0]) self.assertEqual([rectangle1, rectangle2], self.diagram.shapes[0].shapes[1].shapes) self.assertEqual([square1, square2], self.diagram.shapes[0].shapes[2].shapes)
def test_add_circle_and_rectangle_to_diagram(self): circle1 = Circle(0, 0, 3) rectangle1 = Rectangle(0, 0, 4, 2) self.diagram.add_shape(circle1) self.diagram.add_shape(rectangle1) self.assertEqual([circle1, rectangle1], self.diagram.shapes)
def test_diagram_has_circle_on_top_of_rectangle_selects_rectangle_when_point_is_on_rectangle(self): rectangle1 = Rectangle(0, 0, 8, 4) circle1 = Circle(0, 0, 3) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.assertEqual(rectangle1, self.diagram.select_at(4, 2))
def test_ungroup_a_nonexistent_group_from_a_di(self): circle1 = Circle(0, 3, 3) rectangle1 = Rectangle(0, 0, 4, 2) self.diagram.add_shape(circle1) self.diagram.add_shape(rectangle1) self.diagram.group_shapes(100,100, 4, 2) self.assertEqual(2, len(self.diagram.shapes))
def test_diagram_has_circle_on_top_of_rectangle_delete_circle_check_for_a_property_of_rectangle_being_there(self): rectangle1 = Rectangle(0, 0, 8, 4) circle1 = Circle(0, 0, 3) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.delete_shape_at(0, 0) self.assertEqual([rectangle1], self.diagram.shapes)
def test_diagram_has_a_group_and_two_ungrouped_shapes(self): rectangle1 = Rectangle(-1, 7, 8, 4) circle1 = Circle(3, 6, 3) square1 = Square(-5, 0, 8) circle2 = Circle(9, 6, 3) square2 = Square(8, 0, 8) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.add_shape(square1) self.diagram.add_shape(circle2) self.diagram.add_shape(square2) self.diagram.group_shapes(0, 0, 21, 20) self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[2].shapes) self.assertEqual([circle2, square2], self.diagram.shapes[0:2])
def test_load_diagram_with_one_circle(self): circle1 = Circle(0, 3, 3) self.diagram.add_shape(circle1) data_bytes = self.diagram.convert_data() self.diagram.shapes = [] self.diagram.shapes = self.diagram.load_diagram(data_bytes) self.assertEqual(1, len(self.diagram.shapes))
def create_shape(self): circle = Circle(100, 100, 25) self.diagram.add_shape(circle) self.canvas.create_oval(circle.center[0] - 25, circle.center[1] - 25, circle.center[0] + 25, circle.center[1] + 25, outline='black', fill='white', tags="shape")
def test_draw_a_rectangle_area_any_shape_within_it_will_be_grouped(self): rectangle1 = Rectangle(-1, 7, 8, 4) circle1 = Circle(0, 0, 3) square1 = Square(-5, 0, 8) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.add_shape(square1) self.diagram.group_shapes(0, 0, 25, 25) self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[0].shapes)
def test_load_diagram_with_one_circle_and_one_rectangle(self): circle1 = Circle(0, 3, 3) rectangle1 = Rectangle(0, 0, 4, 2) self.diagram.add_shape(circle1) self.diagram.add_shape(rectangle1) data_bytes = self.diagram.convert_data() self.diagram.shapes = [] self.diagram.shapes = self.diagram.load_diagram(data_bytes) self.assertEqual(2, len(self.diagram.shapes))
def test_diagram_has_only_a_group_no_ungrouped_shapes(self): rectangle1 = Rectangle(-1, 7, 8, 4) circle1 = Circle(3, 6, 3) square1 = Square(-5, 0, 8) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.add_shape(square1) self.diagram.group_shapes(0, 0, 21, 20) self.assertEqual([rectangle1, circle1, square1], self.diagram.shapes[0].shapes) self.assertEqual(1, len(self.diagram.shapes))
def trivial(r): """ Fonction triviale permettant de trouver un cercle avec tous les points de r sur sa limite params : - r = Un ensemble de points avec |r| <= 3 return -> Circle = Le cercle avec tous les points de r à sa limite """ # Si r ne contient pas de points if len(r) == 0: return Circle((0, 0), 0) # Si r contient 1 point elif len(r) == 1: return Circle(list(r)[0], 0) # Si r contient 2 points elif len(r) == 2: r = list(r) return diameter_circle(r[0], r[1]) # Si r contient 3 points ou plus elif len(r) == 3: r = list(r) # On vérifie si on ne peut pas déterminer le cercle avec seulement 2 points if point_in_circle(r[2], diameter_circle(r[0], r[1])): return diameter_circle(r[0], r[1]) elif point_in_circle(r[1], diameter_circle(r[0], r[2])): return diameter_circle(r[0], r[2]) elif point_in_circle(r[0], diameter_circle(r[1], r[2])): return diameter_circle(r[1], r[2]) return circumscribed_circle(r[0], r[1], r[2]) # Autrement on retourne None return None
def test_ungroup_a_group(self): rectangle1 = Rectangle(-1, 7, 8, 4) circle1 = Circle(20, 2, 3) square1 = Square(-5, 0, 8) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.add_shape(square1) self.diagram.group_shapes(0, 0, 21, 20) self.diagram.ungroup(self.diagram.shapes[1]) self.assertEqual([circle1, rectangle1, square1], self.diagram.shapes)
def test_delete_group_and_its_shapes(self): rectangle1 = Rectangle(-1, 7, 8, 4) circle1 = Circle(20, 6, 3) square1 = Square(-5, 0, 8) self.diagram.add_shape(rectangle1) self.diagram.add_shape(circle1) self.diagram.add_shape(square1) self.diagram.group_shapes(0, 0, 21, 20) self.diagram.delete_shape_at(3, 6) self.assertEqual([circle1], self.diagram.shapes)
def diameter_circle(p1, p2): """ Cette fonction retourne le plus petit cercle passant par p1 et p2 params : - p1 = Le point 1 - p2 = Le point 2 return -> Circle = Le cercle """ c_x = (p1[0] + p2[0]) / 2 c_y = (p1[1] + p2[1]) / 2 c_rad = distance((c_x, c_y), p1) return Circle((c_x, c_y), c_rad)
def circumscribed_circle(p1, p2, p3): """ Cette fonction retourne le cercle circonscrit dans le triangle formé par les trois points params : - p1 = Le point 1 - p2 = Le point 2 - p3 = Le point 3 return -> Circle = Le cercle circonscrit """ # On vérifie que les points ne soient pas colinéaires if ((p1[0] - p2[0]) * (p1[1] - p3[1]) - (p1[1] - p2[1]) * (p1[0] - p3[0])) == 0: return None # On vérifie que p1 n'est pas sur la même ligne que p2 ou p3 pour éviter les multiplication par 0 if p1[1] == p2[1]: tmp = p1 p1 = p3 p3 = tmp elif p1[1] == p3[1]: tmp = p1 p1 = p2 p2 = tmp # On récupère les centres des segments p1-p2 et p1-p3 # Soient m = (p1 + p2) / 2 et n = (p1 + p3) / 2 m_x = (p1[0] + p2[0]) / 2 m_y = (p1[1] + p2[1]) / 2 n_x = (p1[0] + p3[0]) / 2 n_y = (p1[1] + p3[1]) / 2 # On calcule les équations des droites d1 et d2 respectivement médianes de p1-p2 et p1-p3 d1_a = (p2[0] - p1[0]) / (p1[1] - p2[1]) d1_b = m_y - d1_a * m_x d2_a = (p3[0] - p1[0]) / (p1[1] - p3[1]) d2_b = n_y - d2_a * n_x # On peut maintenant avoir les coordonnées du cercle c_x = (d2_b - d1_b) / (d1_a - d2_a) c_y = d1_a * c_x + d1_b c_rad = distance((c_x, c_y), p1) # On retourne le résultat return Circle((c_x, c_y), c_rad)
from src.circle import Circle from src.point import Point if __name__ == '__main__': # Testing libraries of Point and Circle small_circle = Circle(Point(12, 12), 425) big_circle = Circle(Point(9, 1), 10293.4) if (small_circle < big_circle): print('Test #1 is OK') if (small_circle == small_circle): print('Test #2 is OK')
class CircleTest(unittest.TestCase): def setUp(self): self.circle = Circle(0, 0, 5) def test_canary_test(self): self.assertTrue(True) def test_create_circle(self): self.assertEqual(self.circle.radius, 5) def test_center_of_circle(self): self.assertEqual((0, 0), self.circle.center) def test_move_circle(self): self.circle.set_location(3, 3) self.assertEqual((3, 3), self.circle.center) def test_point_outside_circle(self): self.assertFalse(self.circle.is_point_on(6, 6)) def test_point_outside_top_of_circle(self): self.assertFalse(self.circle.is_point_on(0, 6)) def test_point_outside_right_of_circle(self): self.assertFalse(self.circle.is_point_on(6, 0)) def test_point_outside_left_of_circle(self): self.assertFalse(self.circle.is_point_on(-6, 0)) def test_point_outside_bottom_of_circle(self): self.assertFalse(self.circle.is_point_on(0, -6)) def test_get_location(self): self.circle.set_location(3, 3) self.assertEqual((3, 3), self.circle.get_location()) def test_point_inside_circle(self): self.assertTrue(self.circle.is_point_on(-3, 0)) def test_point_on_circle(self): self.assertTrue(self.circle.is_point_on(4, 3)) def test_move_circle_and_check_if_point_inside_circle(self): self.circle.set_location(5, 5) self.assertTrue(self.circle.is_point_on(6, 5)) def test_check_if_circle_in_selection_region(self): self.circle.set_location(1, 1) self.assertTrue(self.circle.is_shape_in_region(0, 0, 15, 15)) def test_move_by(self): self.circle.set_location(6, 9) self.circle.move_by(0, -3) self.assertEqual((6, 6), (self.circle.center[0], self.circle.center[1]))
def setUp(self): self.circle = Circle(0, 0, 5)
def test_add_circle_to_diagram(self): circle1 = Circle(0, 0, 3) self.diagram.add_shape(circle1) self.assertEqual([circle1], self.diagram.shapes)
def test_ungroup_something_thats_not_a_group(self): circle1 = Circle(0, 0, 2) self.diagram.ungroup(circle1) self.assertEqual(0, len(self.diagram.shapes))
def test_save_diagram_with_one_circle_and_one_rectangle(self): self.diagram.add_shape(Circle(0, 0, 3)) self.diagram.add_shape(Rectangle(0, 0, 4, 2)) self.assertEqual(bytes, type(self.diagram.convert_data()))
def test_ungroup_a_nonexistent_group_from_a_diagram(self): group = Group([Circle(10, 10, 5), Circle(20, 20, 5)]) self.diagram.ungroup(group) self.assertEqual(0, len(self.diagram.shapes))