@minecraft/math 2.2.11 → 2.3.0

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 (46) hide show
  1. package/api-report/math.api.md +127 -0
  2. package/dist/minecraft-math.d.ts +1034 -431
  3. package/dist/minecraft-math.js +833 -6
  4. package/dist/minecraft-math.js.map +3 -3
  5. package/lib/__mocks__/minecraft-server.js +17 -0
  6. package/lib/__mocks__/minecraft-server.js.map +1 -0
  7. package/lib/src/aabb/coreHelpers.js +282 -0
  8. package/lib/src/aabb/coreHelpers.js.map +1 -0
  9. package/lib/src/aabb/coreHelpers.test.js +227 -0
  10. package/lib/src/aabb/coreHelpers.test.js.map +1 -0
  11. package/lib/src/aabb/index.js +4 -0
  12. package/lib/src/aabb/index.js.map +1 -0
  13. package/lib/src/general/clamp.js.map +1 -0
  14. package/lib/src/general/index.js.map +1 -0
  15. package/lib/{index.js → src/index.js} +1 -0
  16. package/lib/src/index.js.map +1 -0
  17. package/lib/src/index.test.js.map +1 -0
  18. package/lib/{vector3 → src/vector3}/coreHelpers.js +294 -2
  19. package/lib/src/vector3/coreHelpers.js.map +1 -0
  20. package/lib/src/vector3/coreHelpers.test.js +578 -0
  21. package/lib/src/vector3/coreHelpers.test.js.map +1 -0
  22. package/lib/src/vector3/index.js.map +1 -0
  23. package/lib/src/vector3/vectorWrapper.js +509 -0
  24. package/lib/src/vector3/vectorWrapper.js.map +1 -0
  25. package/lib/src/vector3/vectorWrapper.test.js +575 -0
  26. package/lib/src/vector3/vectorWrapper.test.js.map +1 -0
  27. package/lib/types/math-beta.d.ts +1034 -431
  28. package/lib/types/math-public.d.ts +1034 -431
  29. package/lib/types/math.d.ts +1034 -431
  30. package/package.json +1 -1
  31. package/lib/general/clamp.js.map +0 -1
  32. package/lib/general/index.js.map +0 -1
  33. package/lib/index.js.map +0 -1
  34. package/lib/index.test.js.map +0 -1
  35. package/lib/vector3/coreHelpers.js.map +0 -1
  36. package/lib/vector3/coreHelpers.test.js +0 -264
  37. package/lib/vector3/coreHelpers.test.js.map +0 -1
  38. package/lib/vector3/index.js.map +0 -1
  39. package/lib/vector3/vectorWrapper.js +0 -230
  40. package/lib/vector3/vectorWrapper.js.map +0 -1
  41. package/lib/vector3/vectorWrapper.test.js +0 -228
  42. package/lib/vector3/vectorWrapper.test.js.map +0 -1
  43. /package/lib/{general → src/general}/clamp.js +0 -0
  44. /package/lib/{general → src/general}/index.js +0 -0
  45. /package/lib/{index.test.js → src/index.test.js} +0 -0
  46. /package/lib/{vector3 → src/vector3}/index.js +0 -0
@@ -0,0 +1,575 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { describe, expect, it } from 'vitest';
4
+ import { VECTOR2_ZERO, Vector2Utils, VECTOR3_ZERO, Vector3Utils, VectorXZUtils } from './coreHelpers.js';
5
+ import { Vector2Builder, Vector3Builder, VectorXZBuilder } from './vectorWrapper.js';
6
+ /**
7
+ * Underlying functionality is validated by coreHelpers tests, primary concern here is consistency of results
8
+ * between the two implementations
9
+ */
10
+ describe('Vector3Builder', () => {
11
+ it('should be able to be constructed from a Vector3 or three numbers', () => {
12
+ const vectorA = new Vector3Builder({ x: 1, y: 2, z: 3 });
13
+ const vectorB = new Vector3Builder(1, 2, 3);
14
+ expect(vectorA.x).toBe(1);
15
+ expect(vectorA.y).toBe(2);
16
+ expect(vectorA.z).toBe(3);
17
+ expect(vectorA).toEqual(vectorB);
18
+ });
19
+ it('should be able to assign a Vector3', () => {
20
+ const vector = new Vector3Builder(1, 2, 3);
21
+ const updated = vector.assign({ x: 4, y: 5, z: 6 });
22
+ expect(updated.x).toBe(4);
23
+ expect(updated.y).toBe(5);
24
+ expect(updated.z).toBe(6);
25
+ expect(updated).toBe(vector); // Referential equality must be preserved
26
+ });
27
+ it('should be able to check equality with the same result as the coreHelpers function', () => {
28
+ const vectorA = new Vector3Builder(1, 2, 3);
29
+ const vectorB = new Vector3Builder(1, 2, 3);
30
+ const vectorC = new Vector3Builder(4, 5, 6);
31
+ expect(vectorA.equals(vectorB)).toBe(Vector3Utils.equals(vectorA, vectorB));
32
+ expect(vectorA.equals(vectorC)).toBe(Vector3Utils.equals(vectorA, vectorC));
33
+ });
34
+ it('should be able to add a vector3 with the same result as the coreHelpers function', () => {
35
+ const vectorA = new Vector3Builder(1, 2, 3);
36
+ const vectorB = new Vector3Builder(4, 5, 6);
37
+ const vectorC = Vector3Utils.add(vectorA, vectorB);
38
+ const result = vectorA.add(vectorB);
39
+ expect(result).toEqual(vectorC);
40
+ expect(vectorA).toBe(result); // Referential equality must be preserved
41
+ // Subsequent chained adds should work as expected
42
+ const toAdd = { x: 1, y: 1, z: 1 };
43
+ const resultTwo = vectorA.add(toAdd).add(toAdd).add(toAdd);
44
+ expect(resultTwo).toEqual({ x: 8, y: 10, z: 12 });
45
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
46
+ });
47
+ it('should be able to add a partial vector3 with the same result as the coreHelpers function', () => {
48
+ const vectorA = new Vector3Builder(1, 2, 3);
49
+ const vectorB = { x: 4, z: 6 };
50
+ const vectorC = Vector3Utils.add(vectorA, vectorB);
51
+ const result = vectorA.add(vectorB);
52
+ expect(result).toEqual(vectorC);
53
+ expect(vectorA).toBe(result); // Referential equality must be preserved
54
+ });
55
+ it('should be able to subtract a vector3 with the same result as the coreHelpers function', () => {
56
+ const vectorA = new Vector3Builder(5, 7, 9);
57
+ const vectorB = new Vector3Builder(4, 5, 6);
58
+ const vectorC = Vector3Utils.subtract(vectorA, vectorB);
59
+ const result = vectorA.subtract(vectorB);
60
+ expect(result).toEqual(vectorC);
61
+ expect(vectorA).toBe(result); // Referential equality must be preserved
62
+ // Subsequent chained subtracts should work as expected
63
+ const toSubtract = { x: 1, y: 1, z: 1 };
64
+ const resultTwo = vectorA.subtract(toSubtract).subtract(toSubtract).subtract(toSubtract);
65
+ expect(resultTwo).toEqual({ x: -2, y: -1, z: 0 });
66
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
67
+ });
68
+ it('should be able to subtract a partial vector3 with the same result as the coreHelpers function', () => {
69
+ const vectorA = new Vector3Builder(1, 2, 3);
70
+ const vectorB = { x: 4, z: 6 };
71
+ const vectorC = Vector3Utils.subtract(vectorA, vectorB);
72
+ const result = vectorA.subtract(vectorB);
73
+ expect(result).toEqual(vectorC);
74
+ expect(vectorA).toBe(result); // Referential equality must be preserved
75
+ });
76
+ it('should be able to scale a vector3 with the same result as the coreHelpers function', () => {
77
+ const vectorA = new Vector3Builder(1, 2, 3);
78
+ const vectorB = Vector3Utils.scale(vectorA, 3);
79
+ const result = vectorA.scale(3);
80
+ expect(result).toEqual(vectorB);
81
+ expect(vectorA).toBe(result); // Referential equality must be preserved
82
+ // Subsequent chained subtracts should work as expected
83
+ const resultTwo = vectorA.scale(3).scale(3);
84
+ expect(resultTwo).toEqual({ x: 27, y: 54, z: 81 });
85
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
86
+ });
87
+ it('should be able to compute the dot product with the same result as the coreHelpers function', () => {
88
+ const vectorA = new Vector3Builder(1, 2, 3);
89
+ const vectorB = new Vector3Builder(4, 5, 6);
90
+ const dotProduct = Vector3Utils.dot(vectorA, vectorB);
91
+ const result = vectorA.dot(vectorB);
92
+ expect(result).toEqual(dotProduct);
93
+ });
94
+ it('should be able to compute the cross product with the same result as the coreHelpers function', () => {
95
+ const vectorA = new Vector3Builder(1, 2, 3);
96
+ const vectorB = new Vector3Builder(4, 5, 6);
97
+ const vectorC = Vector3Utils.cross(vectorA, vectorB);
98
+ const result = vectorA.cross(vectorB);
99
+ expect(result).toEqual(vectorC);
100
+ expect(vectorA).toBe(result); // Referential equality must be preserved
101
+ // Subsequent chained subtracts should work as expected
102
+ const toCross = { x: 1, y: 1, z: 1 };
103
+ const resultTwo = vectorA.cross(toCross).cross(toCross);
104
+ expect(resultTwo).toEqual({ x: 9, y: -18, z: 9 });
105
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
106
+ });
107
+ it('should be able to compute the magnitude with the same result as the coreHelpers function', () => {
108
+ const vectorA = new Vector3Builder(1, 2, 3);
109
+ const mag = Vector3Utils.magnitude(vectorA);
110
+ expect(vectorA.magnitude()).toEqual(mag);
111
+ });
112
+ it('should be able to compute the distance between two vectors with the same result as the coreHelpers function', () => {
113
+ const vectorA = new Vector3Builder(1, 2, 3);
114
+ const vectorB = new Vector3Builder(4, 5, 6);
115
+ const mag = Vector3Utils.distance(vectorA, vectorB);
116
+ expect(vectorA.distance(vectorB)).toEqual(mag);
117
+ });
118
+ it('should be able to normalize the vector with the same result as the coreHelpers function', () => {
119
+ const vectorA = new Vector3Builder(1, 2, 3);
120
+ const vectorB = Vector3Utils.normalize(vectorA);
121
+ const result = vectorA.normalize();
122
+ expect(result).toEqual(vectorB);
123
+ expect(vectorA).toBe(result); // Referential equality must be preserved
124
+ });
125
+ it('should be able to compute the floor of the vector with the same result as the coreHelpers function', () => {
126
+ const vectorA = new Vector3Builder(1.33, 2.14, 3.55);
127
+ const vectorB = Vector3Utils.floor(vectorA);
128
+ const result = vectorA.floor();
129
+ expect(result).toEqual(vectorB);
130
+ expect(vectorA).toBe(result); // Referential equality must be preserved
131
+ });
132
+ it('should be able to compute the ceil of the vector with the same result as the coreHelpers function', () => {
133
+ const vectorA = new Vector3Builder(1.33, 2.14, 3.55);
134
+ const vectorB = Vector3Utils.ceil(vectorA);
135
+ const result = vectorA.ceil();
136
+ expect(result).toEqual(vectorB);
137
+ expect(vectorA).toBe(result); // Referential equality must be preserved
138
+ });
139
+ it('should be able to compute the min of two vectors with the same result as the coreHelpers function', () => {
140
+ const vectorA = new Vector3Builder(1, 2, 3);
141
+ const vectorB = { x: 4, y: 5, z: 6 };
142
+ const vectorC = Vector3Utils.min(vectorA, vectorB);
143
+ const result = vectorA.min(vectorB);
144
+ expect(result).toEqual(vectorC);
145
+ expect(vectorA).toBe(result); // Referential equality must be preserved
146
+ });
147
+ it('should be able to compute the max of two vectors with the same result as the coreHelpers function', () => {
148
+ const vectorA = new Vector3Builder(1, 2, 3);
149
+ const vectorB = { x: 4, y: 5, z: 6 };
150
+ const vectorC = Vector3Utils.max(vectorA, vectorB);
151
+ const result = vectorA.max(vectorB);
152
+ expect(result).toEqual(vectorC);
153
+ expect(vectorA).toBe(result); // Referential equality must be preserved
154
+ });
155
+ it('should be able to clamp the vector with the same result as the coreHelpers function', () => {
156
+ const vectorA = new Vector3Builder(1, 2, 3);
157
+ const minVec = { x: 0, y: 1.5 };
158
+ const maxVec = { x: 2, z: 2.5 };
159
+ const vectorB = Vector3Utils.clamp(vectorA, { min: minVec, max: maxVec });
160
+ const result = vectorA.clamp({ min: minVec, max: maxVec });
161
+ expect(result).toEqual(vectorB);
162
+ expect(vectorA).toBe(result); // Referential equality must be preserved
163
+ });
164
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function', () => {
165
+ const vectorA = new Vector3Builder(1.33, 2.14, 3.55);
166
+ const vectorB = Vector3Utils.toString(vectorA, { decimals: 1, delimiter: ' ' });
167
+ const result = vectorA.toString({ decimals: 1, delimiter: ' ' });
168
+ expect(result).toEqual(vectorB);
169
+ });
170
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function using a string', () => {
171
+ const regular = '1.33, 2.14, 3.55';
172
+ const alternateDelimiter = '1.33+2.14+3.55';
173
+ const vectorBuilderA = new Vector3Builder(regular);
174
+ const vectorBuilderB = new Vector3Builder(alternateDelimiter, '+');
175
+ const vectorA = Vector3Utils.fromString(regular);
176
+ const vectorB = Vector3Utils.fromString(alternateDelimiter, '+');
177
+ expect(vectorBuilderA).toEqual(vectorA);
178
+ expect(vectorBuilderB).toEqual(vectorB);
179
+ });
180
+ it('makes a 0 vector for invalid string', () => {
181
+ const regular = '1.33, sdfg, 3.55';
182
+ expect(new Vector3Builder(regular)).toEqual(VECTOR3_ZERO);
183
+ });
184
+ it('should be able compute the lerp halfway between two vectors with the same result as the coreHelpers function', () => {
185
+ const vectorA = new Vector3Builder(5, 6, 3);
186
+ const vectorB = new Vector3Builder(4, 2, 6);
187
+ const ratio = 0.4;
188
+ const resultA = Vector3Utils.lerp(vectorA, vectorB, ratio);
189
+ const resultB = vectorA.lerp(vectorB, ratio);
190
+ expect(resultA).toEqual(resultB);
191
+ });
192
+ it('should be able compute the slerp halfway between two vectors with the same result as the coreHelpers function', () => {
193
+ const vectorA = new Vector3Builder(5, 6, 3);
194
+ const vectorB = new Vector3Builder(4, 2, 6);
195
+ const ratio = 0.4;
196
+ const resultA = Vector3Utils.slerp(vectorA, vectorB, ratio);
197
+ const resultB = vectorA.slerp(vectorB, ratio);
198
+ expect(resultA).toEqual(resultB);
199
+ });
200
+ it('should be able to multiply with the same result as the coreHelpers function', () => {
201
+ const vectorA = new Vector3Builder(5, 6, 3);
202
+ const vectorB = new Vector3Builder(4, 2, 6);
203
+ const resultA = Vector3Utils.multiply(vectorA, vectorB);
204
+ const resultB = vectorA.multiply(vectorB);
205
+ expect(resultA).toEqual(resultB);
206
+ });
207
+ it('should be able to rotate over x with the same result as the coreHelpers function', () => {
208
+ const vectorA = new Vector3Builder(5, 6, 3);
209
+ const angle = Math.PI / 2;
210
+ const resultA = Vector3Utils.rotateX(vectorA, angle);
211
+ const resultB = vectorA.rotateX(angle);
212
+ expect(resultA).toEqual(resultB);
213
+ });
214
+ it('should be able to rotate over y with the same result as the coreHelpers function', () => {
215
+ const vectorA = new Vector3Builder(5, 6, 3);
216
+ const angle = Math.PI / 2;
217
+ const resultA = Vector3Utils.rotateY(vectorA, angle);
218
+ const resultB = vectorA.rotateY(angle);
219
+ expect(resultA).toEqual(resultB);
220
+ });
221
+ it('should be able to rotate over z with the same result as the coreHelpers function', () => {
222
+ const vectorA = new Vector3Builder(5, 6, 3);
223
+ const angle = Math.PI / 2;
224
+ const resultA = Vector3Utils.rotateZ(vectorA, angle);
225
+ const resultB = vectorA.rotateZ(angle);
226
+ expect(resultA).toEqual(resultB);
227
+ });
228
+ });
229
+ describe('Vector2Builder', () => {
230
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function', () => {
231
+ const vectorA = new Vector2Builder(1.33, 2.14);
232
+ const vectorB = Vector2Utils.toString(vectorA, { decimals: 1, delimiter: ' ' });
233
+ const result = vectorA.toString({ decimals: 1, delimiter: ' ' });
234
+ expect(result).toEqual(vectorB);
235
+ });
236
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function using a string', () => {
237
+ const regular = '1.33, 2.14';
238
+ const alternateDelimiter = '1.33+2.14';
239
+ const vectorBuilderA = new Vector2Builder(regular);
240
+ const vectorBuilderB = new Vector2Builder(alternateDelimiter, '+');
241
+ const vectorA = Vector2Utils.fromString(regular);
242
+ const vectorB = Vector2Utils.fromString(alternateDelimiter, '+');
243
+ expect(vectorBuilderA).toEqual(vectorA);
244
+ expect(vectorBuilderB).toEqual(vectorB);
245
+ });
246
+ it('makes a 0 vector for invalid string', () => {
247
+ const regular = '1.33, sdfg';
248
+ expect(new Vector2Builder(regular)).toEqual(VECTOR2_ZERO);
249
+ });
250
+ it('should be able to assign a Vector2', () => {
251
+ const vector = new Vector2Builder(1, 2);
252
+ const updated = vector.assign({ x: 4, y: 5 });
253
+ expect(updated.x).toBe(4);
254
+ expect(updated.y).toBe(5);
255
+ expect(updated).toBe(vector); // Referential equality must be preserved
256
+ });
257
+ it('should be able to check equality with the same result as the coreHelpers function', () => {
258
+ const vectorA = new Vector2Builder(1, 2);
259
+ const vectorB = new Vector2Builder(1, 2);
260
+ const vectorC = new Vector2Builder(4, 5);
261
+ expect(vectorA.equals(vectorB)).toBe(Vector2Utils.equals(vectorA, vectorB));
262
+ expect(vectorA.equals(vectorC)).toBe(Vector2Utils.equals(vectorA, vectorC));
263
+ });
264
+ it('should be able to add a vector2 with the same result as the coreHelpers function', () => {
265
+ const vectorA = new Vector2Builder(1, 2);
266
+ const vectorB = new Vector2Builder(4, 5);
267
+ const vectorC = Vector2Utils.add(vectorA, vectorB);
268
+ const result = vectorA.add(vectorB);
269
+ expect(result).toEqual(vectorC);
270
+ expect(vectorA).toBe(result); // Referential equality must be preserved
271
+ // Subsequent chained adds should work as expected
272
+ const toAdd = { x: 1, y: 1 };
273
+ const resultTwo = vectorA.add(toAdd).add(toAdd).add(toAdd);
274
+ expect(resultTwo).toEqual({ x: 8, y: 10 });
275
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
276
+ });
277
+ it('should be able to add a partial vector2 with the same result as the coreHelpers function', () => {
278
+ const vectorA = new Vector2Builder(1, 2);
279
+ const vectorB = { x: 4 };
280
+ const vectorC = Vector2Utils.add(vectorA, vectorB);
281
+ const result = vectorA.add(vectorB);
282
+ expect(result).toEqual(vectorC);
283
+ expect(vectorA).toBe(result); // Referential equality must be preserved
284
+ });
285
+ it('should be able to subtract a vector2 with the same result as the coreHelpers function', () => {
286
+ const vectorA = new Vector2Builder(5, 7);
287
+ const vectorB = new Vector2Builder(4, 5);
288
+ const vectorC = Vector2Utils.subtract(vectorA, vectorB);
289
+ const result = vectorA.subtract(vectorB);
290
+ expect(result).toEqual(vectorC);
291
+ expect(vectorA).toBe(result); // Referential equality must be preserved
292
+ // Subsequent chained subtracts should work as expected
293
+ const toSubtract = { x: 1, y: 1 };
294
+ const resultTwo = vectorA.subtract(toSubtract).subtract(toSubtract).subtract(toSubtract);
295
+ expect(resultTwo).toEqual({ x: -2, y: -1 });
296
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
297
+ });
298
+ it('should be able to subtract a partial vector2 with the same result as the coreHelpers function', () => {
299
+ const vectorA = new Vector2Builder(1, 2);
300
+ const vectorB = { x: 4 };
301
+ const vectorC = Vector2Utils.subtract(vectorA, vectorB);
302
+ const result = vectorA.subtract(vectorB);
303
+ expect(result).toEqual(vectorC);
304
+ expect(vectorA).toBe(result); // Referential equality must be preserved
305
+ });
306
+ it('should be able to scale a vector2 with the same result as the coreHelpers function', () => {
307
+ const vectorA = new Vector2Builder(1, 2);
308
+ const vectorB = Vector2Utils.scale(vectorA, 3);
309
+ const result = vectorA.scale(3);
310
+ expect(result).toEqual(vectorB);
311
+ expect(vectorA).toBe(result); // Referential equality must be preserved
312
+ // Subsequent chained subtracts should work as expected
313
+ const resultTwo = vectorA.scale(3).scale(3);
314
+ expect(resultTwo).toEqual({ x: 27, y: 54 });
315
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
316
+ });
317
+ it('should be able to compute the dot product with the same result as the coreHelpers function', () => {
318
+ const vectorA = new Vector2Builder(1, 2);
319
+ const vectorB = new Vector2Builder(4, 5);
320
+ const dotProduct = Vector2Utils.dot(vectorA, vectorB);
321
+ const result = vectorA.dot(vectorB);
322
+ expect(result).toEqual(dotProduct);
323
+ });
324
+ it('should be able to compute the magnitude with the same result as the coreHelpers function', () => {
325
+ const vectorA = new Vector2Builder(1, 2);
326
+ const mag = Vector2Utils.magnitude(vectorA);
327
+ expect(vectorA.magnitude()).toEqual(mag);
328
+ });
329
+ it('should be able to compute the distance between two vectors with the same result as the coreHelpers function', () => {
330
+ const vectorA = new Vector2Builder(1, 2);
331
+ const vectorB = new Vector2Builder(4, 5);
332
+ const mag = Vector2Utils.distance(vectorA, vectorB);
333
+ expect(vectorA.distance(vectorB)).toEqual(mag);
334
+ });
335
+ it('should be able to normalize the vector with the same result as the coreHelpers function', () => {
336
+ const vectorA = new Vector2Builder(1, 2);
337
+ const vectorB = Vector2Utils.normalize(vectorA);
338
+ const result = vectorA.normalize();
339
+ expect(result).toEqual(vectorB);
340
+ expect(vectorA).toBe(result); // Referential equality must be preserved
341
+ });
342
+ it('should be able to compute the floor of the vector with the same result as the coreHelpers function', () => {
343
+ const vectorA = new Vector2Builder(1.33, 2.14);
344
+ const vectorB = Vector2Utils.floor(vectorA);
345
+ const result = vectorA.floor();
346
+ expect(result).toEqual(vectorB);
347
+ expect(vectorA).toBe(result); // Referential equality must be preserved
348
+ });
349
+ it('should be able to clamp the vector with the same result as the coreHelpers function', () => {
350
+ const vectorA = new Vector2Builder(1, 2);
351
+ const minVec = { x: 0, y: 1.5 };
352
+ const maxVec = { x: 2 };
353
+ const vectorB = Vector2Utils.clamp(vectorA, { min: minVec, max: maxVec });
354
+ const result = vectorA.clamp({ min: minVec, max: maxVec });
355
+ expect(result).toEqual(vectorB);
356
+ expect(vectorA).toBe(result); // Referential equality must be preserved
357
+ });
358
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function', () => {
359
+ const vectorA = new Vector2Builder(1.33, 2.14);
360
+ const vectorB = Vector2Utils.toString(vectorA, { decimals: 1, delimiter: ' ' });
361
+ const result = vectorA.toString({ decimals: 1, delimiter: ' ' });
362
+ expect(result).toEqual(vectorB);
363
+ });
364
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function using a string', () => {
365
+ const regular = '1.33, 2.14';
366
+ const alternateDelimiter = '1.33+2.14';
367
+ const vectorBuilderA = new Vector2Builder(regular);
368
+ const vectorBuilderB = new Vector2Builder(alternateDelimiter, '+');
369
+ const vectorA = Vector2Utils.fromString(regular);
370
+ const vectorB = Vector2Utils.fromString(alternateDelimiter, '+');
371
+ expect(vectorBuilderA).toEqual(vectorA);
372
+ expect(vectorBuilderB).toEqual(vectorB);
373
+ });
374
+ it('makes a 0 vector for invalid string', () => {
375
+ const regular = '1.33, sdfg, 3.55';
376
+ expect(new Vector2Builder(regular)).toEqual(VECTOR2_ZERO);
377
+ });
378
+ it('should be able compute the lerp halfway between two vectors with the same result as the coreHelpers function', () => {
379
+ const vectorA = new Vector2Builder(5, 6);
380
+ const vectorB = new Vector2Builder(4, 2);
381
+ const ratio = 0.4;
382
+ const resultA = Vector2Utils.lerp(vectorA, vectorB, ratio);
383
+ const resultB = vectorA.lerp(vectorB, ratio);
384
+ expect(resultA).toEqual(resultB);
385
+ });
386
+ it('should be able compute the slerp halfway between two vectors with the same result as the coreHelpers function', () => {
387
+ const vectorA = new Vector2Builder(5, 6);
388
+ const vectorB = new Vector2Builder(4, 2);
389
+ const ratio = 0.4;
390
+ const resultA = Vector2Utils.slerp(vectorA, vectorB, ratio);
391
+ const resultB = vectorA.slerp(vectorB, ratio);
392
+ expect(resultA).toEqual(resultB);
393
+ });
394
+ it('should be able to multiply with the same result as the coreHelpers function', () => {
395
+ const vectorA = new Vector2Builder(5, 6);
396
+ const vectorB = new Vector2Builder(4, 2);
397
+ const resultA = Vector2Utils.multiply(vectorA, vectorB);
398
+ const resultB = vectorA.multiply(vectorB);
399
+ expect(resultA).toEqual(resultB);
400
+ });
401
+ });
402
+ describe('VectorXZBuilder', () => {
403
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function', () => {
404
+ const vectorA = new VectorXZBuilder(1.33, 2.14);
405
+ const vectorB = VectorXZUtils.toString(vectorA, { decimals: 1, delimiter: ' ' });
406
+ const result = vectorA.toString({ decimals: 1, delimiter: ' ' });
407
+ expect(result).toEqual(vectorB);
408
+ });
409
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function using a string', () => {
410
+ const regular = '1.33, 2.14';
411
+ const alternateDelimiter = '1.33+2.14';
412
+ const vectorBuilderA = new VectorXZBuilder(regular);
413
+ const vectorBuilderB = new VectorXZBuilder(alternateDelimiter, '+');
414
+ const vectorA = VectorXZUtils.fromString(regular);
415
+ const vectorB = VectorXZUtils.fromString(alternateDelimiter, '+');
416
+ expect(vectorBuilderA).toEqual(vectorA);
417
+ expect(vectorBuilderB).toEqual(vectorB);
418
+ });
419
+ it('makes a 0 vector for invalid string', () => {
420
+ const regular = '1.33, sdfg';
421
+ expect(new VectorXZBuilder(regular)).toEqual({ x: 0, z: 0 });
422
+ });
423
+ it('should be able to assign a VectorXZ', () => {
424
+ const vector = new VectorXZBuilder(1, 2);
425
+ const updated = vector.assign({ x: 4, z: 5 });
426
+ expect(updated.x).toBe(4);
427
+ expect(updated.z).toBe(5);
428
+ expect(updated).toBe(vector); // Referential equality must be preserved
429
+ });
430
+ it('should be able to check equality with the same result as the coreHelpers function', () => {
431
+ const vectorA = new VectorXZBuilder(1, 2);
432
+ const vectorB = new VectorXZBuilder(1, 2);
433
+ const vectorC = new VectorXZBuilder(4, 5);
434
+ expect(vectorA.equals(vectorB)).toBe(VectorXZUtils.equals(vectorA, vectorB));
435
+ expect(vectorA.equals(vectorC)).toBe(VectorXZUtils.equals(vectorA, vectorC));
436
+ });
437
+ it('should be able to add a vectorXZ with the same result as the coreHelpers function', () => {
438
+ const vectorA = new VectorXZBuilder(1, 2);
439
+ const vectorB = new VectorXZBuilder(4, 5);
440
+ const vectorC = VectorXZUtils.add(vectorA, vectorB);
441
+ const result = vectorA.add(vectorB);
442
+ expect(result).toEqual(vectorC);
443
+ expect(vectorA).toBe(result); // Referential equality must be preserved
444
+ // Subsequent chained adds should work as expected
445
+ const toAdd = { x: 1, z: 1 };
446
+ const resultTwo = vectorA.add(toAdd).add(toAdd).add(toAdd);
447
+ expect(resultTwo).toEqual({ x: 8, z: 10 });
448
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
449
+ });
450
+ it('should be able to add a partial vectorXZ with the same result as the coreHelpers function', () => {
451
+ const vectorA = new VectorXZBuilder(1, 2);
452
+ const vectorB = { x: 4 };
453
+ const vectorC = VectorXZUtils.add(vectorA, vectorB);
454
+ const result = vectorA.add(vectorB);
455
+ expect(result).toEqual(vectorC);
456
+ expect(vectorA).toBe(result); // Referential equality must be preserved
457
+ });
458
+ it('should be able to subtract a vectorXZ with the same result as the coreHelpers function', () => {
459
+ const vectorA = new VectorXZBuilder(5, 7);
460
+ const vectorB = new VectorXZBuilder(4, 5);
461
+ const vectorC = VectorXZUtils.subtract(vectorA, vectorB);
462
+ const result = vectorA.subtract(vectorB);
463
+ expect(result).toEqual(vectorC);
464
+ expect(vectorA).toBe(result); // Referential equality must be preserved
465
+ // Subsequent chained subtracts should work as expected
466
+ const toSubtract = { x: 1, z: 1 };
467
+ const resultTwo = vectorA.subtract(toSubtract).subtract(toSubtract).subtract(toSubtract);
468
+ expect(resultTwo).toEqual({ x: -2, z: -1 });
469
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
470
+ });
471
+ it('should be able to subtract a partial vectorXZ with the same result as the coreHelpers function', () => {
472
+ const vectorA = new VectorXZBuilder(1, 2);
473
+ const vectorB = { x: 4 };
474
+ const vectorC = VectorXZUtils.subtract(vectorA, vectorB);
475
+ const result = vectorA.subtract(vectorB);
476
+ expect(result).toEqual(vectorC);
477
+ expect(vectorA).toBe(result); // Referential equality must be preserved
478
+ });
479
+ it('should be able to scale a vectorXZ with the same result as the coreHelpers function', () => {
480
+ const vectorA = new VectorXZBuilder(1, 2);
481
+ const vectorB = VectorXZUtils.scale(vectorA, 3);
482
+ const result = vectorA.scale(3);
483
+ expect(result).toEqual(vectorB);
484
+ expect(vectorA).toBe(result); // Referential equality must be preserved
485
+ // Subsequent chained subtracts should work as expected
486
+ const resultTwo = vectorA.scale(3).scale(3);
487
+ expect(resultTwo).toEqual({ x: 27, z: 54 });
488
+ expect(resultTwo).toBe(vectorA); // Referential equality must be preserved
489
+ });
490
+ it('should be able to compute the dot product with the same result as the coreHelpers function', () => {
491
+ const vectorA = new VectorXZBuilder(1, 2);
492
+ const vectorB = new VectorXZBuilder(4, 5);
493
+ const dotProduct = VectorXZUtils.dot(vectorA, vectorB);
494
+ const result = vectorA.dot(vectorB);
495
+ expect(result).toEqual(dotProduct);
496
+ });
497
+ it('should be able to compute the magnitude with the same result as the coreHelpers function', () => {
498
+ const vectorA = new VectorXZBuilder(1, 2);
499
+ const mag = VectorXZUtils.magnitude(vectorA);
500
+ expect(vectorA.magnitude()).toEqual(mag);
501
+ });
502
+ it('should be able to compute the distance between two vectors with the same result as the coreHelpers function', () => {
503
+ const vectorA = new VectorXZBuilder(1, 2);
504
+ const vectorB = new VectorXZBuilder(4, 5);
505
+ const mag = VectorXZUtils.distance(vectorA, vectorB);
506
+ expect(vectorA.distance(vectorB)).toEqual(mag);
507
+ });
508
+ it('should be able to normalize the vector with the same result as the coreHelpers function', () => {
509
+ const vectorA = new VectorXZBuilder(1, 2);
510
+ const vectorB = VectorXZUtils.normalize(vectorA);
511
+ const result = vectorA.normalize();
512
+ expect(result).toEqual(vectorB);
513
+ expect(vectorA).toBe(result); // Referential equality must be preserved
514
+ });
515
+ it('should be able to compute the floor of the vector with the same result as the coreHelpers function', () => {
516
+ const vectorA = new VectorXZBuilder(1.33, 2.14);
517
+ const vectorB = VectorXZUtils.floor(vectorA);
518
+ const result = vectorA.floor();
519
+ expect(result).toEqual(vectorB);
520
+ expect(vectorA).toBe(result); // Referential equality must be preserved
521
+ });
522
+ it('should be able to clamp the vector with the same result as the coreHelpers function', () => {
523
+ const vectorA = new VectorXZBuilder(1, 2);
524
+ const minVec = { x: 0, z: 1.5 };
525
+ const maxVec = { x: 2 };
526
+ const vectorB = VectorXZUtils.clamp(vectorA, { min: minVec, max: maxVec });
527
+ const result = vectorA.clamp({ min: minVec, max: maxVec });
528
+ expect(result).toEqual(vectorB);
529
+ expect(vectorA).toBe(result); // Referential equality must be preserved
530
+ });
531
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function', () => {
532
+ const vectorA = new VectorXZBuilder(1.33, 2.14);
533
+ const vectorB = VectorXZUtils.toString(vectorA, { decimals: 1, delimiter: ' ' });
534
+ const result = vectorA.toString({ decimals: 1, delimiter: ' ' });
535
+ expect(result).toEqual(vectorB);
536
+ });
537
+ it('should be able to compute a string representation of the vector with the same result as the coreHelpers function using a string', () => {
538
+ const regular = '1.33, 2.14';
539
+ const alternateDelimiter = '1.33+2.14';
540
+ const vectorBuilderA = new VectorXZBuilder(regular);
541
+ const vectorBuilderB = new VectorXZBuilder(alternateDelimiter, '+');
542
+ const vectorA = VectorXZUtils.fromString(regular);
543
+ const vectorB = VectorXZUtils.fromString(alternateDelimiter, '+');
544
+ expect(vectorBuilderA).toEqual(vectorA);
545
+ expect(vectorBuilderB).toEqual(vectorB);
546
+ });
547
+ it('makes a 0 vector for invalid string', () => {
548
+ const regular = '1.33, sdfg, 3.55';
549
+ expect(new VectorXZBuilder(regular)).toEqual({ x: 0, z: 0 });
550
+ });
551
+ it('should be able compute the lerp halfway between two vectors with the same result as the coreHelpers function', () => {
552
+ const vectorA = new VectorXZBuilder(5, 6);
553
+ const vectorB = new VectorXZBuilder(4, 2);
554
+ const ratio = 0.4;
555
+ const resultA = VectorXZUtils.lerp(vectorA, vectorB, ratio);
556
+ const resultB = vectorA.lerp(vectorB, ratio);
557
+ expect(resultA).toEqual(resultB);
558
+ });
559
+ it('should be able compute the slerp halfway between two vectors with the same result as the coreHelpers function', () => {
560
+ const vectorA = new VectorXZBuilder(5, 6);
561
+ const vectorB = new VectorXZBuilder(4, 2);
562
+ const ratio = 0.4;
563
+ const resultA = VectorXZUtils.slerp(vectorA, vectorB, ratio);
564
+ const resultB = vectorA.slerp(vectorB, ratio);
565
+ expect(resultA).toEqual(resultB);
566
+ });
567
+ it('should be able to multiply with the same result as the coreHelpers function', () => {
568
+ const vectorA = new VectorXZBuilder(5, 6);
569
+ const vectorB = new VectorXZBuilder(4, 2);
570
+ const resultA = VectorXZUtils.multiply(vectorA, vectorB);
571
+ const resultB = vectorA.multiply(vectorB);
572
+ expect(resultA).toEqual(resultB);
573
+ });
574
+ });
575
+ //# sourceMappingURL=vectorWrapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorWrapper.test.js","sourceRoot":"","sources":["../../../src/vector3/vectorWrapper.test.ts"],"names":[],"mappings":"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"}