glmaths 0.0.1

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.
@@ -0,0 +1,115 @@
1
+ import { describe, it } from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import { radians, degrees, round, rad, deg, toRadians, toDegrees, clamp, mix, lerp, step, smoothstep, fract, sign, saturate } from '../dist/esm/glmaths'
4
+
5
+ function closeTo(actual: number, expected: number, numDigits = 5) {
6
+ const pass = Math.abs(actual - expected) < Math.pow(10, -numDigits) / 2
7
+ assert.ok(pass, `expected ${actual} to be close to ${expected}`)
8
+ }
9
+
10
+ describe('utils', () => {
11
+ describe('radians', () => {
12
+ it('converts 0 degrees to 0 radians', () => {
13
+ assert.strictEqual(radians(0), 0)
14
+ })
15
+ it('converts 180 degrees to PI radians', () => {
16
+ closeTo(radians(180), Math.PI)
17
+ })
18
+ it('converts 90 degrees to PI/2 radians', () => {
19
+ closeTo(radians(90), Math.PI / 2)
20
+ })
21
+ it('converts 360 degrees to 2*PI radians', () => {
22
+ closeTo(radians(360), 2 * Math.PI)
23
+ })
24
+ it('converts negative degrees', () => {
25
+ closeTo(radians(-90), -Math.PI / 2)
26
+ })
27
+ })
28
+
29
+ describe('degrees', () => {
30
+ it('converts 0 radians to 0 degrees', () => {
31
+ assert.strictEqual(degrees(0), 0)
32
+ })
33
+ it('converts PI radians to 180 degrees', () => {
34
+ closeTo(degrees(Math.PI), 180)
35
+ })
36
+ it('converts PI/2 radians to 90 degrees', () => {
37
+ closeTo(degrees(Math.PI / 2), 90)
38
+ })
39
+ })
40
+
41
+ describe('round', () => {
42
+ it('rounds positive numbers normally', () => {
43
+ assert.strictEqual(round(1.5), 2)
44
+ assert.strictEqual(round(2.3), 2)
45
+ assert.strictEqual(round(2.7), 3)
46
+ })
47
+ it('rounds negative half-integers down (bankers-style)', () => {
48
+ assert.strictEqual(round(-0.5), -1)
49
+ assert.strictEqual(round(-1.5), -2)
50
+ })
51
+ it('rounds other negative numbers normally', () => {
52
+ assert.strictEqual(round(-2.3), -2)
53
+ assert.strictEqual(round(-2.7), -3)
54
+ })
55
+ })
56
+
57
+ describe('aliases', () => {
58
+ it('rad is radians', () => {
59
+ assert.strictEqual(rad, radians)
60
+ })
61
+ it('toRadians is radians', () => {
62
+ assert.strictEqual(toRadians, radians)
63
+ })
64
+ it('deg is degrees', () => {
65
+ assert.strictEqual(deg, degrees)
66
+ })
67
+ it('toDegrees is degrees', () => {
68
+ assert.strictEqual(toDegrees, degrees)
69
+ })
70
+ })
71
+
72
+ describe('clamp', () => {
73
+ it('clamps below min', () => assert.strictEqual(clamp(-1, 0, 1), 0))
74
+ it('clamps above max', () => assert.strictEqual(clamp(2, 0, 1), 1))
75
+ it('passes through in range', () => assert.strictEqual(clamp(0.5, 0, 1), 0.5))
76
+ })
77
+
78
+ describe('mix / lerp', () => {
79
+ it('mix at 0 returns x', () => assert.strictEqual(mix(1, 2, 0), 1))
80
+ it('mix at 1 returns y', () => assert.strictEqual(mix(1, 2, 1), 2))
81
+ it('mix at 0.5 returns midpoint', () => assert.strictEqual(mix(0, 10, 0.5), 5))
82
+ it('lerp is alias for mix', () => assert.strictEqual(lerp, mix))
83
+ })
84
+
85
+ describe('step', () => {
86
+ it('below edge returns 0', () => assert.strictEqual(step(0.5, 0.3), 0))
87
+ it('at edge returns 1', () => assert.strictEqual(step(0.5, 0.5), 1))
88
+ it('above edge returns 1', () => assert.strictEqual(step(0.5, 0.7), 1))
89
+ })
90
+
91
+ describe('smoothstep', () => {
92
+ it('below edge0 returns 0', () => assert.strictEqual(smoothstep(0, 1, -0.5), 0))
93
+ it('above edge1 returns 1', () => assert.strictEqual(smoothstep(0, 1, 1.5), 1))
94
+ it('midpoint', () => closeTo(smoothstep(0, 1, 0.5), 0.5))
95
+ })
96
+
97
+ describe('fract', () => {
98
+ it('fractional part of positive', () => closeTo(fract(1.7), 0.7))
99
+ it('fractional part of negative', () => closeTo(fract(-0.3), 0.7))
100
+ })
101
+
102
+ describe('sign', () => {
103
+ it('positive returns 1', () => assert.strictEqual(sign(5), 1))
104
+ it('negative returns -1', () => assert.strictEqual(sign(-3), -1))
105
+ it('zero returns 0', () => assert.strictEqual(sign(0), 0))
106
+ })
107
+
108
+ describe('saturate', () => {
109
+ it('clamps to 0-1', () => {
110
+ assert.strictEqual(saturate(-1), 0)
111
+ assert.strictEqual(saturate(0.5), 0.5)
112
+ assert.strictEqual(saturate(2), 1)
113
+ })
114
+ })
115
+ })