delaunay.lua 3.3 KB

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