delaunay.lua 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. local Delaunay = (require "delaunay")
  2. local Point = Delaunay.Point
  3. local Triangle = Delaunay.Triangle
  4. context("Delaunay", function()
  5. test('is a module containing binding to Point, Edge, Triangle primitives', function()
  6. assert_true(type(Delaunay) == 'table')
  7. assert_true(type(Delaunay.Point) == 'table')
  8. assert_true(type(Delaunay.Edge) == 'table')
  9. assert_true(type(Delaunay.Triangle) == 'table')
  10. end)
  11. it('offers a triangulation function', function()
  12. assert_true(type(Delaunay.triangulate) == 'function')
  13. end)
  14. it('also have a _VERSION member', function()
  15. assert_true(type(Delaunay._VERSION) == 'string')
  16. end)
  17. should('throw an error when receiving a vertex', function()
  18. local function triangulate1vertex()
  19. Delaunay.triangulate(Point())
  20. end
  21. assert_error(triangulate1vertex)
  22. end)
  23. should('throw an error when receiving two vertices', function()
  24. local function triangulate2vertices()
  25. Delaunay.triangulate(Point(), Point(1,1))
  26. end
  27. assert_error(triangulate2vertices)
  28. end)
  29. should('return a unique triangle made when receiving 3 vertices', function()
  30. local p1, p2, p3 = Point(), Point(2,0), Point(1,1)
  31. local t = Delaunay.triangulate(p1, p2, p3)
  32. assert_equal(#t, 1)
  33. assert_equal(getmetatable(t[1]), Triangle)
  34. assert_equal(t[1].p1, p1)
  35. assert_equal(t[1].p2, p2)
  36. assert_equal(t[1].p3, p3)
  37. end)
  38. should('return 2 triangles for those 4 vertices', function()
  39. local p1, p2, p3, p4 = Point(), Point(1,0), Point(1,1), Point(0,1)
  40. local t = Delaunay.triangulate(p1, p2, p3, p4)
  41. assert_equal(#t, 2)
  42. assert_equal(getmetatable(t[1]), Triangle)
  43. assert_equal(t[1].p1, p2)
  44. assert_equal(t[1].p2, p1)
  45. assert_equal(t[1].p3, p4)
  46. assert_equal(getmetatable(t[2]), Triangle)
  47. assert_equal(t[2].p1, p3)
  48. assert_equal(t[2].p2, p2)
  49. assert_equal(t[2].p3, p4)
  50. end)
  51. should('return 4 triangles for those 5 vertices', function()
  52. local p1, p2, p3, p4, p5 = Point(), Point(1,0), Point(1,1), Point(0,1), Point(0.5, 0.5)
  53. local t = Delaunay.triangulate(p1, p2, p3, p4, p5)
  54. assert_equal(#t, 4)
  55. assert_equal(getmetatable(t[1]), Triangle)
  56. assert_equal(t[1].p1, p3)
  57. assert_equal(t[1].p2, p2)
  58. assert_equal(t[1].p3, p5)
  59. assert_equal(getmetatable(t[2]), Triangle)
  60. assert_equal(t[2].p1, p4)
  61. assert_equal(t[2].p2, p3)
  62. assert_equal(t[2].p3, p5)
  63. assert_equal(getmetatable(t[3]), Triangle)
  64. assert_equal(t[3].p1, p2)
  65. assert_equal(t[3].p2, p1)
  66. assert_equal(t[3].p3, p5)
  67. assert_equal(getmetatable(t[4]), Triangle)
  68. assert_equal(t[4].p1, p1)
  69. assert_equal(t[4].p2, p4)
  70. assert_equal(t[4].p3, p5)
  71. end)
  72. end)