@woosh/meep-engine 2.110.14 → 2.110.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/package.json +4 -2
  2. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +0 -30
  3. package/src/core/IdPool.spec.js +0 -29
  4. package/src/core/UUID.spec.js +0 -8
  5. package/src/core/binary/32BitEncoder.spec.js +0 -11
  6. package/src/core/binary/Base64.spec.js +0 -14
  7. package/src/core/binary/BinaryBuffer.spec.js +0 -324
  8. package/src/core/binary/BitSet.spec.js +0 -468
  9. package/src/core/binary/EncodingBinaryBuffer.spec.js +0 -16
  10. package/src/core/binary/align_32.spec.js +0 -11
  11. package/src/core/binary/align_4.spec.js +0 -20
  12. package/src/core/binary/data_view/DataViewStructAccessor.spec.js +0 -20
  13. package/src/core/binary/de_interleave_2_bits.spec.js +0 -21
  14. package/src/core/binary/dec2hex.spec.js +0 -13
  15. package/src/core/binary/hex2dec.spec.js +0 -22
  16. package/src/core/binary/int32_to_binary_string.spec.js +0 -9
  17. package/src/core/binary/operations/bitCount.spec.js +0 -19
  18. package/src/core/binary/operations/ceilPowerOfTwo.spec.js +0 -17
  19. package/src/core/binary/reverse_bits_uint32.spec.js +0 -18
  20. package/src/core/binary/split_by_2.spec.js +0 -22
  21. package/src/core/binary/split_by_3.spec.js +0 -22
  22. package/src/core/binary/uint8_to_float.spec.js +0 -7
  23. package/src/core/bvh2/binary/2/BinaryUint32BVH.spec.js +0 -136
  24. package/src/core/bvh2/bvh3/BVH.spec.js +0 -361
  25. package/src/core/bvh2/bvh3/BvhClient.spec.js +0 -51
  26. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.spec.js +0 -60
  27. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.spec.js +0 -22
  28. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.spec.js +0 -64
  29. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.spec.js +0 -29
  30. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point.spec.js +0 -209
  31. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.spec.js +0 -41
  32. package/src/core/cache/Cache.spec.js +0 -277
  33. package/src/core/cache/FrequencySketch.spec.js +0 -5
  34. package/src/core/cache/LoadingCache.spec.js +0 -120
  35. package/src/core/codegen/LineBuilder.spec.js +0 -41
  36. package/src/core/collection/CuckooFilter.spec.js +0 -111
  37. package/src/core/collection/RingBuffer.spec.js +0 -59
  38. package/src/core/collection/Stack.spec.js +0 -63
  39. package/src/core/collection/array/arrayPickBestElement.spec.js +0 -7
  40. package/src/core/collection/array/arraySetSortingDiff.spec.js +0 -74
  41. package/src/core/collection/array/array_contains_duplicates.spec.js +0 -14
  42. package/src/core/collection/array/array_copy.spec.js +0 -19
  43. package/src/core/collection/array/array_deduplicate.spec.js +0 -11
  44. package/src/core/collection/array/array_get_index_in_range.spec.js +0 -16
  45. package/src/core/collection/array/array_remove_first.spec.js +0 -39
  46. package/src/core/collection/array/array_shuffle.spec.js +0 -27
  47. package/src/core/collection/array/binarySearchHighIndex.spec.js +0 -51
  48. package/src/core/collection/array/isArrayEqual.spec.js +0 -25
  49. package/src/core/collection/array/typed/is_typed_array_equals.spec.js +0 -71
  50. package/src/core/collection/array/weightedRandomFromArray.spec.js +0 -22
  51. package/src/core/collection/heap/BinaryHeap.spec.js +0 -137
  52. package/src/core/collection/heap/Uint32Heap.spec.js +0 -172
  53. package/src/core/collection/list/List.spec.js +0 -438
  54. package/src/core/collection/list/ListForwarder.spec.js +0 -101
  55. package/src/core/collection/map/HashMap.spec.js +0 -291
  56. package/src/core/collection/queue/Deque.spec.js +0 -276
  57. package/src/core/collection/set/HashSet.spec.js +0 -39
  58. package/src/core/collection/set/compute_set_difference.spec.js +0 -45
  59. package/src/core/collection/set/compute_set_intersection.spec.js +0 -45
  60. package/src/core/collection/table/RowFirstTable.spec.js +0 -323
  61. package/src/core/collection/table/RowFirstTableSpec.spec.js +0 -49
  62. package/src/core/collection/table/bind/TableRecord.spec.js +0 -27
  63. package/src/core/color/Color.spec.js +0 -174
  64. package/src/core/color/YCbCr/YCbCr.spec.js +0 -16
  65. package/src/core/color/hex/hex2rgb.spec.js +0 -10
  66. package/src/core/color/hex/rgb2hex.spec.js +0 -13
  67. package/src/core/color/hsv/hsv2rgb.spec.js +0 -43
  68. package/src/core/color/kelvin/kelvin_to_rgb.spec.js +0 -61
  69. package/src/core/color/kelvin/rgb_to_kelvin.spec.js +0 -15
  70. package/src/core/color/oklab/Okhsv.spec.js +0 -17
  71. package/src/core/color/oklab/XYZ.spec.js +0 -17
  72. package/src/core/color/oklab/oklab_to_xyz.spec.js +0 -31
  73. package/src/core/color/oklab/xyz_to_oklab.spec.js +0 -31
  74. package/src/core/color/parse_color.spec.js +0 -18
  75. package/src/core/color/sRGB/sRGB.spec.js +0 -16
  76. package/src/core/color/xyz/XYZ.spec.js +0 -16
  77. package/src/core/events/signal/Signal.spec.js +0 -253
  78. package/src/core/events/signal/SignalBinding.spec.js +0 -58
  79. package/src/core/fsm/simple/SimpleStateMachine.spec.js +0 -107
  80. package/src/core/fsm/simple/SimpleStateMachineDescription.spec.js +0 -103
  81. package/src/core/function/extractFunctionBody.spec.js +0 -15
  82. package/src/core/geom/2d/Rectangle.spec.js +0 -62
  83. package/src/core/geom/2d/aabb/AABB2.spec.js +0 -153
  84. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.spec.js +0 -11
  85. package/src/core/geom/2d/aabb/aabb2_compute_overlap.spec.js +0 -56
  86. package/src/core/geom/2d/aabb/aabb2_contains.spec.js +0 -40
  87. package/src/core/geom/2d/aabb/aabb2_distance_to_point.spec.js +0 -17
  88. package/src/core/geom/2d/aabb/aabb2_intersects_ray.spec.js +0 -28
  89. package/src/core/geom/2d/aabb/aabb2_signed_distance_sqr_to_point.spec.js +0 -40
  90. package/src/core/geom/2d/bvh/BVH2D.spec.js +0 -359
  91. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.js +0 -89
  92. package/src/core/geom/2d/circle/circle_compute_circle_intersection.spec.js +0 -79
  93. package/src/core/geom/2d/compute_polygon_area_2d.spec.js +0 -10
  94. package/src/core/geom/2d/compute_triangle_area_2d.spec.js +0 -9
  95. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.spec.js +0 -33
  96. package/src/core/geom/2d/convex-hull/convex_hull_monotone_2d.spec.js +0 -33
  97. package/src/core/geom/2d/hash-grid/SpatialHashGrid.spec.js +0 -254
  98. package/src/core/geom/2d/hash-grid/shg_query_elements_circle.spec.js +0 -85
  99. package/src/core/geom/2d/hash-grid/shg_query_elements_line.spec.js +0 -102
  100. package/src/core/geom/2d/quad-tree/QuadTreeNode.spec.js +0 -235
  101. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.spec.js +0 -86
  102. package/src/core/geom/2d/quad-tree-binary/QuadTree.spec.js +0 -53
  103. package/src/core/geom/2d/r-tree/StaticR2Tree.spec.js +0 -62
  104. package/src/core/geom/2d/spline_bezier2_2d.spec.js +0 -16
  105. package/src/core/geom/2d/uv_map_circle_to_square.spec.js +0 -28
  106. package/src/core/geom/2d/uv_map_square_to_circle.spec.js +0 -30
  107. package/src/core/geom/3d/SurfacePoint3.spec.js +0 -116
  108. package/src/core/geom/3d/aabb/AABB3.spec.js +0 -257
  109. package/src/core/geom/3d/aabb/aabb3_array_intersects_point.spec.js +0 -48
  110. package/src/core/geom/3d/aabb/aabb3_build_corners.spec.js +0 -27
  111. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_max.spec.js +0 -8
  112. package/src/core/geom/3d/aabb/aabb3_compute_plane_side.spec.js +0 -25
  113. package/src/core/geom/3d/aabb/aabb3_corner_edge_mapping.spec.js +0 -39
  114. package/src/core/geom/3d/aabb/aabb3_edge_corner_mapping.spec.js +0 -32
  115. package/src/core/geom/3d/aabb/aabb3_expand_array.spec.js +0 -16
  116. package/src/core/geom/3d/aabb/aabb3_from_v3_array.spec.js +0 -32
  117. package/src/core/geom/3d/aabb/aabb3_intersects_aabb3.spec.js +0 -115
  118. package/src/core/geom/3d/aabb/aabb3_intersects_ray.spec.js +0 -161
  119. package/src/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +0 -54
  120. package/src/core/geom/3d/aabb/aabb3_raycast.spec.js +0 -37
  121. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.spec.js +0 -14
  122. package/src/core/geom/3d/cone/computeConePlaneSide.spec.js +0 -13
  123. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.spec.js +0 -95
  124. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.spec.js +0 -61
  125. package/src/core/geom/3d/mat4/MATRIX_4_IDENTITY.spec.js +0 -10
  126. package/src/core/geom/3d/mat4/m4_multiply.spec.js +0 -34
  127. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.spec.js +0 -35
  128. package/src/core/geom/3d/morton/v3_morton_encode_transformed.spec.js +0 -20
  129. package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +0 -41
  130. package/src/core/geom/3d/normal/octahedron/encoding.spec.js +0 -54
  131. package/src/core/geom/3d/plane/plane3_projectPoint.spec.js +0 -54
  132. package/src/core/geom/3d/plane/plane3_slerp.spec.js +0 -209
  133. package/src/core/geom/3d/ray/ray3_array_compose.spec.js +0 -14
  134. package/src/core/geom/3d/shape/TransformedShape3D.spec.js +0 -55
  135. package/src/core/geom/3d/shape/UnitCubeShape3D.spec.js +0 -42
  136. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.spec.js +0 -53
  137. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +0 -27
  138. package/src/core/geom/3d/sphere/sphere_intersects_point.spec.js +0 -134
  139. package/src/core/geom/3d/sphere/sphere_intersects_ray.spec.js +0 -60
  140. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.spec.js +0 -8
  141. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.spec.js +0 -233
  142. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +0 -66
  143. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +0 -36
  144. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js +0 -61
  145. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_compute_sub_determinant.spec.js +0 -30
  146. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.spec.js +0 -24
  147. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.spec.js +0 -66
  148. package/src/core/geom/3d/topology/simplify/collapseEdge.spec.js +0 -24
  149. package/src/core/geom/3d/topology/struct/TopoEdge.spec.js +0 -52
  150. package/src/core/geom/3d/topology/struct/TopoVertex.spec.js +0 -128
  151. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.spec.js +0 -36
  152. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.spec.js +0 -16
  153. package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.spec.js +0 -84
  154. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.spec.js +0 -15
  155. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_other_vertex.spec.js +0 -16
  156. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.spec.js +0 -100
  157. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.spec.js +0 -25
  158. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.spec.js +0 -26
  159. package/src/core/geom/3d/v3_compute_triangle_normal.spec.js +0 -46
  160. package/src/core/geom/ConicRay.spec.js +0 -24
  161. package/src/core/geom/Quaternion.spec.js +0 -429
  162. package/src/core/geom/Vector1.spec.js +0 -74
  163. package/src/core/geom/Vector2.spec.js +0 -295
  164. package/src/core/geom/Vector3.spec.js +0 -285
  165. package/src/core/geom/Vector4.spec.js +0 -11
  166. package/src/core/geom/normalize_angle_rad.spec.js +0 -45
  167. package/src/core/geom/packing/computeBoundingSphereOfSpheres.spec.js +0 -24
  168. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.spec.js +0 -60
  169. package/src/core/geom/packing/miniball/Miniball.spec.js +0 -35
  170. package/src/core/geom/packing/miniball/Subspan.spec.js +0 -51
  171. package/src/core/geom/random/randomPointOnBox.spec.js +0 -57
  172. package/src/core/geom/vec/vector_normalize.spec.js +0 -15
  173. package/src/core/geom/vec3/v3_angle_cos_between.spec.js +0 -124
  174. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +0 -80
  175. package/src/core/geom/vec3/v3_distance_above_plane.spec.js +0 -40
  176. package/src/core/graph/Edge.spec.js +0 -85
  177. package/src/core/graph/SquareMatrix.spec.js +0 -102
  178. package/src/core/graph/coloring/colorizeGraphGreedy.spec.js +0 -26
  179. package/src/core/graph/convert_graph_to_dot_string.spec.js +0 -28
  180. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +0 -57
  181. package/src/core/graph/graph_k_means_cluster.spec.js +0 -23
  182. package/src/core/graph/mn_graph_coarsen.spec.js +0 -45
  183. package/src/core/graph/v2/Graph.spec.js +0 -364
  184. package/src/core/json/resolvePath.spec.js +0 -14
  185. package/src/core/lang/reactive/compileReactiveExpression.spec.js +0 -169
  186. package/src/core/math/bessel_j0.spec.js +0 -43
  187. package/src/core/math/clamp.spec.js +0 -15
  188. package/src/core/math/computeGreatestCommonDivisor.spec.js +0 -9
  189. package/src/core/math/computeIsoscelesTriangleApexAngle.spec.js +0 -6
  190. package/src/core/math/computeWholeDivisorLow.spec.js +0 -9
  191. package/src/core/math/copysign.spec.js +0 -13
  192. package/src/core/math/epsilonEquals.spec.js +0 -17
  193. package/src/core/math/factorial.spec.js +0 -9
  194. package/src/core/math/fract.spec.js +0 -11
  195. package/src/core/math/hash/computeHashFloatArray.spec.js +0 -11
  196. package/src/core/math/hash/computeObjectHash.spec.js +0 -42
  197. package/src/core/math/hash/murmur3_32.spec.js +0 -8
  198. package/src/core/math/hash/squirrel3.spec.js +0 -16
  199. package/src/core/math/iabs.spec.js +0 -9
  200. package/src/core/math/interval/NumericInterval.spec.js +0 -89
  201. package/src/core/math/interval/isValueBetween.spec.js +0 -11
  202. package/src/core/math/interval/isValueBetweenInclusive.spec.js +0 -16
  203. package/src/core/math/interval/overlap1D.spec.js +0 -10
  204. package/src/core/math/inverseLerp.spec.js +0 -13
  205. package/src/core/math/isPowerOfTwo.spec.js +0 -9
  206. package/src/core/math/isqrt.spec.js +0 -9
  207. package/src/core/math/lerp.spec.js +0 -15
  208. package/src/core/math/linalg/solve_linear_system.spec.js +0 -70
  209. package/src/core/math/max.spec.js +0 -25
  210. package/src/core/math/max2.spec.js +0 -13
  211. package/src/core/math/max3.spec.js +0 -29
  212. package/src/core/math/min2.spec.js +0 -37
  213. package/src/core/math/min3.spec.js +0 -29
  214. package/src/core/math/newton_solver_1d.spec.js +0 -9
  215. package/src/core/math/nextOdd.spec.js +0 -9
  216. package/src/core/math/noise/create_simplex_noise_2d.spec.js +0 -21
  217. package/src/core/math/noise/sdnoise.spec.js +0 -87
  218. package/src/core/math/physics/irradiance/interpolate_irradiance_linear.spec.js +0 -20
  219. package/src/core/math/physics/irradiance/interpolate_irradiance_lograrithmic.spec.js +0 -18
  220. package/src/core/math/physics/irradiance/interpolate_irradiance_smith.spec.js +0 -20
  221. package/src/core/math/pingpong.spec.js +0 -11
  222. package/src/core/math/random/MersenneTwister.spec.js +0 -19
  223. package/src/core/math/random/randomFloatBetween.spec.js +0 -9
  224. package/src/core/math/random/randomGaussian.spec.js +0 -9
  225. package/src/core/math/random/randomIntegerBetween.spec.js +0 -8
  226. package/src/core/math/random/roundFair.spec.js +0 -12
  227. package/src/core/math/random/seededRandomMersenneTwister.spec.js +0 -10
  228. package/src/core/math/random/seededRandom_Mulberry32.spec.js +0 -19
  229. package/src/core/math/remap.spec.js +0 -15
  230. package/src/core/math/sign.spec.js +0 -13
  231. package/src/core/math/smoothStep.spec.js +0 -16
  232. package/src/core/math/smootherStep.spec.js +0 -16
  233. package/src/core/math/solveQuadratic.spec.js +0 -18
  234. package/src/core/math/spline/cubicCurve.spec.js +0 -13
  235. package/src/core/math/spline/makeCubicCurve.spec.js +0 -9
  236. package/src/core/math/spline/spline_bezier2.spec.js +0 -13
  237. package/src/core/math/spline/spline_bezier3_bounds.spec.js +0 -37
  238. package/src/core/math/spline/spline_hermite3.spec.js +0 -18
  239. package/src/core/math/spline/spline_hermite3_bounds.spec.js +0 -37
  240. package/src/core/math/statistics/computeSampleSize_Cochran.spec.js +0 -12
  241. package/src/core/math/statistics/computeStatisticalMean.spec.js +0 -9
  242. package/src/core/math/statistics/computeStatisticalPartialMedian.spec.js +0 -13
  243. package/src/core/math/statistics/computeStatisticalPercentile.spec.js +0 -11
  244. package/src/core/math/statistics/computeStatisticalVariance.spec.js +0 -10
  245. package/src/core/math/statistics/halton_sequence.spec.js +0 -40
  246. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +0 -9
  247. package/src/core/math/statistics/softmax.spec.js +0 -9
  248. package/src/core/model/BooleanVector3.spec.js +0 -51
  249. package/src/core/model/BoundedValue.spec.js +0 -17
  250. package/src/core/model/ModuleRegistry.spec.js +0 -31
  251. package/src/core/model/ObservedBoolean.spec.js +0 -81
  252. package/src/core/model/ObservedInteger.spec.js +0 -51
  253. package/src/core/model/node-graph/Connection.spec.js +0 -33
  254. package/src/core/model/node-graph/NodeGraph.spec.js +0 -107
  255. package/src/core/model/node-graph/node/NodeDescription.spec.js +0 -81
  256. package/src/core/model/node-graph/node/NodeInstance.spec.js +0 -82
  257. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +0 -109
  258. package/src/core/model/node-graph/node/NodeRegistry.spec.js +0 -123
  259. package/src/core/model/node-graph/node/Port.spec.js +0 -102
  260. package/src/core/model/node-graph/type/DataType.spec.js +0 -47
  261. package/src/core/model/node-graph/type/ParametricDataType.spec.js +0 -63
  262. package/src/core/model/node-graph/visual/PortVisualData.spec.js +0 -16
  263. package/src/core/model/object/ObjectPoolFactory.spec.js +0 -54
  264. package/src/core/model/object/objectDeepEquals.spec.js +0 -54
  265. package/src/core/model/object/write_property.spec.js +0 -26
  266. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +0 -158
  267. package/src/core/model/reactive/js/compileReactiveToJS.spec.js +0 -14
  268. package/src/core/model/reactive/model/logic/ReactiveAnd.spec.js +0 -51
  269. package/src/core/model/reactive/model/logic/ReactiveOr.spec.js +0 -53
  270. package/src/core/model/reactive/model/terminal/ReactiveReference.spec.js +0 -26
  271. package/src/core/model/reactive/trigger/BlackboardTrigger.spec.js +0 -24
  272. package/src/core/model/reactive/trigger/ReactiveTrigger.spec.js +0 -5
  273. package/src/core/model/stat/LinearModifier.spec.js +0 -96
  274. package/src/core/model/stat/Stat.spec.js +0 -111
  275. package/src/core/parser/simple/readHexToken.spec.js +0 -21
  276. package/src/core/parser/simple/readIdentifierToken.spec.js +0 -32
  277. package/src/core/parser/simple/readNumberToken.spec.js +0 -17
  278. package/src/core/parser/simple/readReferenceToken.spec.js +0 -18
  279. package/src/core/parser/simple/readStringToken.spec.js +0 -57
  280. package/src/core/parser/simple/readUnsignedIntegerToken.spec.js +0 -6
  281. package/src/core/path/computeFileExtension.spec.js +0 -13
  282. package/src/core/path/computePathBase.spec.js +0 -13
  283. package/src/core/path/computePathDirectory.spec.js +0 -8
  284. package/src/core/primitives/array/computeStridedIntegerArrayHash.spec.js +0 -28
  285. package/src/core/primitives/numbers/computeHashFloat.spec.js +0 -14
  286. package/src/core/primitives/numbers/number_compare_ascending.spec.js +0 -9
  287. package/src/core/primitives/numbers/number_compare_descending.spec.js +0 -9
  288. package/src/core/primitives/numbers/number_format_by_thousands.spec.js +0 -12
  289. package/src/core/primitives/numbers/number_pretty_print.spec.js +0 -19
  290. package/src/core/primitives/strings/compareStrings.spec.js +0 -12
  291. package/src/core/primitives/strings/computeStringHash.spec.js +0 -20
  292. package/src/core/primitives/strings/insert_after.spec.js +0 -16
  293. package/src/core/primitives/strings/insert_before.spec.js +0 -16
  294. package/src/core/primitives/strings/string_capitalize.spec.js +0 -13
  295. package/src/core/primitives/strings/string_compute_common_prefix.spec.js +0 -23
  296. package/src/core/primitives/strings/string_format_camel_to_kebab.spec.js +0 -8
  297. package/src/core/primitives/strings/string_jaro_winkler.spec.js +0 -39
  298. package/src/core/primitives/strings/string_strip_trailing.spec.js +0 -27
  299. package/src/core/process/PromiseWatcher.spec.js +0 -69
  300. package/src/core/process/executor/ConcurrentExecutor.spec.js +0 -135
  301. package/src/core/process/task/util/actionTask.spec.js +0 -14
  302. package/src/core/process/task/util/countTask.spec.js +0 -18
  303. package/src/core/process/undo/ActionProcessor.spec.js +0 -64
  304. package/src/engine/Clock.spec.js +0 -26
  305. package/src/engine/Engine.spec.js +0 -15
  306. package/src/engine/achievements/Achievement.spec.js +0 -21
  307. package/src/engine/animation/curve/AnimationCurve.spec.js +0 -248
  308. package/src/engine/animation/curve/Keyframe.spec.js +0 -42
  309. package/src/engine/animation/curve/animation_curve_optimize.spec.js +0 -50
  310. package/src/engine/animation/curve/compression/downsample_float_array_curve_by_error.spec.js +0 -47
  311. package/src/engine/animation/curve/compression/sample_animation_curve_to_float_array.spec.js +0 -29
  312. package/src/engine/animation/keyed2/AnimationTrackPlayback.spec.js +0 -94
  313. package/src/engine/asset/AssetDescription.spec.js +0 -27
  314. package/src/engine/asset/AssetManager.spec.js +0 -50
  315. package/src/engine/asset/loaders/image/png/PNG.spec.js +0 -5
  316. package/src/engine/asset/loaders/image/png/PNGReader.spec.js +0 -5
  317. package/src/engine/asset/loaders/image/png/crc.spec.js +0 -15
  318. package/src/engine/control/ControlContext.spec.js +0 -81
  319. package/src/engine/ecs/Entity.spec.js +0 -188
  320. package/src/engine/ecs/EntityBlueprint.spec.js +0 -52
  321. package/src/engine/ecs/EntityComponentDataset.spec.js +0 -895
  322. package/src/engine/ecs/EntityManager.spec.js +0 -210
  323. package/src/engine/ecs/EntityObserver.spec.js +0 -184
  324. package/src/engine/ecs/animation/Animation.spec.js +0 -22
  325. package/src/engine/ecs/animation/AnimationClip.spec.js +0 -5
  326. package/src/engine/ecs/components/Tag.spec.js +0 -47
  327. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.spec.js +0 -126
  328. package/src/engine/ecs/fow/FogOfWar.spec.js +0 -13
  329. package/src/engine/ecs/guid/UUID.spec.js +0 -100
  330. package/src/engine/ecs/guid/UUIDSerializationAdapter.spec.js +0 -21
  331. package/src/engine/ecs/parent/EntityNode.spec.js +0 -104
  332. package/src/engine/ecs/renderable/Renderable.spec.js +0 -10
  333. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.spec.js +0 -139
  334. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerialization.spec.js +0 -259
  335. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.spec.js +0 -59
  336. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.spec.js +0 -123
  337. package/src/engine/ecs/terrain/ecs/Terrain.spec.js +0 -5
  338. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.spec.js +0 -38
  339. package/src/engine/ecs/terrain/overlay/TerrainOverlay.spec.js +0 -6
  340. package/src/engine/ecs/terrain/tiles/TerrainTile.spec.js +0 -25
  341. package/src/engine/ecs/tooltip/TooltipComponent.spec.js +0 -47
  342. package/src/engine/ecs/transform/Transform.spec.js +0 -310
  343. package/src/engine/ecs/transform/TransformSerializationAdapter.spec.js +0 -28
  344. package/src/engine/ecs/transform-attachment/TransformAttachment.spec.js +0 -103
  345. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.spec.js +0 -5
  346. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.spec.js +0 -5
  347. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.spec.js +0 -94
  348. package/src/engine/graphics/ecs/decal/v2/Decal.spec.js +0 -5
  349. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.spec.js +0 -19
  350. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.spec.js +0 -5
  351. package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.spec.js +0 -79
  352. package/src/engine/graphics/ecs/path/tube/TubePathStyle.spec.js +0 -5
  353. package/src/engine/graphics/ecs/path/tube/build/build_geometry_catmullrom.spec.js +0 -32
  354. package/src/engine/graphics/geometry/MikkT/MikkTSpace.spec.js +0 -28
  355. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.spec.js +0 -22
  356. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.spec.js +0 -70
  357. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.spec.js +0 -47
  358. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +0 -100
  359. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +0 -225
  360. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.spec.js +0 -215
  361. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.spec.js +0 -75
  362. package/src/engine/graphics/particles/particular/group/ParticleGroup.spec.js +0 -270
  363. package/src/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.spec.js +0 -21
  364. package/src/engine/graphics/render/forward_plus/LightManager.spec.js +0 -94
  365. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.spec.js +0 -79
  366. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.spec.js +0 -102
  367. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +0 -78
  368. package/src/engine/graphics/texture/atlas/TextureAtlas.spec.js +0 -319
  369. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +0 -99
  370. package/src/engine/graphics/texture/sampler/Sampler2D.spec.js +0 -224
  371. package/src/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.spec.js +0 -90
  372. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_NaiveFlood.spec.js +0 -183
  373. package/src/engine/graphics/texture/sampler/distance/computeUnsignedDistanceField.spec.js +0 -183
  374. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale.spec.js +0 -73
  375. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.spec.js +0 -31
  376. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_linear.spec.js +0 -44
  377. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_mipmap.spec.js +0 -13
  378. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_up_linear.spec.js +0 -14
  379. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.spec.js +0 -40
  380. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.spec.js +0 -15
  381. package/src/engine/graphics/texture/sampler/sampler2d_copy_with_margins.spec.js +0 -31
  382. package/src/engine/graphics/texture/sampler/sampler2d_to_data_url.spec.js +0 -10
  383. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.spec.js +0 -52
  384. package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.spec.js +0 -38
  385. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.spec.js +0 -108
  386. package/src/engine/graphics/trail/x/RibbonX.spec.js +0 -5
  387. package/src/engine/grid/obstacle/GridObstacle.spec.js +0 -175
  388. package/src/engine/input/devices/InputDeviceSwitch.spec.js +0 -5
  389. package/src/engine/input/devices/KeyboardDevice.spec.js +0 -12
  390. package/src/engine/input/devices/PointerDevice.spec.js +0 -12
  391. package/src/engine/intelligence/behavior/Behavior.spec.js +0 -15
  392. package/src/engine/intelligence/behavior/SelectorBehavior.spec.js +0 -18
  393. package/src/engine/intelligence/behavior/behavior_to_dot.spec.js +0 -25
  394. package/src/engine/intelligence/behavior/composite/ParallelBehavior.spec.js +0 -166
  395. package/src/engine/intelligence/behavior/composite/SequenceBehavior.spec.js +0 -17
  396. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.spec.js +0 -32
  397. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.spec.js +0 -75
  398. package/src/engine/intelligence/behavior/util/ConditionBehavior.spec.js +0 -24
  399. package/src/engine/intelligence/blackboard/Blackboard.spec.js +0 -111
  400. package/src/engine/intelligence/blackboard/BlackboardSerializationAdapter.spec.js +0 -30
  401. package/src/engine/intelligence/blackboard/make_blackboard_proxy.spec.js +0 -23
  402. package/src/engine/intelligence/mcts/MonteCarlo.spec.js +0 -244
  403. package/src/engine/intelligence/mcts/StateNode.spec.js +0 -49
  404. package/src/engine/intelligence/optimization/RandomOptimizer.spec.js +0 -57
  405. package/src/engine/intelligence/resource/ResourceAllocationSolver.spec.js +0 -104
  406. package/src/engine/intelligence/resource/StrategicResourceAllocator.spec.js +0 -46
  407. package/src/engine/knowledge/database/StaticKnowledgeDataTable.spec.js +0 -26
  408. package/src/engine/knowledge/database/StaticKnowledgeDatabase.spec.js +0 -23
  409. package/src/engine/navigation/ecs/components/Path.spec.js +0 -195
  410. package/src/engine/navigation/ecs/path_following/PathFollower.spec.js +0 -27
  411. package/src/engine/navigation/grid/find_path_on_grid_astar.spec.js +0 -87
  412. package/src/engine/notify/NotificationLog.spec.js +0 -17
  413. package/src/engine/options/Option.spec.js +0 -69
  414. package/src/engine/options/OptionGroup.spec.js +0 -61
  415. package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.js +0 -46
  416. package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.js +0 -43
  417. package/src/engine/plugin/EnginePlugin.spec.js +0 -5
  418. package/src/engine/reference/v2/Reference.spec.js +0 -44
  419. package/src/engine/scene/Scene.spec.js +0 -20
  420. package/src/engine/scene/SceneManager.spec.js +0 -131
  421. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.spec.js +0 -49
  422. package/src/engine/ui/tiles2d/TileGrid.spec.js +0 -20
  423. package/src/engine/ui/tiles2d/computeTileGridMove.spec.js +0 -54
  424. package/src/generation/automata/CaveGeneratorCellularAutomata.spec.js +0 -12
  425. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.spec.js +0 -30
  426. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.spec.js +0 -17
  427. package/src/generation/filtering/numeric/process/computeCellFilterGradient.spec.js +0 -288
  428. package/src/generation/grid/GridData.spec.js +0 -46
  429. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.spec.js +0 -116
  430. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +0 -106
  431. package/src/generation/placement/action/GridCellActionPlaceTags.spec.js +0 -21
  432. package/src/generation/rules/CellMatcherLayerBitMaskTest.spec.js +0 -22
  433. package/src/generation/rules/cell/GridPatternMatcher.spec.js +0 -285
  434. package/src/generation/theme/ThemeEngine.spec.js +0 -7
  435. package/src/view/tooltip/gml/TooltipParser.spec.js +0 -142
@@ -1,895 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { noop } from "../../core/function/noop.js";
3
- import { EntityComponentDataset } from "./EntityComponentDataset.js";
4
- import { EventType } from "./EntityManager.js";
5
- import { EntityObserver } from "./EntityObserver.js";
6
-
7
- class DummyComponentA {
8
- }
9
-
10
- DummyComponentA.typeName = "DummyComponentA";
11
-
12
- class DummyComponentB {
13
- }
14
-
15
- DummyComponentB.typeName = "DummyComponentB";
16
-
17
- test("constructor doesn't throw", () => {
18
- new EntityComponentDataset();
19
- });
20
-
21
- test("create empty entity", () => {
22
- const dataset = new EntityComponentDataset();
23
- const entity = dataset.createEntity();
24
-
25
- expect(dataset.entityExists(entity)).toBe(true);
26
- });
27
-
28
-
29
- test("create empty entity then destroy", () => {
30
- const dataset = new EntityComponentDataset();
31
- const entity = dataset.createEntity();
32
-
33
- expect(dataset.entityExists(entity)).toBe(true);
34
-
35
- dataset.removeEntity(entity);
36
-
37
- expect(dataset.entityExists(entity)).toBe(false);
38
- });
39
-
40
- test("onEntityCreated signal", () => {
41
- const fn = jest.fn();
42
-
43
- const dataset = new EntityComponentDataset();
44
-
45
- dataset.onEntityCreated.add(fn);
46
-
47
- const entityId = dataset.createEntity();
48
-
49
- expect(fn).toHaveBeenCalledTimes(1);
50
-
51
- expect(fn).toHaveBeenLastCalledWith(entityId);
52
- });
53
-
54
- test("onEntityRemoved signal", () => {
55
- const fn = jest.fn();
56
-
57
- const dataset = new EntityComponentDataset();
58
-
59
- dataset.onEntityRemoved.add(fn);
60
-
61
- const entityId = dataset.createEntity();
62
-
63
- expect(fn).not.toHaveBeenCalled();
64
-
65
- dataset.removeEntity(entityId);
66
-
67
- expect(fn).toHaveBeenCalledTimes(1);
68
-
69
- expect(fn).toHaveBeenLastCalledWith(entityId);
70
- });
71
-
72
- test("can alter component map when number of entities is > 0 when no live components are affected", () => {
73
- const dataset = new EntityComponentDataset();
74
-
75
- dataset.createEntity();
76
-
77
- dataset.setComponentTypeMap([DummyComponentA]);
78
-
79
- expect(dataset.getComponentTypeMap()).toEqual([DummyComponentA]);
80
-
81
- expect(dataset.getComponentTypeCount()).toBe(1);
82
- });
83
-
84
- test("componentTypeCount is updated correctly when component map is set", () => {
85
- const dataset = new EntityComponentDataset();
86
-
87
- expect(dataset.getComponentTypeCount()).toBe(0);
88
-
89
- dataset.setComponentTypeMap([DummyComponentA]);
90
-
91
- expect(dataset.getComponentTypeCount()).toBe(1);
92
-
93
- dataset.setComponentTypeMap([DummyComponentB]);
94
-
95
- expect(dataset.getComponentTypeCount()).toBe(1);
96
-
97
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
98
-
99
- expect(dataset.getComponentTypeCount()).toBe(2);
100
-
101
- dataset.setComponentTypeMap([]);
102
-
103
- expect(dataset.getComponentTypeCount()).toBe(0);
104
- });
105
-
106
- test("entityCount is updated correctly when entities are added and removed", () => {
107
- const dataset = new EntityComponentDataset();
108
-
109
- expect(dataset.getEntityCount()).toBe(0);
110
-
111
- const a = dataset.createEntity();
112
-
113
- expect(dataset.getEntityCount()).toBe(1);
114
-
115
- const b = dataset.createEntity();
116
- const c = dataset.createEntity();
117
-
118
- expect(dataset.getEntityCount()).toBe(3);
119
-
120
- dataset.removeEntity(b);
121
-
122
- expect(dataset.getEntityCount()).toBe(2);
123
-
124
- dataset.removeEntity(a);
125
-
126
- expect(dataset.getEntityCount()).toBe(1);
127
-
128
- dataset.removeEntity(c);
129
-
130
- expect(dataset.getEntityCount()).toBe(0);
131
- });
132
-
133
- test("addComponentToEntity", () => {
134
- const dataset = new EntityComponentDataset();
135
-
136
- dataset.setComponentTypeMap([DummyComponentA]);
137
-
138
- const entityA = dataset.createEntity();
139
-
140
- const componentA = new DummyComponentA();
141
-
142
- dataset.addComponentToEntityByIndex(entityA, 0, componentA);
143
-
144
- expect(dataset.getComponentByIndex(entityA, 0)).toBe(componentA);
145
-
146
- dataset.removeEntity(entityA);
147
-
148
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
149
-
150
- const componentB = new DummyComponentB();
151
-
152
- const entityB = dataset.createEntity();
153
-
154
- dataset.addComponentToEntityByIndex(entityB, 1, componentA);
155
- dataset.addComponentToEntityByIndex(entityB, 0, componentB);
156
-
157
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(componentB);
158
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(componentA);
159
- });
160
-
161
- test("removeComponentFromEntity", () => {
162
- const dataset = new EntityComponentDataset();
163
-
164
- dataset.setComponentTypeMap([DummyComponentA]);
165
-
166
- const entityA = dataset.createEntity();
167
-
168
- const componentA = new DummyComponentA();
169
-
170
- dataset.addComponentToEntityByIndex(entityA, 0, componentA);
171
- dataset.removeComponentFromEntityByIndex(entityA, 0);
172
-
173
- expect(dataset.getComponentByIndex(entityA, 0)).toBe(undefined);
174
-
175
- dataset.removeEntity(entityA);
176
-
177
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
178
-
179
- const componentB = new DummyComponentB();
180
-
181
- const entityB = dataset.createEntity();
182
-
183
- dataset.addComponentToEntityByIndex(entityB, 1, componentA);
184
- dataset.addComponentToEntityByIndex(entityB, 0, componentB);
185
-
186
- dataset.removeComponentFromEntityByIndex(entityB, 0);
187
-
188
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(undefined);
189
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(componentA);
190
-
191
- dataset.removeComponentFromEntityByIndex(entityB, 1);
192
-
193
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(undefined);
194
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(undefined);
195
- });
196
-
197
- test("removing entity will remove its components also", () => {
198
- const dataset = new EntityComponentDataset();
199
- dataset.setComponentTypeMap([DummyComponentA]);
200
- const handler = jest.fn();
201
-
202
- const entity = dataset.createEntity();
203
-
204
- dataset.addEntityEventListener(entity, EventType.ComponentRemoved, handler);
205
-
206
- const componentInstance = new DummyComponentA();
207
-
208
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
209
-
210
- dataset.removeEntity(entity);
211
-
212
- expect(handler).toHaveBeenCalledTimes(1);
213
- });
214
-
215
- test("removeObserver for multiple components cleans up correctly", () => {
216
- const dataset = new EntityComponentDataset();
217
-
218
- dataset.setComponentTypeMap([DummyComponentA, DummyComponentB]);
219
-
220
- const observer = new EntityObserver([DummyComponentA, DummyComponentB], noop, noop);
221
-
222
- dataset.addObserver(observer);
223
-
224
-
225
- dataset.removeObserver(observer);
226
-
227
-
228
- //check all retained observers to make sure removal has cleaned up correctly
229
- dataset.observers.forEach(store => {
230
- expect(store.indexOf(observer)).toBe(-1);
231
- });
232
- });
233
-
234
- test("remapping components preserves observers", () => {
235
- const dataset = new EntityComponentDataset();
236
- dataset.setComponentTypeMap([DummyComponentA]);
237
-
238
- const aLinked = jest.fn();
239
- const aUnlinked = jest.fn();
240
-
241
- const observerA = new EntityObserver([DummyComponentA], aLinked, aUnlinked);
242
-
243
- dataset.addObserver(observerA);
244
-
245
- //Adding a component
246
- dataset.setComponentTypeMap([DummyComponentA, DummyComponentB]);
247
-
248
- //validate existing observer A
249
- const e0 = dataset.createEntity();
250
-
251
- const a0 = new DummyComponentA();
252
- dataset.addComponentToEntity(e0, a0);
253
-
254
- expect(aLinked).toHaveBeenLastCalledWith(a0, e0);
255
-
256
- const abLinked = jest.fn();
257
- const abUnlinked = jest.fn();
258
-
259
- //introduce second observer
260
- const observerAB = new EntityObserver([DummyComponentA, DummyComponentB], abLinked, abUnlinked);
261
-
262
- dataset.addObserver(observerAB);
263
-
264
- //Changing component order
265
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
266
-
267
- const b0 = new DummyComponentB();
268
- dataset.addComponentToEntity(e0, b0);
269
-
270
- expect(abLinked).toHaveBeenLastCalledWith(a0, b0, e0);
271
-
272
- const e1 = dataset.createEntity();
273
-
274
- const a1 = new DummyComponentA();
275
- dataset.addComponentToEntity(e1, a1);
276
-
277
- expect(aLinked).toHaveBeenLastCalledWith(a1, e1);
278
-
279
- dataset.removeComponentFromEntity(e0, DummyComponentB);
280
-
281
- //remove AB observer
282
- dataset.removeObserver(observerAB);
283
-
284
- //Remove component from the map
285
- dataset.setComponentTypeMap([DummyComponentA]);
286
-
287
- const e2 = dataset.createEntity();
288
-
289
- const a2 = new DummyComponentA();
290
-
291
- dataset.addComponentToEntity(e2, a2);
292
-
293
- expect(aLinked).toHaveBeenLastCalledWith(a2, e2);
294
- });
295
-
296
- test('traverseComponents with empty', () => {
297
- const ecd = new EntityComponentDataset();
298
-
299
- ecd.setComponentTypeMap([DummyComponentA]);
300
-
301
- const visitor = jest.fn();
302
-
303
- ecd.traverseComponents(DummyComponentA, visitor);
304
-
305
- expect(visitor).not.toHaveBeenCalled();
306
- });
307
-
308
- test('traverseComponents with 1 entity and 1 component', () => {
309
- const ecd = new EntityComponentDataset();
310
-
311
- ecd.setComponentTypeMap([DummyComponentA]);
312
-
313
- const visitor = jest.fn();
314
-
315
- const entity = ecd.createEntity();
316
- const cA = new DummyComponentA();
317
-
318
- ecd.addComponentToEntity(entity, cA);
319
-
320
- ecd.traverseComponents(DummyComponentA, visitor);
321
-
322
- expect(visitor).toHaveBeenCalledTimes(1);
323
- expect(visitor).toHaveBeenCalledWith(cA, entity);
324
- });
325
-
326
- test('traverseComponents with 2 entity and 2 component', () => {
327
- const ecd = new EntityComponentDataset();
328
-
329
- ecd.setComponentTypeMap([DummyComponentA]);
330
-
331
- const visitor = jest.fn();
332
-
333
- const entity_0 = ecd.createEntity();
334
- const cA_0 = new DummyComponentA();
335
-
336
- ecd.addComponentToEntity(entity_0, cA_0);
337
-
338
- const entity_1 = ecd.createEntity();
339
- const cA_1 = new DummyComponentA();
340
-
341
- ecd.addComponentToEntity(entity_1, cA_1);
342
-
343
- ecd.traverseComponents(DummyComponentA, visitor);
344
-
345
- expect(visitor).toHaveBeenCalledTimes(2);
346
- expect(visitor).toHaveBeenCalledWith(cA_0, entity_0);
347
- expect(visitor).toHaveBeenCalledWith(cA_1, entity_1);
348
- });
349
-
350
- test('traverseComponents with 2 entity and 1 component', () => {
351
- const ecd = new EntityComponentDataset();
352
-
353
- ecd.setComponentTypeMap([DummyComponentA]);
354
-
355
- const visitor = jest.fn();
356
-
357
- const entity_0 = ecd.createEntity();
358
-
359
- const entity_1 = ecd.createEntity();
360
- const cA_1 = new DummyComponentA();
361
-
362
- ecd.addComponentToEntity(entity_1, cA_1);
363
-
364
- ecd.traverseComponents(DummyComponentA, visitor);
365
-
366
- expect(visitor).toHaveBeenCalledTimes(1);
367
- expect(visitor).toHaveBeenCalledWith(cA_1, entity_1);
368
- });
369
-
370
- test('traverseComponents with early exist', () => {
371
- const ecd = new EntityComponentDataset();
372
-
373
- ecd.setComponentTypeMap([DummyComponentA]);
374
-
375
- const visitor = jest.fn(() => false);
376
-
377
- const entity_0 = ecd.createEntity();
378
- const cA_0 = new DummyComponentA();
379
-
380
- ecd.addComponentToEntity(entity_0, cA_0);
381
-
382
- const entity_1 = ecd.createEntity();
383
- const cA_1 = new DummyComponentA();
384
-
385
- ecd.addComponentToEntity(entity_1, cA_1);
386
-
387
- ecd.traverseComponents(DummyComponentA, visitor);
388
-
389
- expect(visitor).toHaveBeenCalledTimes(1);
390
- });
391
-
392
- test('traverseEntities with no entities and no components', () => {
393
- const ecd = new EntityComponentDataset();
394
-
395
- ecd.setComponentTypeMap([DummyComponentA]);
396
-
397
- const visitor = jest.fn();
398
-
399
- ecd.traverseEntities([], visitor);
400
-
401
- expect(visitor).not.toHaveBeenCalled();
402
-
403
- ecd.traverseEntities([DummyComponentA], visitor);
404
-
405
- expect(visitor).not.toHaveBeenCalled();
406
- });
407
-
408
- test('traverseEntities with 1 entity and no components', () => {
409
- const ecd = new EntityComponentDataset();
410
-
411
- ecd.setComponentTypeMap([DummyComponentA]);
412
-
413
- const entity_0 = ecd.createEntity();
414
- const cA_0 = new DummyComponentA();
415
-
416
- ecd.addComponentToEntity(entity_0, cA_0);
417
-
418
- const component = ecd.getComponent(entity_0, DummyComponentA);
419
-
420
- expect(component).toBeDefined();
421
-
422
- expect(component).toBe(cA_0);
423
- });
424
-
425
- test('getComponent with 1 entity and 1 component', () => {
426
- const ecd = new EntityComponentDataset();
427
-
428
- ecd.setComponentTypeMap([DummyComponentA]);
429
-
430
- const visitor_0 = jest.fn();
431
-
432
- const entity_0 = ecd.createEntity();
433
-
434
- ecd.traverseEntities([], visitor_0);
435
-
436
- expect(visitor_0).toHaveBeenCalledWith(entity_0);
437
-
438
- const visitor_1 = jest.fn();
439
-
440
- ecd.traverseEntities([DummyComponentA], visitor_1);
441
-
442
- expect(visitor_1).not.toHaveBeenCalled();
443
- });
444
-
445
- test("getComponent on unregistered component class", () => {
446
-
447
- const ecd = new EntityComponentDataset();
448
-
449
- const entity = ecd.createEntity();
450
-
451
- expect(ecd.getComponent(entity, DummyComponentA)).toBe(undefined);
452
- });
453
-
454
- test("getComponentSafe", () => {
455
-
456
- const ecd = new EntityComponentDataset();
457
- ecd.registerComponentType(DummyComponentA);
458
-
459
- const entity = ecd.createEntity();
460
-
461
- expect(() => ecd.getComponentSafe(entity, DummyComponentA)).toThrow();
462
-
463
- const component = new DummyComponentA();
464
-
465
- ecd.addComponentToEntity(entity, component);
466
-
467
- expect(ecd.getComponentSafe(entity, DummyComponentA)).toBe(component);
468
- });
469
-
470
- test('isComponentTypeRegistered', () => {
471
- const ecd = new EntityComponentDataset();
472
-
473
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(false);
474
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(false);
475
-
476
- ecd.setComponentTypeMap([DummyComponentA]);
477
-
478
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(true);
479
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(false);
480
-
481
- ecd.setComponentTypeMap([DummyComponentB]);
482
-
483
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(false);
484
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(true);
485
-
486
- ecd.setComponentTypeMap([DummyComponentA, DummyComponentB]);
487
-
488
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(true);
489
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(true);
490
- });
491
-
492
- test('isEmpty', () => {
493
-
494
- const ecd = new EntityComponentDataset();
495
-
496
- expect(ecd.isEmpty()).toBe(true);
497
-
498
- const entity = ecd.createEntity();
499
-
500
- expect(ecd.isEmpty()).toBe(false);
501
-
502
- });
503
-
504
- test("getComponentClassByName", () => {
505
-
506
- const ecd = new EntityComponentDataset();
507
-
508
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(null);
509
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(null);
510
-
511
- ecd.setComponentTypeMap([DummyComponentA]);
512
-
513
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(DummyComponentA);
514
-
515
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(null);
516
-
517
- expect(ecd.getComponentClassByName('cat')).toBe(null);
518
-
519
- ecd.setComponentTypeMap([DummyComponentB]);
520
-
521
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(null);
522
-
523
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(DummyComponentB);
524
-
525
- ecd.setComponentTypeMap([DummyComponentA, DummyComponentB]);
526
-
527
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(DummyComponentA);
528
-
529
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(DummyComponentB);
530
-
531
- });
532
-
533
- test("traverseEntityIndices", () => {
534
- const u = new EntityComponentDataset();
535
-
536
- const f = jest.fn();
537
-
538
- u.traverseEntityIndices(f);
539
-
540
- expect(f).not.toHaveBeenCalled();
541
-
542
- const entity_id = u.createEntity();
543
-
544
- u.traverseEntityIndices(f);
545
-
546
- expect(f).toHaveBeenCalledTimes(1);
547
- expect(f).toHaveBeenCalledWith(entity_id);
548
-
549
- });
550
-
551
- test("traverseEntitiesCompactedFiltered traverse empty set, empty component list", () => {
552
- const u = new EntityComponentDataset();
553
-
554
- const f = jest.fn();
555
-
556
- u.traverseEntitiesCompactedFiltered([], f);
557
-
558
- expect(f).not.toHaveBeenCalled();
559
- });
560
-
561
- test("traverseEntitiesCompactedFiltered traverse non-empty set, empty component list", () => {
562
- const u = new EntityComponentDataset();
563
-
564
- u.setComponentTypeMap([DummyComponentA]);
565
-
566
- const entity = u.createEntity();
567
-
568
- u.addComponentToEntity(entity, new DummyComponentA());
569
-
570
- const f = jest.fn();
571
-
572
- u.traverseEntitiesCompactedFiltered([], f);
573
-
574
- expect(f).toHaveBeenCalledTimes(1);
575
- expect(f).toHaveBeenCalledWith(entity, [], 0);
576
- });
577
-
578
- test("traverseEntitiesCompactedFiltered traverse empty set, non-empty component list", () => {
579
- const u = new EntityComponentDataset();
580
-
581
- u.setComponentTypeMap([DummyComponentA]);
582
-
583
- const f = jest.fn();
584
-
585
- u.traverseEntitiesCompactedFiltered([DummyComponentA], f);
586
-
587
- expect(f).not.toHaveBeenCalled();
588
- });
589
-
590
- test("traverseEntitiesCompactedFiltered traverse non-empty set, non-empty component list", () => {
591
- const u = new EntityComponentDataset();
592
-
593
- u.setComponentTypeMap([DummyComponentA]);
594
-
595
- const entity = u.createEntity();
596
-
597
- const dummyComponentA = new DummyComponentA();
598
- u.addComponentToEntity(entity, dummyComponentA);
599
-
600
- const f = jest.fn();
601
-
602
- u.traverseEntitiesCompactedFiltered([DummyComponentA], f);
603
-
604
- expect(f).toHaveBeenCalledTimes(1);
605
- expect(f).toHaveBeenCalledWith(entity, [dummyComponentA], 1);
606
- });
607
-
608
- test('entityHasComponents', () => {
609
- const ecd = new EntityComponentDataset();
610
- ecd.registerComponentType(DummyComponentA);
611
-
612
- const a = ecd.createEntity();
613
-
614
- expect(ecd.entityHasComponents(a)).toBe(false);
615
-
616
- ecd.addComponentToEntity(a, new DummyComponentA());
617
-
618
- expect(ecd.entityHasComponents(a)).toBe(true);
619
- });
620
-
621
- test("getAnyComponent", () => {
622
-
623
- const ecd = new EntityComponentDataset();
624
-
625
- ecd.registerManyComponentTypes([
626
- DummyComponentA,
627
- DummyComponentB
628
- ]);
629
-
630
- const a = ecd.createEntity();
631
-
632
- expect(ecd.getAnyComponent(DummyComponentA)).toEqual({
633
- entity: -1,
634
- component: null
635
- });
636
-
637
- const component_a = new DummyComponentA();
638
- ecd.addComponentToEntity(a, component_a);
639
- ecd.addComponentToEntity(a, new DummyComponentB());
640
-
641
- expect(ecd.getAnyComponent(DummyComponentA)).toEqual({
642
- entity: a,
643
- component: component_a
644
- });
645
-
646
- });
647
-
648
- test("hasComponent", () => {
649
-
650
-
651
- const ecd = new EntityComponentDataset();
652
-
653
- ecd.registerManyComponentTypes([
654
- DummyComponentA,
655
- DummyComponentB
656
- ]);
657
-
658
- const a = ecd.createEntity();
659
-
660
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(false);
661
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(false);
662
-
663
- ecd.addComponentToEntity(a, new DummyComponentA());
664
-
665
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(true);
666
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(false);
667
-
668
- ecd.addComponentToEntity(a, new DummyComponentB());
669
-
670
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(true);
671
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(true);
672
- });
673
-
674
- describe('event management', () => {
675
-
676
- test("shouldn't be able to add event listener to non-existent entity", () => {
677
- const dataset = new EntityComponentDataset();
678
- const fn = jest.fn();
679
-
680
- expect(() => dataset.addEntityEventListener(0, 'test', fn)).toThrow();
681
- });
682
-
683
-
684
- test("shouldn't be able to add event listener to removed entity", () => {
685
- const dataset = new EntityComponentDataset();
686
- const fn = jest.fn();
687
-
688
- const entity = dataset.createEntity();
689
- dataset.removeEntity(entity);
690
-
691
- expect(() => dataset.addEntityEventListener(entity, 'test', fn)).toThrow();
692
- });
693
-
694
- test("should be able to add event listener to existing entity", () => {
695
- const dataset = new EntityComponentDataset();
696
- const fn = jest.fn();
697
-
698
- const entity = dataset.createEntity();
699
-
700
- expect(() => dataset.addEntityEventListener(entity, 'test', fn)).not.toThrow();
701
- });
702
-
703
- test("entity event dispatch does not interfere with other event listeners", () => {
704
- const dataset = new EntityComponentDataset();
705
-
706
- const handlerA = jest.fn();
707
- const handlerB = jest.fn();
708
-
709
- const entity = dataset.createEntity();
710
-
711
- dataset.addEntityEventListener(entity, 'a', handlerA);
712
- dataset.addEntityEventListener(entity, 'b', handlerB);
713
-
714
- expect(handlerA).not.toHaveBeenCalled();
715
- expect(handlerB).not.toHaveBeenCalled();
716
-
717
- dataset.sendEvent(entity, 'a', 'ahoy!');
718
-
719
- expect(handlerA).toHaveBeenLastCalledWith('ahoy!', entity);
720
- expect(handlerA).toHaveBeenCalledTimes(1);
721
-
722
- expect(handlerB).not.toHaveBeenCalled();
723
-
724
- dataset.sendEvent(entity, 'a', 'hey hey');
725
-
726
- expect(handlerA).toHaveBeenLastCalledWith('hey hey', entity);
727
- expect(handlerA).toHaveBeenCalledTimes(2);
728
-
729
- expect(handlerB).not.toHaveBeenCalled();
730
-
731
- dataset.removeEntityEventListener(entity, 'a', handlerA);
732
-
733
- dataset.sendEvent(entity, 'a', 'surprise!');
734
-
735
- //A shouldn't be invoked anymore
736
- expect(handlerA).toHaveBeenCalledTimes(2);
737
-
738
- dataset.sendEvent(entity, 'b', 'hello');
739
-
740
- expect(handlerB).toHaveBeenLastCalledWith('hello', entity);
741
- expect(handlerB).toHaveBeenCalledTimes(1);
742
- });
743
-
744
- test("removing listener during its invocation works correctly", () => {
745
- const dataset = new EntityComponentDataset();
746
-
747
- const handler = jest.fn(function () {
748
- //remove own handler
749
- dataset.removeEntityEventListener(entity, 'a', handler);
750
- });
751
-
752
- const entity = dataset.createEntity();
753
-
754
- dataset.addEntityEventListener(entity, 'a', handler);
755
-
756
- dataset.sendEvent(entity, 'a', 'hey hey');
757
-
758
- expect(handler).toHaveBeenCalledTimes(1);
759
- expect(handler).toHaveBeenCalledWith('hey hey', entity);
760
-
761
- //dispatch again, this time handler should not be invoked
762
- dataset.sendEvent(entity, 'a', 'woof');
763
-
764
- expect(handler).toHaveBeenCalledTimes(1);
765
- });
766
-
767
- test("entity event dispatch without listeners should not throw", () => {
768
- const dataset = new EntityComponentDataset();
769
-
770
- const entity = dataset.createEntity();
771
-
772
- expect(() => dataset.sendEvent(entity, 'a', 'hello')).not.toThrow();
773
- });
774
-
775
- test("entity event listener is automatically removed when entity is removed", () => {
776
- const dataset = new EntityComponentDataset();
777
- const handler = jest.fn();
778
-
779
- const entity = dataset.createEntity();
780
-
781
- dataset.addEntityEventListener(entity, 'a', handler);
782
-
783
- dataset.removeEntity(entity);
784
-
785
- //rebuild entity with the same id
786
- dataset.createEntitySpecific(entity);
787
-
788
- dataset.sendEvent(entity, 'a', 'hello');
789
-
790
- expect(handler).not.toHaveBeenCalled();
791
- });
792
-
793
- test("entity removal dispatches EntityRemoved event", () => {
794
- const dataset = new EntityComponentDataset();
795
- const handler = jest.fn();
796
-
797
- const entity = dataset.createEntity();
798
-
799
- dataset.addEntityEventListener(entity, EventType.EntityRemoved, handler);
800
-
801
- dataset.removeEntity(entity);
802
-
803
- expect(handler).toHaveBeenCalledTimes(1);
804
- expect(handler).toHaveBeenLastCalledWith(entity, entity);
805
- });
806
-
807
- test("adding component dispatches ComponentAdded event", () => {
808
- const dataset = new EntityComponentDataset();
809
- dataset.setComponentTypeMap([DummyComponentA]);
810
- const handler = jest.fn();
811
-
812
- const entity = dataset.createEntity();
813
-
814
- dataset.addEntityEventListener(entity, EventType.ComponentAdded, handler);
815
-
816
- const componentInstance = new DummyComponentA();
817
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
818
-
819
- expect(handler).toHaveBeenCalledTimes(1);
820
- expect(handler).toHaveBeenLastCalledWith({ instance: componentInstance, klass: DummyComponentA }, entity);
821
- });
822
-
823
- test("removing component dispatches ComponentRemoved event", () => {
824
- const dataset = new EntityComponentDataset();
825
- dataset.setComponentTypeMap([DummyComponentA]);
826
- const handler = jest.fn();
827
-
828
- const entity = dataset.createEntity();
829
-
830
- dataset.addEntityEventListener(entity, EventType.ComponentRemoved, handler);
831
-
832
- const componentInstance = new DummyComponentA();
833
-
834
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
835
-
836
- dataset.removeComponentFromEntityByIndex(entity, 0);
837
-
838
- expect(handler).toHaveBeenCalledTimes(1);
839
- expect(handler).toHaveBeenLastCalledWith({ instance: componentInstance, klass: DummyComponentA }, entity);
840
- });
841
- });
842
-
843
-
844
- describe('entity any event listener', () => {
845
- test('addEntityAnyEventListener to non-existing entity should throw an error', () => {
846
- const ecd = new EntityComponentDataset();
847
-
848
- expect(() => ecd.addEntityAnyEventListener(0, noop)).toThrow();
849
- });
850
-
851
- test('any event listener successfully captures an event', () => {
852
- const ecd = new EntityComponentDataset();
853
-
854
- const entity = ecd.createEntity();
855
-
856
- const f = jest.fn();
857
-
858
- ecd.addEntityAnyEventListener(entity, f);
859
-
860
- ecd.sendEvent(entity, 'x', 'event-data');
861
-
862
- expect(f).toHaveBeenCalledTimes(1);
863
- expect(f).toHaveBeenCalledWith('x', 'event-data', entity);
864
- });
865
-
866
- test('any event listener does not capture an events of another entity', () => {
867
- const ecd = new EntityComponentDataset();
868
-
869
- const entity_a = ecd.createEntity();
870
- const entity_b = ecd.createEntity();
871
-
872
- const f = jest.fn();
873
-
874
- ecd.addEntityAnyEventListener(entity_a, f);
875
-
876
- ecd.sendEvent(entity_b, 'x', 'event-data');
877
-
878
- expect(f).not.toHaveBeenCalled();
879
- });
880
-
881
- test('any event listener does not capture an events after being removed', () => {
882
- const ecd = new EntityComponentDataset();
883
-
884
- const entity = ecd.createEntity();
885
-
886
- const f = jest.fn();
887
-
888
- ecd.addEntityAnyEventListener(entity, f);
889
- ecd.removeAnyEventListener(entity, f);
890
-
891
- ecd.sendEvent(entity, 'x', 'event-data');
892
-
893
- expect(f).not.toHaveBeenCalled();
894
- });
895
- })