bound2_spec.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. local bound2 = require "modules.bound2"
  2. local vec2 = require "modules.vec2"
  3. local DBL_EPSILON = require("modules.constants").DBL_EPSILON
  4. describe("bound2:", function()
  5. it("creates an empty bound2", function()
  6. local a = bound2()
  7. assert.is.equal(0, a.min.x)
  8. assert.is.equal(0, a.min.y)
  9. assert.is.equal(0, a.max.x)
  10. assert.is.equal(0, a.max.y)
  11. end)
  12. it("creates a bound2 from vec2s", function()
  13. local a = bound2(vec2(1,2), vec2(4,5))
  14. assert.is.equal(1, a.min.x)
  15. assert.is.equal(2, a.min.y)
  16. assert.is.equal(4, a.max.x)
  17. assert.is.equal(5, a.max.y)
  18. end)
  19. it("creates a bound2 using new()", function()
  20. local a = bound2.new(vec2(1,2), vec2(4,5))
  21. assert.is.equal(1, a.min.x)
  22. assert.is.equal(2, a.min.y)
  23. assert.is.equal(4, a.max.x)
  24. assert.is.equal(5, a.max.y)
  25. end)
  26. it("creates a bound2 using at()", function()
  27. local a = bound2.at(vec2(4,5), vec2(1,2))
  28. assert.is.equal(1, a.min.x)
  29. assert.is.equal(2, a.min.y)
  30. assert.is.equal(4, a.max.x)
  31. assert.is.equal(5, a.max.y)
  32. end)
  33. it("clones a bound2", function()
  34. local a = bound2(vec2(1,2), vec2(4,5))
  35. local b = a:clone()
  36. a.max = new vec2(9,9)
  37. assert.is.equal(a.min, b.min)
  38. assert.is.not_equal(a.max, b.max)
  39. end)
  40. it("uses bound2 check()", function()
  41. local a = bound2(vec2(4,2), vec2(1,5)):check()
  42. assert.is.equal(1, a.min.x)
  43. assert.is.equal(2, a.min.y)
  44. assert.is.equal(4, a.max.x)
  45. assert.is.equal(5, a.max.y)
  46. end)
  47. it("queries a bound2 size", function()
  48. local a = bound2(vec2(1,2), vec2(4,6))
  49. local v = a:size()
  50. local r = a:radius()
  51. assert.is.equal(3, v.x)
  52. assert.is.equal(4, v.y)
  53. assert.is.equal(1.5, r.x)
  54. assert.is.equal(2, r.y)
  55. end)
  56. it("sets a bound2 size", function()
  57. local a = bound2(vec2(1,2), vec2(4,5))
  58. local b = a:with_size(vec2(1,1))
  59. assert.is.equal(1, a.min.x)
  60. assert.is.equal(2, a.min.y)
  61. assert.is.equal(4, a.max.x)
  62. assert.is.equal(5, a.max.y)
  63. assert.is.equal(1, b.min.x)
  64. assert.is.equal(2, b.min.y)
  65. assert.is.equal(2, b.max.x)
  66. assert.is.equal(3, b.max.y)
  67. end)
  68. it("queries a bound2 center", function()
  69. local a = bound2(vec2(1,2), vec2(3,4))
  70. local v = a:center()
  71. assert.is.equal(2, v.x)
  72. assert.is.equal(3, v.y)
  73. end)
  74. it("sets a bound2 center", function()
  75. local a = bound2(vec2(1,2), vec2(3,4))
  76. local b = a:with_center(vec2(1,1))
  77. assert.is.equal(1, a.min.x)
  78. assert.is.equal(2, a.min.y)
  79. assert.is.equal(3, a.max.x)
  80. assert.is.equal(4, a.max.y)
  81. assert.is.equal(0, b.min.x)
  82. assert.is.equal(0, b.min.y)
  83. assert.is.equal(2, b.max.x)
  84. assert.is.equal(2, b.max.y)
  85. end)
  86. it("sets a bound2 size centered", function()
  87. local a = bound2(vec2(1,2), vec2(3,4))
  88. local b = a:with_size_centered(vec2(4,4))
  89. assert.is.equal(1, a.min.x)
  90. assert.is.equal(2, a.min.y)
  91. assert.is.equal(3, a.max.x)
  92. assert.is.equal(4, a.max.y)
  93. assert.is.equal(0, b.min.x)
  94. assert.is.equal(1, b.min.y)
  95. assert.is.equal(4, b.max.x)
  96. assert.is.equal(5, b.max.y)
  97. end)
  98. it("insets a bound2", function()
  99. local a = bound2(vec2(1,2), vec2(5,10))
  100. local b = a:inset(vec2(1,2))
  101. assert.is.equal(1, a.min.x)
  102. assert.is.equal(2, a.min.y)
  103. assert.is.equal(5, a.max.x)
  104. assert.is.equal(10, a.max.y)
  105. assert.is.equal(2, b.min.x)
  106. assert.is.equal(4, b.min.y)
  107. assert.is.equal(4, b.max.x)
  108. assert.is.equal(8, b.max.y)
  109. end)
  110. it("outsets a bound2", function()
  111. local a = bound2(vec2(1,2), vec2(5,6))
  112. local b = a:outset(vec2(1,2))
  113. assert.is.equal(1, a.min.x)
  114. assert.is.equal(2, a.min.y)
  115. assert.is.equal(5, a.max.x)
  116. assert.is.equal(6, a.max.y)
  117. assert.is.equal(0, b.min.x)
  118. assert.is.equal(0, b.min.y)
  119. assert.is.equal(6, b.max.x)
  120. assert.is.equal(8, b.max.y)
  121. end)
  122. it("offsets a bound2", function()
  123. local a = bound2(vec2(1,2), vec2(5,6))
  124. local b = a:offset(vec2(1,2))
  125. assert.is.equal(1, a.min.x)
  126. assert.is.equal(2, a.min.y)
  127. assert.is.equal(5, a.max.x)
  128. assert.is.equal(6, a.max.y)
  129. assert.is.equal(2, b.min.x)
  130. assert.is.equal(4, b.min.y)
  131. assert.is.equal(6, b.max.x)
  132. assert.is.equal(8, b.max.y)
  133. end)
  134. it("tests for points inside bound2", function()
  135. local a = bound2(vec2(1,2), vec2(4,5))
  136. assert.is_true(a:contains(vec2(2,3)))
  137. assert.is_not_true(a:contains(vec2(0,3)))
  138. assert.is_not_true(a:contains(vec2(5,3)))
  139. assert.is_not_true(a:contains(vec2(2,1)))
  140. assert.is_not_true(a:contains(vec2(2,6)))
  141. assert.is_not_true(a:contains(vec2(2,3)))
  142. assert.is_not_true(a:contains(vec2(2,3)))
  143. end)
  144. it("checks for bound2.zero", function()
  145. assert.is.equal(0, bound2.zero.min.x)
  146. assert.is.equal(0, bound2.zero.min.y)
  147. assert.is.equal(0, bound2.zero.max.x)
  148. assert.is.equal(0, bound2.zero.max.y)
  149. end)
  150. end)