@pawells/math-extended 1.0.1 → 1.0.4

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 (94) hide show
  1. package/README.md +24 -1
  2. package/build/index.d.ts +3 -0
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +5 -0
  5. package/build/index.js.map +1 -1
  6. package/build/quaternions/asserts.d.ts +1 -1
  7. package/build/quaternions/asserts.d.ts.map +1 -1
  8. package/build/quaternions/asserts.js +1 -1
  9. package/build/quaternions/asserts.js.map +1 -1
  10. package/package.json +16 -4
  11. package/build/angles.spec.d.ts +0 -2
  12. package/build/angles.spec.d.ts.map +0 -1
  13. package/build/angles.spec.js +0 -147
  14. package/build/angles.spec.js.map +0 -1
  15. package/build/clamp.spec.d.ts +0 -2
  16. package/build/clamp.spec.d.ts.map +0 -1
  17. package/build/clamp.spec.js +0 -19
  18. package/build/clamp.spec.js.map +0 -1
  19. package/build/documentation-validation.spec.d.ts +0 -11
  20. package/build/documentation-validation.spec.d.ts.map +0 -1
  21. package/build/documentation-validation.spec.js +0 -401
  22. package/build/documentation-validation.spec.js.map +0 -1
  23. package/build/interpolation.spec.d.ts +0 -2
  24. package/build/interpolation.spec.d.ts.map +0 -1
  25. package/build/interpolation.spec.js +0 -480
  26. package/build/interpolation.spec.js.map +0 -1
  27. package/build/matrices/arithmetic.spec.d.ts +0 -2
  28. package/build/matrices/arithmetic.spec.d.ts.map +0 -1
  29. package/build/matrices/arithmetic.spec.js +0 -915
  30. package/build/matrices/arithmetic.spec.js.map +0 -1
  31. package/build/matrices/asserts.spec.d.ts +0 -2
  32. package/build/matrices/asserts.spec.d.ts.map +0 -1
  33. package/build/matrices/asserts.spec.js +0 -565
  34. package/build/matrices/asserts.spec.js.map +0 -1
  35. package/build/matrices/core.spec.d.ts +0 -2
  36. package/build/matrices/core.spec.d.ts.map +0 -1
  37. package/build/matrices/core.spec.js +0 -634
  38. package/build/matrices/core.spec.js.map +0 -1
  39. package/build/matrices/decompositions.spec.d.ts +0 -2
  40. package/build/matrices/decompositions.spec.d.ts.map +0 -1
  41. package/build/matrices/decompositions.spec.js +0 -195
  42. package/build/matrices/decompositions.spec.js.map +0 -1
  43. package/build/matrices/linear-algebra.spec.d.ts +0 -2
  44. package/build/matrices/linear-algebra.spec.d.ts.map +0 -1
  45. package/build/matrices/linear-algebra.spec.js +0 -355
  46. package/build/matrices/linear-algebra.spec.js.map +0 -1
  47. package/build/matrices/normalization.spec.d.ts +0 -2
  48. package/build/matrices/normalization.spec.d.ts.map +0 -1
  49. package/build/matrices/normalization.spec.js +0 -335
  50. package/build/matrices/normalization.spec.js.map +0 -1
  51. package/build/matrices/transformations.spec.d.ts +0 -2
  52. package/build/matrices/transformations.spec.d.ts.map +0 -1
  53. package/build/matrices/transformations.spec.js +0 -755
  54. package/build/matrices/transformations.spec.js.map +0 -1
  55. package/build/quaternions/asserts.spec.d.ts +0 -2
  56. package/build/quaternions/asserts.spec.d.ts.map +0 -1
  57. package/build/quaternions/asserts.spec.js +0 -320
  58. package/build/quaternions/asserts.spec.js.map +0 -1
  59. package/build/quaternions/conversions.spec.d.ts +0 -2
  60. package/build/quaternions/conversions.spec.d.ts.map +0 -1
  61. package/build/quaternions/conversions.spec.js +0 -344
  62. package/build/quaternions/conversions.spec.js.map +0 -1
  63. package/build/quaternions/core.spec.d.ts +0 -2
  64. package/build/quaternions/core.spec.d.ts.map +0 -1
  65. package/build/quaternions/core.spec.js +0 -294
  66. package/build/quaternions/core.spec.js.map +0 -1
  67. package/build/quaternions/interpolation.spec.d.ts +0 -2
  68. package/build/quaternions/interpolation.spec.d.ts.map +0 -1
  69. package/build/quaternions/interpolation.spec.js +0 -64
  70. package/build/quaternions/interpolation.spec.js.map +0 -1
  71. package/build/quaternions/predefined.spec.d.ts +0 -2
  72. package/build/quaternions/predefined.spec.d.ts.map +0 -1
  73. package/build/quaternions/predefined.spec.js +0 -35
  74. package/build/quaternions/predefined.spec.js.map +0 -1
  75. package/build/random.spec.d.ts +0 -2
  76. package/build/random.spec.d.ts.map +0 -1
  77. package/build/random.spec.js +0 -267
  78. package/build/random.spec.js.map +0 -1
  79. package/build/vectors/asserts.spec.d.ts +0 -2
  80. package/build/vectors/asserts.spec.d.ts.map +0 -1
  81. package/build/vectors/asserts.spec.js +0 -260
  82. package/build/vectors/asserts.spec.js.map +0 -1
  83. package/build/vectors/core.spec.d.ts +0 -2
  84. package/build/vectors/core.spec.d.ts.map +0 -1
  85. package/build/vectors/core.spec.js +0 -343
  86. package/build/vectors/core.spec.js.map +0 -1
  87. package/build/vectors/interpolation.spec.d.ts +0 -2
  88. package/build/vectors/interpolation.spec.d.ts.map +0 -1
  89. package/build/vectors/interpolation.spec.js +0 -378
  90. package/build/vectors/interpolation.spec.js.map +0 -1
  91. package/build/vectors/predefined.spec.d.ts +0 -2
  92. package/build/vectors/predefined.spec.d.ts.map +0 -1
  93. package/build/vectors/predefined.spec.js +0 -333
  94. package/build/vectors/predefined.spec.js.map +0 -1
@@ -1,333 +0,0 @@
1
- import { VectorZero, VectorOne, Vector2Up, Vector3Up, Vector4Up, Vector2Down, Vector3Down, Vector4Down, Vector2Left, Vector3Left, Vector4Left, Vector2Right, Vector3Right, Vector4Right, Vector3Forward, Vector4Forward, Vector3Backward, Vector4Backward, } from './predefined.js';
2
- describe('Predefined Vectors', () => {
3
- describe('VectorZero', () => {
4
- it('should create a 1D zero vector', () => {
5
- const vector = VectorZero(1);
6
- expect(vector).toEqual([0]);
7
- expect(vector).toHaveLength(1);
8
- });
9
- it('should create a 2D zero vector', () => {
10
- const vector = VectorZero(2);
11
- expect(vector).toEqual([0, 0]);
12
- expect(vector).toHaveLength(2);
13
- });
14
- it('should create a 3D zero vector', () => {
15
- const vector = VectorZero(3);
16
- expect(vector).toEqual([0, 0, 0]);
17
- expect(vector).toHaveLength(3);
18
- });
19
- it('should create a 4D zero vector', () => {
20
- const vector = VectorZero(4);
21
- expect(vector).toEqual([0, 0, 0, 0]);
22
- expect(vector).toHaveLength(4);
23
- });
24
- });
25
- describe('VectorOne', () => {
26
- it('should create a 1D ones vector', () => {
27
- const vector = VectorOne(1);
28
- expect(vector).toEqual([1]);
29
- expect(vector).toHaveLength(1);
30
- });
31
- it('should create a 2D ones vector', () => {
32
- const vector = VectorOne(2);
33
- expect(vector).toEqual([1, 1]);
34
- expect(vector).toHaveLength(2);
35
- });
36
- it('should create a 3D ones vector', () => {
37
- const vector = VectorOne(3);
38
- expect(vector).toEqual([1, 1, 1]);
39
- expect(vector).toHaveLength(3);
40
- });
41
- it('should create a 4D ones vector', () => {
42
- const vector = VectorOne(4);
43
- expect(vector).toEqual([1, 1, 1, 1]);
44
- expect(vector).toHaveLength(4);
45
- });
46
- });
47
- describe('2D Direction Vectors', () => {
48
- describe('Vector2Up', () => {
49
- it('should create a 2D up direction vector', () => {
50
- const vector = Vector2Up();
51
- expect(vector).toEqual([0, 1]);
52
- expect(vector).toHaveLength(2);
53
- });
54
- it('should return a new instance each time', () => {
55
- const vector1 = Vector2Up();
56
- const vector2 = Vector2Up();
57
- expect(vector1).toEqual(vector2);
58
- expect(vector1).not.toBe(vector2); // Different instances
59
- });
60
- });
61
- describe('Vector2Down', () => {
62
- it('should create a 2D down direction vector', () => {
63
- const vector = Vector2Down();
64
- expect(vector).toEqual([0, -1]);
65
- expect(vector).toHaveLength(2);
66
- });
67
- it('should return a new instance each time', () => {
68
- const vector1 = Vector2Down();
69
- const vector2 = Vector2Down();
70
- expect(vector1).toEqual(vector2);
71
- expect(vector1).not.toBe(vector2);
72
- });
73
- });
74
- describe('Vector2Left', () => {
75
- it('should create a 2D left direction vector', () => {
76
- const vector = Vector2Left();
77
- expect(vector).toEqual([-1, 0]);
78
- expect(vector).toHaveLength(2);
79
- });
80
- it('should return a new instance each time', () => {
81
- const vector1 = Vector2Left();
82
- const vector2 = Vector2Left();
83
- expect(vector1).toEqual(vector2);
84
- expect(vector1).not.toBe(vector2);
85
- });
86
- });
87
- describe('Vector2Right', () => {
88
- it('should create a 2D right direction vector', () => {
89
- const vector = Vector2Right();
90
- expect(vector).toEqual([1, 0]);
91
- expect(vector).toHaveLength(2);
92
- });
93
- it('should return a new instance each time', () => {
94
- const vector1 = Vector2Right();
95
- const vector2 = Vector2Right();
96
- expect(vector1).toEqual(vector2);
97
- expect(vector1).not.toBe(vector2);
98
- });
99
- });
100
- });
101
- describe('3D Direction Vectors', () => {
102
- describe('Vector3Up', () => {
103
- it('should create a 3D up direction vector', () => {
104
- const vector = Vector3Up();
105
- expect(vector).toEqual([0, 1, 0]);
106
- expect(vector).toHaveLength(3);
107
- });
108
- it('should return a new instance each time', () => {
109
- const vector1 = Vector3Up();
110
- const vector2 = Vector3Up();
111
- expect(vector1).toEqual(vector2);
112
- expect(vector1).not.toBe(vector2);
113
- });
114
- });
115
- describe('Vector3Down', () => {
116
- it('should create a 3D down direction vector', () => {
117
- const vector = Vector3Down();
118
- expect(vector).toEqual([0, -1, 0]);
119
- expect(vector).toHaveLength(3);
120
- });
121
- it('should return a new instance each time', () => {
122
- const vector1 = Vector3Down();
123
- const vector2 = Vector3Down();
124
- expect(vector1).toEqual(vector2);
125
- expect(vector1).not.toBe(vector2);
126
- });
127
- });
128
- describe('Vector3Left', () => {
129
- it('should create a 3D left direction vector', () => {
130
- const vector = Vector3Left();
131
- expect(vector).toEqual([-1, 0, 0]);
132
- expect(vector).toHaveLength(3);
133
- });
134
- it('should return a new instance each time', () => {
135
- const vector1 = Vector3Left();
136
- const vector2 = Vector3Left();
137
- expect(vector1).toEqual(vector2);
138
- expect(vector1).not.toBe(vector2);
139
- });
140
- });
141
- describe('Vector3Right', () => {
142
- it('should create a 3D right direction vector', () => {
143
- const vector = Vector3Right();
144
- expect(vector).toEqual([1, 0, 0]);
145
- expect(vector).toHaveLength(3);
146
- });
147
- it('should return a new instance each time', () => {
148
- const vector1 = Vector3Right();
149
- const vector2 = Vector3Right();
150
- expect(vector1).toEqual(vector2);
151
- expect(vector1).not.toBe(vector2);
152
- });
153
- });
154
- describe('Vector3Forward', () => {
155
- it('should create a 3D forward direction vector', () => {
156
- const vector = Vector3Forward();
157
- expect(vector).toEqual([0, 0, 1]);
158
- expect(vector).toHaveLength(3);
159
- });
160
- it('should return a new instance each time', () => {
161
- const vector1 = Vector3Forward();
162
- const vector2 = Vector3Forward();
163
- expect(vector1).toEqual(vector2);
164
- expect(vector1).not.toBe(vector2);
165
- });
166
- });
167
- describe('Vector3Backward', () => {
168
- it('should create a 3D backward direction vector', () => {
169
- const vector = Vector3Backward();
170
- expect(vector).toEqual([0, 0, -1]);
171
- expect(vector).toHaveLength(3);
172
- });
173
- it('should return a new instance each time', () => {
174
- const vector1 = Vector3Backward();
175
- const vector2 = Vector3Backward();
176
- expect(vector1).toEqual(vector2);
177
- expect(vector1).not.toBe(vector2);
178
- });
179
- });
180
- });
181
- describe('4D Direction Vectors', () => {
182
- describe('Vector4Up', () => {
183
- it('should create a 4D up direction vector', () => {
184
- const vector = Vector4Up();
185
- expect(vector).toEqual([0, 1, 0, 0]);
186
- expect(vector).toHaveLength(4);
187
- });
188
- it('should return a new instance each time', () => {
189
- const vector1 = Vector4Up();
190
- const vector2 = Vector4Up();
191
- expect(vector1).toEqual(vector2);
192
- expect(vector1).not.toBe(vector2);
193
- });
194
- });
195
- describe('Vector4Down', () => {
196
- it('should create a 4D down direction vector', () => {
197
- const vector = Vector4Down();
198
- expect(vector).toEqual([0, -1, 0, 0]);
199
- expect(vector).toHaveLength(4);
200
- });
201
- it('should return a new instance each time', () => {
202
- const vector1 = Vector4Down();
203
- const vector2 = Vector4Down();
204
- expect(vector1).toEqual(vector2);
205
- expect(vector1).not.toBe(vector2);
206
- });
207
- });
208
- describe('Vector4Left', () => {
209
- it('should create a 4D left direction vector', () => {
210
- const vector = Vector4Left();
211
- expect(vector).toEqual([-1, 0, 0, 0]);
212
- expect(vector).toHaveLength(4);
213
- });
214
- it('should return a new instance each time', () => {
215
- const vector1 = Vector4Left();
216
- const vector2 = Vector4Left();
217
- expect(vector1).toEqual(vector2);
218
- expect(vector1).not.toBe(vector2);
219
- });
220
- });
221
- describe('Vector4Right', () => {
222
- it('should create a 4D right direction vector', () => {
223
- const vector = Vector4Right();
224
- expect(vector).toEqual([1, 0, 0, 0]);
225
- expect(vector).toHaveLength(4);
226
- });
227
- it('should return a new instance each time', () => {
228
- const vector1 = Vector4Right();
229
- const vector2 = Vector4Right();
230
- expect(vector1).toEqual(vector2);
231
- expect(vector1).not.toBe(vector2);
232
- });
233
- });
234
- describe('Vector4Forward', () => {
235
- it('should create a 4D forward direction vector', () => {
236
- const vector = Vector4Forward();
237
- expect(vector).toEqual([0, 0, 1, 0]);
238
- expect(vector).toHaveLength(4);
239
- });
240
- it('should return a new instance each time', () => {
241
- const vector1 = Vector4Forward();
242
- const vector2 = Vector4Forward();
243
- expect(vector1).toEqual(vector2);
244
- expect(vector1).not.toBe(vector2);
245
- });
246
- });
247
- describe('Vector4Backward', () => {
248
- it('should create a 4D backward direction vector', () => {
249
- const vector = Vector4Backward();
250
- expect(vector).toEqual([0, 0, -1, 0]);
251
- expect(vector).toHaveLength(4);
252
- });
253
- it('should return a new instance each time', () => {
254
- const vector1 = Vector4Backward();
255
- const vector2 = Vector4Backward();
256
- expect(vector1).toEqual(vector2);
257
- expect(vector1).not.toBe(vector2);
258
- });
259
- });
260
- });
261
- describe('Mathematical Properties', () => {
262
- it('should create unit vectors for all direction functions', () => {
263
- // Test that all direction vectors have magnitude of 1 (within floating point precision)
264
- const vectors = [
265
- Vector2Up(),
266
- Vector2Down(),
267
- Vector2Left(),
268
- Vector2Right(),
269
- Vector3Up(),
270
- Vector3Down(),
271
- Vector3Left(),
272
- Vector3Right(),
273
- Vector3Forward(),
274
- Vector3Backward(),
275
- Vector4Up(),
276
- Vector4Down(),
277
- Vector4Left(),
278
- Vector4Right(),
279
- Vector4Forward(),
280
- Vector4Backward(),
281
- ];
282
- vectors.forEach((vector) => {
283
- const magnitude = Math.sqrt(vector.reduce((sum, component) => sum + (component * component), 0));
284
- expect(magnitude).toBeCloseTo(1, 10);
285
- });
286
- });
287
- it('should create orthogonal pairs for opposite directions', () => {
288
- // Test 2D orthogonal pairs
289
- const up2D = Vector2Up();
290
- const down2D = Vector2Down();
291
- const left2D = Vector2Left();
292
- const right2D = Vector2Right();
293
- // Dot product of opposite vectors should be -1
294
- expect((up2D[0] * down2D[0]) + (up2D[1] * down2D[1])).toBeCloseTo(-1);
295
- expect((left2D[0] * right2D[0]) + (left2D[1] * right2D[1])).toBeCloseTo(-1);
296
- // Dot product of perpendicular vectors should be 0
297
- expect((up2D[0] * left2D[0]) + (up2D[1] * left2D[1])).toBeCloseTo(0);
298
- expect((up2D[0] * right2D[0]) + (up2D[1] * right2D[1])).toBeCloseTo(0);
299
- // Test 3D orthogonal pairs
300
- const up3D = Vector3Up();
301
- const down3D = Vector3Down();
302
- const left3D = Vector3Left();
303
- const right3D = Vector3Right();
304
- const forward3D = Vector3Forward();
305
- const backward3D = Vector3Backward();
306
- // Dot product of opposite vectors should be -1
307
- expect((up3D[0] * down3D[0]) + (up3D[1] * down3D[1]) + (up3D[2] * down3D[2])).toBeCloseTo(-1);
308
- expect((left3D[0] * right3D[0]) + (left3D[1] * right3D[1]) + (left3D[2] * right3D[2])).toBeCloseTo(-1);
309
- expect((forward3D[0] * backward3D[0]) + (forward3D[1] * backward3D[1]) + (forward3D[2] * backward3D[2])).toBeCloseTo(-1);
310
- // Dot product of perpendicular vectors should be 0
311
- expect((up3D[0] * left3D[0]) + (up3D[1] * left3D[1]) + (up3D[2] * left3D[2])).toBeCloseTo(0);
312
- expect((up3D[0] * forward3D[0]) + (up3D[1] * forward3D[1]) + (up3D[2] * forward3D[2])).toBeCloseTo(0);
313
- expect((left3D[0] * forward3D[0]) + (left3D[1] * forward3D[1]) + (left3D[2] * forward3D[2])).toBeCloseTo(0);
314
- });
315
- });
316
- describe('Immutability', () => {
317
- it('should not affect original vectors when modified', () => {
318
- const zero2D = VectorZero(2);
319
- const originalZero = [...zero2D];
320
- zero2D[0] = 999;
321
- const newZero2D = VectorZero(2);
322
- expect(newZero2D).toEqual(originalZero);
323
- expect(newZero2D).not.toEqual(zero2D);
324
- const up = Vector3Up();
325
- const originalUp = [...up];
326
- up[1] = 999;
327
- const newUp = Vector3Up();
328
- expect(newUp).toEqual(originalUp);
329
- expect(newUp).not.toEqual(up);
330
- });
331
- });
332
- });
333
- //# sourceMappingURL=predefined.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"predefined.spec.js","sourceRoot":"","sources":["../../src/vectors/predefined.spec.ts"],"names":[],"mappings":"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"}