Box2.tests.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. /* global QUnit */
  2. import { Box2 } from '../../../../src/math/Box2';
  3. import { Vector2 } from '../../../../src/math/Vector2';
  4. import {
  5. negInf2,
  6. posInf2,
  7. negOne2,
  8. zero2,
  9. one2,
  10. two2
  11. } from './Constants.tests';
  12. export default QUnit.module( 'Maths', () => {
  13. QUnit.module( 'Box2', () => {
  14. // INSTANCING
  15. QUnit.test( "Instancing", ( assert ) => {
  16. var a = new Box2();
  17. assert.ok( a.min.equals( posInf2 ), "Passed!" );
  18. assert.ok( a.max.equals( negInf2 ), "Passed!" );
  19. var a = new Box2( zero2.clone(), zero2.clone() );
  20. assert.ok( a.min.equals( zero2 ), "Passed!" );
  21. assert.ok( a.max.equals( zero2 ), "Passed!" );
  22. var a = new Box2( zero2.clone(), one2.clone() );
  23. assert.ok( a.min.equals( zero2 ), "Passed!" );
  24. assert.ok( a.max.equals( one2 ), "Passed!" );
  25. } );
  26. // PUBLIC STUFF
  27. QUnit.test( "set", ( assert ) => {
  28. var a = new Box2();
  29. a.set( zero2, one2 );
  30. assert.ok( a.min.equals( zero2 ), "Passed!" );
  31. assert.ok( a.max.equals( one2 ), "Passed!" );
  32. } );
  33. QUnit.test( "setFromPoints", ( assert ) => {
  34. var a = new Box2();
  35. a.setFromPoints( [ zero2, one2, two2 ] );
  36. assert.ok( a.min.equals( zero2 ), "Passed!" );
  37. assert.ok( a.max.equals( two2 ), "Passed!" );
  38. a.setFromPoints( [ one2 ] );
  39. assert.ok( a.min.equals( one2 ), "Passed!" );
  40. assert.ok( a.max.equals( one2 ), "Passed!" );
  41. a.setFromPoints( [] );
  42. assert.ok( a.isEmpty(), "Passed!" );
  43. } );
  44. QUnit.test( "setFromCenterAndSize", ( assert ) => {
  45. var a = new Box2();
  46. a.setFromCenterAndSize( zero2, two2 );
  47. assert.ok( a.min.equals( negOne2 ), "Passed!" );
  48. assert.ok( a.max.equals( one2 ), "Passed!" );
  49. a.setFromCenterAndSize( one2, two2 );
  50. assert.ok( a.min.equals( zero2 ), "Passed!" );
  51. assert.ok( a.max.equals( two2 ), "Passed!" );
  52. a.setFromCenterAndSize( zero2, zero2 );
  53. assert.ok( a.min.equals( zero2 ), "Passed!" );
  54. assert.ok( a.max.equals( zero2 ), "Passed!" );
  55. } );
  56. QUnit.test( "clone", ( assert ) => {
  57. var a = new Box2( zero2, zero2 );
  58. var b = a.clone();
  59. assert.ok( b.min.equals( zero2 ), "Passed!" );
  60. assert.ok( b.max.equals( zero2 ), "Passed!" );
  61. a = new Box2();
  62. var b = a.clone();
  63. assert.ok( b.min.equals( posInf2 ), "Passed!" );
  64. assert.ok( b.max.equals( negInf2 ), "Passed!" );
  65. } );
  66. QUnit.test( "copy", ( assert ) => {
  67. var a = new Box2( zero2.clone(), one2.clone() );
  68. var b = new Box2().copy( a );
  69. assert.ok( b.min.equals( zero2 ), "Passed!" );
  70. assert.ok( b.max.equals( one2 ), "Passed!" );
  71. // ensure that it is a true copy
  72. a.min = zero2;
  73. a.max = one2;
  74. assert.ok( b.min.equals( zero2 ), "Passed!" );
  75. assert.ok( b.max.equals( one2 ), "Passed!" );
  76. } );
  77. QUnit.test( "empty/makeEmpty", ( assert ) => {
  78. var a = new Box2();
  79. assert.ok( a.isEmpty(), "Passed!" );
  80. var a = new Box2( zero2.clone(), one2.clone() );
  81. assert.ok( ! a.isEmpty(), "Passed!" );
  82. a.makeEmpty();
  83. assert.ok( a.isEmpty(), "Passed!" );
  84. } );
  85. QUnit.test( "isEmpty", ( assert ) => {
  86. var a = new Box2( zero2.clone(), zero2.clone() );
  87. assert.ok( ! a.isEmpty(), "Passed!" );
  88. var a = new Box2( zero2.clone(), one2.clone() );
  89. assert.ok( ! a.isEmpty(), "Passed!" );
  90. var a = new Box2( two2.clone(), one2.clone() );
  91. assert.ok( a.isEmpty(), "Passed!" );
  92. var a = new Box2( posInf2.clone(), negInf2.clone() );
  93. assert.ok( a.isEmpty(), "Passed!" );
  94. } );
  95. QUnit.test( "getCenter", ( assert ) => {
  96. var a = new Box2( zero2.clone(), zero2.clone() );
  97. var center = new Vector2();
  98. assert.ok( a.getCenter( center ).equals( zero2 ), "Passed!" );
  99. var a = new Box2( zero2, one2 );
  100. var midpoint = one2.clone().multiplyScalar( 0.5 );
  101. assert.ok( a.getCenter( center ).equals( midpoint ), "Passed!" );
  102. } );
  103. QUnit.test( "getSize", ( assert ) => {
  104. var a = new Box2( zero2.clone(), zero2.clone() );
  105. var size = new Vector2();
  106. assert.ok( a.getSize( size ).equals( zero2 ), "Passed!" );
  107. var a = new Box2( zero2.clone(), one2.clone() );
  108. assert.ok( a.getSize( size ).equals( one2 ), "Passed!" );
  109. } );
  110. QUnit.test( "expandByPoint", ( assert ) => {
  111. var a = new Box2( zero2.clone(), zero2.clone() );
  112. var size = new Vector2();
  113. var center = new Vector2();
  114. a.expandByPoint( zero2 );
  115. assert.ok( a.getSize( size ).equals( zero2 ), "Passed!" );
  116. a.expandByPoint( one2 );
  117. assert.ok( a.getSize( size ).equals( one2 ), "Passed!" );
  118. a.expandByPoint( one2.clone().negate() );
  119. assert.ok( a.getSize( size ).equals( one2.clone().multiplyScalar( 2 ) ), "Passed!" );
  120. assert.ok( a.getCenter( center ).equals( zero2 ), "Passed!" );
  121. } );
  122. QUnit.test( "expandByVector", ( assert ) => {
  123. var a = new Box2( zero2.clone(), zero2.clone() );
  124. var size = new Vector2();
  125. var center = new Vector2();
  126. a.expandByVector( zero2 );
  127. assert.ok( a.getSize( size ).equals( zero2 ), "Passed!" );
  128. a.expandByVector( one2 );
  129. assert.ok( a.getSize( size ).equals( one2.clone().multiplyScalar( 2 ) ), "Passed!" );
  130. assert.ok( a.getCenter( center ).equals( zero2 ), "Passed!" );
  131. } );
  132. QUnit.test( "expandByScalar", ( assert ) => {
  133. var a = new Box2( zero2.clone(), zero2.clone() );
  134. var size = new Vector2();
  135. var center = new Vector2();
  136. a.expandByScalar( 0 );
  137. assert.ok( a.getSize( size ).equals( zero2 ), "Passed!" );
  138. a.expandByScalar( 1 );
  139. assert.ok( a.getSize( size ).equals( one2.clone().multiplyScalar( 2 ) ), "Passed!" );
  140. assert.ok( a.getCenter( center ).equals( zero2 ), "Passed!" );
  141. } );
  142. QUnit.test( "containsPoint", ( assert ) => {
  143. var a = new Box2( zero2.clone(), zero2.clone() );
  144. assert.ok( a.containsPoint( zero2 ), "Passed!" );
  145. assert.ok( ! a.containsPoint( one2 ), "Passed!" );
  146. a.expandByScalar( 1 );
  147. assert.ok( a.containsPoint( zero2 ), "Passed!" );
  148. assert.ok( a.containsPoint( one2 ), "Passed!" );
  149. assert.ok( a.containsPoint( one2.clone().negate() ), "Passed!" );
  150. } );
  151. QUnit.test( "containsBox", ( assert ) => {
  152. var a = new Box2( zero2.clone(), zero2.clone() );
  153. var b = new Box2( zero2.clone(), one2.clone() );
  154. var c = new Box2( one2.clone().negate(), one2.clone() );
  155. assert.ok( a.containsBox( a ), "Passed!" );
  156. assert.ok( ! a.containsBox( b ), "Passed!" );
  157. assert.ok( ! a.containsBox( c ), "Passed!" );
  158. assert.ok( b.containsBox( a ), "Passed!" );
  159. assert.ok( c.containsBox( a ), "Passed!" );
  160. assert.ok( ! b.containsBox( c ), "Passed!" );
  161. } );
  162. QUnit.test( "getParameter", ( assert ) => {
  163. var a = new Box2( zero2.clone(), one2.clone() );
  164. var b = new Box2( one2.clone().negate(), one2.clone() );
  165. var parameter = new Vector2();
  166. a.getParameter( zero2, parameter );
  167. assert.ok( parameter.equals( zero2 ), "Passed!" );
  168. a.getParameter( one2, parameter );
  169. assert.ok( parameter.equals( one2 ), "Passed!" );
  170. b.getParameter( one2.clone().negate(), parameter );
  171. assert.ok( parameter.equals( zero2 ), "Passed!" );
  172. b.getParameter( zero2, parameter );
  173. assert.ok( parameter.equals( new Vector2( 0.5, 0.5 ) ), "Passed!" );
  174. b.getParameter( one2, parameter );
  175. assert.ok( parameter.equals( one2 ), "Passed!" );
  176. } );
  177. QUnit.test( "intersectsBox", ( assert ) => {
  178. var a = new Box2( zero2.clone(), zero2.clone() );
  179. var b = new Box2( zero2.clone(), one2.clone() );
  180. var c = new Box2( one2.clone().negate(), one2.clone() );
  181. assert.ok( a.intersectsBox( a ), "Passed!" );
  182. assert.ok( a.intersectsBox( b ), "Passed!" );
  183. assert.ok( a.intersectsBox( c ), "Passed!" );
  184. assert.ok( b.intersectsBox( a ), "Passed!" );
  185. assert.ok( c.intersectsBox( a ), "Passed!" );
  186. assert.ok( b.intersectsBox( c ), "Passed!" );
  187. b.translate( two2 );
  188. assert.ok( ! a.intersectsBox( b ), "Passed!" );
  189. assert.ok( ! b.intersectsBox( a ), "Passed!" );
  190. assert.ok( ! b.intersectsBox( c ), "Passed!" );
  191. } );
  192. QUnit.test( "clampPoint", ( assert ) => {
  193. var a = new Box2( zero2.clone(), zero2.clone() );
  194. var b = new Box2( one2.clone().negate(), one2.clone() );
  195. var point = new Vector2();
  196. a.clampPoint( zero2, point );
  197. assert.ok( point.equals( new Vector2( 0, 0 ) ), "Passed!" );
  198. a.clampPoint( one2, point );
  199. assert.ok( point.equals( new Vector2( 0, 0 ) ), "Passed!" );
  200. a.clampPoint( one2.clone().negate(), point );
  201. assert.ok( point.equals( new Vector2( 0, 0 ) ), "Passed!" );
  202. b.clampPoint( two2, point );
  203. assert.ok( point.equals( new Vector2( 1, 1 ) ), "Passed!" );
  204. b.clampPoint( one2, point );
  205. assert.ok( point.equals( new Vector2( 1, 1 ) ), "Passed!" );
  206. b.clampPoint( zero2, point );
  207. assert.ok( point.equals( new Vector2( 0, 0 ) ), "Passed!" );
  208. b.clampPoint( one2.clone().negate(), point );
  209. assert.ok( point.equals( new Vector2( - 1, - 1 ) ), "Passed!" );
  210. b.clampPoint( two2.clone().negate(), point );
  211. assert.ok( point.equals( new Vector2( - 1, - 1 ) ), "Passed!" );
  212. } );
  213. QUnit.test( "distanceToPoint", ( assert ) => {
  214. var a = new Box2( zero2.clone(), zero2.clone() );
  215. var b = new Box2( one2.clone().negate(), one2.clone() );
  216. assert.ok( a.distanceToPoint( new Vector2( 0, 0 ) ) == 0, "Passed!" );
  217. assert.ok( a.distanceToPoint( new Vector2( 1, 1 ) ) == Math.sqrt( 2 ), "Passed!" );
  218. assert.ok( a.distanceToPoint( new Vector2( - 1, - 1 ) ) == Math.sqrt( 2 ), "Passed!" );
  219. assert.ok( b.distanceToPoint( new Vector2( 2, 2 ) ) == Math.sqrt( 2 ), "Passed!" );
  220. assert.ok( b.distanceToPoint( new Vector2( 1, 1 ) ) == 0, "Passed!" );
  221. assert.ok( b.distanceToPoint( new Vector2( 0, 0 ) ) == 0, "Passed!" );
  222. assert.ok( b.distanceToPoint( new Vector2( - 1, - 1 ) ) == 0, "Passed!" );
  223. assert.ok( b.distanceToPoint( new Vector2( - 2, - 2 ) ) == Math.sqrt( 2 ), "Passed!" );
  224. } );
  225. QUnit.test( "intersect", ( assert ) => {
  226. var a = new Box2( zero2.clone(), zero2.clone() );
  227. var b = new Box2( zero2.clone(), one2.clone() );
  228. var c = new Box2( one2.clone().negate(), one2.clone() );
  229. assert.ok( a.clone().intersect( a ).equals( a ), "Passed!" );
  230. assert.ok( a.clone().intersect( b ).equals( a ), "Passed!" );
  231. assert.ok( b.clone().intersect( b ).equals( b ), "Passed!" );
  232. assert.ok( a.clone().intersect( c ).equals( a ), "Passed!" );
  233. assert.ok( b.clone().intersect( c ).equals( b ), "Passed!" );
  234. assert.ok( c.clone().intersect( c ).equals( c ), "Passed!" );
  235. } );
  236. QUnit.test( "union", ( assert ) => {
  237. var a = new Box2( zero2.clone(), zero2.clone() );
  238. var b = new Box2( zero2.clone(), one2.clone() );
  239. var c = new Box2( one2.clone().negate(), one2.clone() );
  240. assert.ok( a.clone().union( a ).equals( a ), "Passed!" );
  241. assert.ok( a.clone().union( b ).equals( b ), "Passed!" );
  242. assert.ok( a.clone().union( c ).equals( c ), "Passed!" );
  243. assert.ok( b.clone().union( c ).equals( c ), "Passed!" );
  244. } );
  245. QUnit.test( "translate", ( assert ) => {
  246. var a = new Box2( zero2.clone(), zero2.clone() );
  247. var b = new Box2( zero2.clone(), one2.clone() );
  248. var c = new Box2( one2.clone().negate(), one2.clone() );
  249. var d = new Box2( one2.clone().negate(), zero2.clone() );
  250. assert.ok( a.clone().translate( one2 ).equals( new Box2( one2, one2 ) ), "Passed!" );
  251. assert.ok( a.clone().translate( one2 ).translate( one2.clone().negate() ).equals( a ), "Passed!" );
  252. assert.ok( d.clone().translate( one2 ).equals( b ), "Passed!" );
  253. assert.ok( b.clone().translate( one2.clone().negate() ).equals( d ), "Passed!" );
  254. } );
  255. QUnit.test( "equals", ( assert ) => {
  256. var a = new Box2();
  257. var b = new Box2();
  258. assert.ok( b.equals( a ), "Passed!" );
  259. assert.ok( a.equals( b ), "Passed!" );
  260. a = new Box2( one2, two2 );
  261. b = new Box2( one2, two2 );
  262. assert.ok( b.equals( a ), "Passed!" );
  263. assert.ok( a.equals( b ), "Passed!" );
  264. a = new Box2( one2, two2 );
  265. b = a.clone();
  266. assert.ok( b.equals( a ), "Passed!" );
  267. assert.ok( a.equals( b ), "Passed!" );
  268. a = new Box2( one2, two2 );
  269. b = new Box2( one2, one2 );
  270. assert.ok( ! b.equals( a ), "Passed!" );
  271. assert.ok( ! a.equals( b ), "Passed!" );
  272. a = new Box2();
  273. b = new Box2( one2, one2 );
  274. assert.ok( ! b.equals( a ), "Passed!" );
  275. assert.ok( ! a.equals( b ), "Passed!" );
  276. a = new Box2( one2, two2 );
  277. b = new Box2( one2, one2 );
  278. assert.ok( ! b.equals( a ), "Passed!" );
  279. assert.ok( ! a.equals( b ), "Passed!" );
  280. } );
  281. } );
  282. } );