PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/test/test_wordbox.rb

http://github.com/nielsjansendk/cloud
Ruby | 264 lines | 227 code | 36 blank | 1 comment | 14 complexity | 0a05aed779e2570329600cabac06d0d7 MD5 | raw file
  1. class WordBoxTest < Test::Unit::TestCase
  2. include WordBox
  3. def setup
  4. @box = WordBox::Box.new
  5. @canvas = WordBox::Canvas.new(10,10)
  6. end
  7. def test_point
  8. point1 = Point.new(1.0,1.0)
  9. point2 = Point.new(1.0,1.0)
  10. assert_equal(point1 == point2, true)
  11. point3 = Point.new(1.0,2.0)
  12. assert_equal(point1 == point3, false)
  13. assert_equal(point1.distance_to_point(point2), 0.0)
  14. assert_equal(point1.distance_to_point(point3), 1.0)
  15. assert_equal(point3.distance_to_point(point1), 1.0)
  16. point4 = Point.new(0.0,0.0)
  17. assert_equal(point4.distance_to_point(point1), Math.sqrt(2))
  18. end
  19. def test_box_init
  20. ["ll","ul","lr","ur","center","cb","ct","cl","cr"].each {|methodname|
  21. assert_equal(@box.method(methodname.intern).call.x,0)
  22. assert_equal(@box.method(methodname.intern).call.y,0)
  23. }
  24. end
  25. def test_canvas_init
  26. assert_equal(@canvas.max.x,10)
  27. assert_equal(@canvas.max.y,10)
  28. assert_equal(@canvas.center.x,5)
  29. assert_equal(@canvas.center.y,5)
  30. end
  31. def test_set_from_width_and_height
  32. @box.set_from_width_and_height(1,1)
  33. ["ll","lr","cb"].each {|methodname|
  34. assert_equal(@box.method(methodname.intern).call.y,0)
  35. }
  36. ["ul","ur","ct"].each {|methodname|
  37. assert_equal(@box.method(methodname.intern).call.y,1)
  38. }
  39. ["ll","ul","cl"].each {|methodname|
  40. assert_equal(@box.method(methodname.intern).call.x,0)
  41. }
  42. ["lr","ur","cr"].each {|methodname|
  43. assert_equal(@box.method(methodname.intern).call.x,1)
  44. }
  45. ["center","cb","ct"].each {|methodname|
  46. assert_equal(@box.method(methodname.intern).call.x,0.5)
  47. }
  48. ["center","cr","cl"].each {|methodname|
  49. assert_equal(@box.method(methodname.intern).call.y,0.5)
  50. }
  51. assert_equal(@box.width,1.0)
  52. assert_equal(@box.height,1.0)
  53. assert_equal(@box.diagonal,Math.sqrt(2))
  54. @box.set_from_width_and_height(2,1)
  55. assert_equal(@box.diagonal,Math.sqrt(5))
  56. end
  57. def test_box_equality
  58. @box.set_from_width_and_height(1,1)
  59. box2 = WordBox::Box.new
  60. box2.set_from_width_and_height(1,1)
  61. assert_equal(box2 == @box, true)
  62. @box.place_ul_at_point(Point.new(5,5),@canvas)
  63. assert_equal(box2 == @box, false)
  64. end
  65. def test_total_diagonal
  66. @box.set_from_width_and_height(1,1)
  67. box2 = WordBox::Box.new
  68. box2.set_from_width_and_height(1,1)
  69. box2.place_ll_at_point(Point.new(1,1),@canvas)
  70. assert_equal(@box.total_diagonal(box2), 2.0*Math.sqrt(2))
  71. box3 = WordBox::Box.new
  72. box3.set_from_width_and_height(2,1)
  73. box3.place_ll_at_point(Point.new(1,1),@canvas)
  74. assert_equal(@box.total_diagonal(box3), Math.sqrt(9 + 4))
  75. assert_equal(@box.min_total_diagonal(box3), Math.sqrt(9 + 4))
  76. assert_equal(@box.close?(box3), true)
  77. box4 = WordBox::Box.new
  78. box4.set_from_width_and_height(2,1)
  79. box4.place_ll_at_point(Point.new(2,2),@canvas)
  80. assert_equal(@box.min_total_diagonal(box4), Math.sqrt(9 + 4))
  81. assert_equal(@box.total_diagonal(box4),5)
  82. assert_equal(@box.close?(box4), false)
  83. box5 = WordBox::Box.new
  84. box5.set_from_width_and_height(1,1)
  85. box5.place_cl_at_point(Point.new(1,0.5),@canvas)
  86. assert_equal(@box.total_diagonal(box5),Math.sqrt(5))
  87. assert_equal(@box.min_total_diagonal(box5),2*Math.sqrt(2))
  88. assert_equal(@box.close?(box5), true)
  89. end
  90. def test_place_ul_at_point
  91. @box.set_from_width_and_height(1,1)
  92. area_before = @box.area
  93. assert_equal(@box.place_ul_at_point(Point.new(5,5),@canvas),true)
  94. assert_equal(@box.ul.x,5)
  95. assert_equal(@box.ul.y,5)
  96. assert_equal(@box.area,area_before)
  97. assert_equal(@box.place_ul_at_point(Point.new(10,5),@canvas),false)
  98. end
  99. def test_place_center_at_point
  100. @box.set_from_width_and_height(1,1)
  101. area_before = @box.area
  102. assert_equal(@box.place_center_at_point(Point.new(5,5),@canvas),true)
  103. assert_equal(@box.center.x,5)
  104. assert_equal(@box.center.y,5)
  105. assert_equal(@box.area,area_before)
  106. assert_equal(@box.place_center_at_point(Point.new(10,5),@canvas),false)
  107. end
  108. def test_point_in_box
  109. @box.set_from_width_and_height(1,1)
  110. assert_equal(@box.point_in_box?(Point.new(1,1)), false)
  111. assert_equal(@box.point_in_box?(Point.new(1,0.5)), false)
  112. assert_equal(@box.point_in_box?(Point.new(0,0.5)), false)
  113. assert_equal(@box.point_in_box?(Point.new(0.5,1)), false)
  114. assert_equal(@box.point_in_box?(Point.new(0.5,1)), false)
  115. assert_equal(@box.point_in_box?(Point.new(0.5,0.5)), true)
  116. @box.set_from_width_and_height(2,2)
  117. @box.place_ll_at_point(Point.new(2.0,2.0),@canvas)
  118. assert_equal(@box.point_in_box?(Point.new(2.0,2.0)), false)
  119. @box.set_from_width_and_height(2,2)
  120. box2 = WordBox::Box.new
  121. box2.set_from_width_and_height(1,1)
  122. box2.place_ll_at_point(Point.new(2.0,2.0),@canvas)
  123. ["center","cl","cr","ct","cb"].each {|c|
  124. assert_equal(@box.point_in_box?(box2.method(c).call), false)
  125. assert_equal(box2.point_in_box?(@box.method(c).call), false)
  126. }
  127. end
  128. def test_overlap
  129. @box.set_from_width_and_height(2,2)
  130. box2 = WordBox::Box.new
  131. box2.set_from_width_and_height(1,1)
  132. #assert_equal(@box.overlap?(box2),true)
  133. box2.place_ll_at_point(Point.new(2.0,2.0),@canvas)
  134. assert_equal(@box.overlap?(box2),false)
  135. box2.place_ll_at_point(Point.new(0.0,2.0),@canvas)
  136. assert_equal(@box.overlap?(box2),false)
  137. box2.place_ll_at_point(Point.new(0,1.9),@canvas)
  138. assert_equal(@box.overlap?(box2),true)
  139. box3 = WordBox::Box.new
  140. box3.set_from_width_and_height(2,2)
  141. assert_equal(@box.overlap?(box3),true)
  142. end
  143. def test_distance_func
  144. @box.set_from_width_and_height(1,1)
  145. placements = @box.enter_points_in_placements(Array.new, @canvas)
  146. ll = placements.find {|placement| placement.position == "ll"}
  147. assert_equal(ll.distance, Math.sqrt(25*2))
  148. distance_func = Proc.new {|point, canvas| (point.x - canvas.center.x).abs}
  149. placements = @box.enter_points_in_placements(Array.new, @canvas, nil, distance_func)
  150. ll = placements.find {|placement| placement.position == "ll"}
  151. assert_equal(ll.distance, 5)
  152. end
  153. def test_enter_points_in_placements
  154. @box.set_from_width_and_height(1,1)
  155. placements = @box.enter_points_in_placements(Array.new, @canvas)
  156. assert_equal(placements[-1].distance, Math.sqrt(25*2))
  157. assert_equal(placements[0].distance, Math.sqrt(16*2))
  158. ["ll","ul","lr","ur","cb","ct","cl","cr"].each {|position|
  159. assert_not_nil(placements.find {|placement| placement.position == position})
  160. }
  161. placements = @box.enter_points_in_placements(Array.new, @canvas, "ul")
  162. assert_nil(placements.find {|placement| placement.position == "ul"})
  163. ["ll","lr","ur","cb","ct","cl","cr"].each {|position|
  164. assert_not_nil(placements.find {|placement| placement.position == position})
  165. }
  166. placements = @box.enter_points_in_placements(Array.new, @canvas, "ll")
  167. assert_equal(placements.find {|placement| placement.position == "ur"}.distance_to_last,Math.sqrt(2))
  168. assert_equal(placements.find {|placement| placement.position == "ul"}.distance_to_last,1)
  169. assert_equal(placements.find {|placement| placement.position == "cb"}.distance_to_last,0.5)
  170. end
  171. def test_place_box_at_placement
  172. box = WordBox::Box.new.set_from_width_and_height(1,1)
  173. placements = box.enter_points_in_placements(Array.new, @canvas)
  174. box2 = WordBox::Box.new.set_from_width_and_height(1,1)
  175. ["ul","ll","lr","cb","cl"].each {|position|
  176. placement = placements.find {|placement| placement.position == position}
  177. assert_equal(placement.place_box_at_placement(box2,@canvas),true)
  178. }
  179. ["ct","ur","cr"].each {|position|
  180. placement = placements.find {|placement| placement.position == position}
  181. assert_equal(placement.place_box_at_placement(box2,@canvas),true)
  182. }
  183. end
  184. def test_linesegment
  185. point1 = WordBox::Point.new(0,0)
  186. point2 = WordBox::Point.new(1,0)
  187. point3 = WordBox::Point.new(1,1)
  188. point4 = WordBox::Point.new(0,1)
  189. point5 = WordBox::Point.new(2,2)
  190. segment1 = WordBox::LineSegment.new(point1,point2)
  191. assert_equal(segment1.start_point.x,0)
  192. assert_equal(segment1.start_point.y,0)
  193. assert_equal(segment1.end_point.x,1)
  194. assert_equal(segment1.end_point.y,0)
  195. segment2 = WordBox::LineSegment.new(point1,point3)
  196. segment3 = WordBox::LineSegment.new(point2,point4)
  197. assert_equal(segment2.intersect?(segment3),true)
  198. assert_equal(segment1.intersect?(segment3),false)
  199. assert_equal(segment2.intersect?(segment1),false)
  200. segment4 = WordBox::LineSegment.new(point1,point5)
  201. assert_equal(segment1.intersect?(segment4),false)
  202. segment5 = WordBox::LineSegment.new(point3,point5)
  203. assert_equal(segment4.intersect?(segment5),false)
  204. end
  205. def test_overlapping_linesegment
  206. point1 = WordBox::Point.new(0,0)
  207. point2 = WordBox::Point.new(2,0)
  208. point3 = WordBox::Point.new(1,0)
  209. point4 = WordBox::Point.new(1,1)
  210. segment1 = WordBox::LineSegment.new(point1,point2)
  211. segment2 = WordBox::LineSegment.new(point3,point4)
  212. assert_equal(segment1.intersect?(segment2),false)
  213. point1 = WordBox::Point.new(0,0)
  214. point2 = WordBox::Point.new(0,2)
  215. point3 = WordBox::Point.new(0,1)
  216. point4 = WordBox::Point.new(1,1)
  217. segment1 = WordBox::LineSegment.new(point1,point2)
  218. segment2 = WordBox::LineSegment.new(point3,point4)
  219. assert_equal(segment1.intersect?(segment2),false)
  220. end
  221. def test_rotate
  222. @box.set_from_width_and_height(2,1)
  223. @box.rotate(@canvas)
  224. assert_equal(@box.width,1)
  225. assert_equal(@box.height,2)
  226. assert_equal(@box.center,Point.new(0.5,1))
  227. end
  228. end