Skip to content

Commit 7fdde5e

Browse files
tests(ui): fix constrainNumber
1 parent 895956b commit 7fdde5e

File tree

1 file changed

+43
-36
lines changed

1 file changed

+43
-36
lines changed

Diff for: invokeai/frontend/web/src/features/nodes/util/constrainNumber.test.ts

+43-36
Original file line numberDiff line numberDiff line change
@@ -2,83 +2,90 @@ import { describe, expect, it } from 'vitest';
22

33
import { constrainNumber } from './constrainNumber';
44

5+
expect.addEqualityTesters([
6+
function (a, b) {
7+
if (typeof a === 'number' && typeof b === 'number') {
8+
return a === b;
9+
}
10+
},
11+
]);
12+
513
describe('constrainNumber', () => {
614
// Default constraints to be used in tests
715
const defaultConstraints = { min: 0, max: 10, step: 1 };
816

917
it('should keep values within range', () => {
10-
expect(constrainNumber(5, defaultConstraints)).toBe(5);
11-
expect(constrainNumber(-5, defaultConstraints)).toBe(0);
12-
expect(constrainNumber(15, defaultConstraints)).toBe(10);
18+
expect(constrainNumber(5, defaultConstraints)).toEqual(5);
19+
expect(constrainNumber(-5, defaultConstraints)).toEqual(0);
20+
expect(constrainNumber(15, defaultConstraints)).toEqual(10);
1321
});
1422

1523
it('should round to nearest multiple', () => {
1624
const constraints = { min: 0, max: 10, step: 2 };
17-
expect(constrainNumber(1, constraints)).toBe(2);
18-
expect(constrainNumber(2, constraints)).toBe(2);
19-
expect(constrainNumber(3, constraints)).toBe(4);
20-
expect(constrainNumber(9, constraints)).toBe(10);
21-
expect(constrainNumber(11, constraints)).toBe(10);
25+
expect(constrainNumber(1, constraints)).toEqual(2);
26+
expect(constrainNumber(2, constraints)).toEqual(2);
27+
expect(constrainNumber(3, constraints)).toEqual(4);
28+
expect(constrainNumber(9, constraints)).toEqual(10);
29+
expect(constrainNumber(11, constraints)).toEqual(10);
2230
});
2331

2432
it('should handle negative multiples', () => {
2533
const constraints = { min: -10, max: 10, step: 3 };
26-
expect(constrainNumber(-9, constraints)).toBe(-9);
27-
expect(constrainNumber(-8, constraints)).toBe(-9);
28-
expect(constrainNumber(-7, constraints)).toBe(-6);
29-
expect(constrainNumber(-3, constraints)).toBe(-3);
30-
expect(constrainNumber(-2, constraints)).toBe(-3);
31-
// In JS, -0 !== +0... :)
32-
expect(constrainNumber(-1, constraints)).toBe(0);
33-
expect(constrainNumber(0, constraints)).toBe(0);
34-
expect(constrainNumber(1, constraints)).toBe(0);
35-
expect(constrainNumber(2, constraints)).toBe(3);
36-
expect(constrainNumber(3, constraints)).toBe(3);
37-
expect(constrainNumber(4, constraints)).toBe(3);
38-
expect(constrainNumber(7, constraints)).toBe(6);
39-
expect(constrainNumber(8, constraints)).toBe(9);
40-
expect(constrainNumber(9, constraints)).toBe(9);
34+
expect(constrainNumber(-9, constraints)).toEqual(-9);
35+
expect(constrainNumber(-8, constraints)).toEqual(-9);
36+
expect(constrainNumber(-7, constraints)).toEqual(-6);
37+
expect(constrainNumber(-3, constraints)).toEqual(-3);
38+
expect(constrainNumber(-2, constraints)).toEqual(-3);
39+
expect(constrainNumber(-1, constraints)).toEqual(0);
40+
expect(constrainNumber(0, constraints)).toEqual(0);
41+
expect(constrainNumber(1, constraints)).toEqual(0);
42+
expect(constrainNumber(2, constraints)).toEqual(3);
43+
expect(constrainNumber(3, constraints)).toEqual(3);
44+
expect(constrainNumber(4, constraints)).toEqual(3);
45+
expect(constrainNumber(7, constraints)).toEqual(6);
46+
expect(constrainNumber(8, constraints)).toEqual(9);
47+
expect(constrainNumber(9, constraints)).toEqual(9);
4148
});
4249

4350
it('should respect boundaries when rounding', () => {
4451
const constraints = { min: 0, max: 10, step: 4 };
4552
// Value at 9 would normally round to 8
46-
expect(constrainNumber(9, constraints)).toBe(8);
53+
expect(constrainNumber(9, constraints)).toEqual(8);
4754
// Value at 11 would normally round to 12, but max is 10
48-
expect(constrainNumber(11, constraints)).toBe(10);
55+
expect(constrainNumber(11, constraints)).toEqual(10);
4956
});
5057

5158
it('should handle decimal multiples', () => {
5259
const constraints = { min: 0, max: 1, step: 0.25 };
53-
expect(constrainNumber(0.3, constraints)).toBe(0.25);
54-
expect(constrainNumber(0.87, constraints)).toBe(0.75);
55-
expect(constrainNumber(0.88, constraints)).toBe(1.0);
56-
expect(constrainNumber(0.13, constraints)).toBe(0.25);
60+
expect(constrainNumber(0.3, constraints)).toEqual(0.25);
61+
expect(constrainNumber(0.87, constraints)).toEqual(0.75);
62+
expect(constrainNumber(0.88, constraints)).toEqual(1.0);
63+
expect(constrainNumber(0.13, constraints)).toEqual(0.25);
5764
});
5865

5966
it('should apply overrides correctly', () => {
6067
// Override min
61-
expect(constrainNumber(2, defaultConstraints, { min: 5 })).toBe(5);
68+
expect(constrainNumber(2, defaultConstraints, { min: 5 })).toEqual(5);
6269

6370
// Override max
64-
expect(constrainNumber(8, defaultConstraints, { max: 7 })).toBe(7);
71+
expect(constrainNumber(8, defaultConstraints, { max: 7 })).toEqual(7);
6572

6673
// Override multipleOf
67-
expect(constrainNumber(4.7, defaultConstraints, { step: 2 })).toBe(4);
74+
expect(constrainNumber(4.7, defaultConstraints, { step: 2 })).toEqual(4);
6875

6976
// Override all
70-
expect(constrainNumber(15, defaultConstraints, { min: 5, max: 20, step: 5 })).toBe(15);
77+
expect(constrainNumber(15, defaultConstraints, { min: 5, max: 20, step: 5 })).toEqual(15);
7178
});
7279

7380
it('should handle edge cases', () => {
7481
// Value exactly at min
75-
expect(constrainNumber(0, defaultConstraints)).toBe(0);
82+
expect(constrainNumber(0, defaultConstraints)).toEqual(0);
7683

7784
// Value exactly at max
78-
expect(constrainNumber(10, defaultConstraints)).toBe(10);
85+
expect(constrainNumber(10, defaultConstraints)).toEqual(10);
7986

8087
// multipleOf larger than range
8188
const narrowConstraints = { min: 5, max: 7, step: 5 };
82-
expect(constrainNumber(6, narrowConstraints)).toBe(5);
89+
expect(constrainNumber(6, narrowConstraints)).toEqual(5);
8390
});
8491
});

0 commit comments

Comments
 (0)