From 7fdde5e84a8f76eaafbfcc9fc6263a9261e5cc7a Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Fri, 14 Mar 2025 11:30:49 +1000 Subject: [PATCH] tests(ui): fix constrainNumber --- .../nodes/util/constrainNumber.test.ts | 79 ++++++++++--------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/invokeai/frontend/web/src/features/nodes/util/constrainNumber.test.ts b/invokeai/frontend/web/src/features/nodes/util/constrainNumber.test.ts index 99255ddd97..6deccac97f 100644 --- a/invokeai/frontend/web/src/features/nodes/util/constrainNumber.test.ts +++ b/invokeai/frontend/web/src/features/nodes/util/constrainNumber.test.ts @@ -2,83 +2,90 @@ import { describe, expect, it } from 'vitest'; import { constrainNumber } from './constrainNumber'; +expect.addEqualityTesters([ + function (a, b) { + if (typeof a === 'number' && typeof b === 'number') { + return a === b; + } + }, +]); + describe('constrainNumber', () => { // Default constraints to be used in tests const defaultConstraints = { min: 0, max: 10, step: 1 }; it('should keep values within range', () => { - expect(constrainNumber(5, defaultConstraints)).toBe(5); - expect(constrainNumber(-5, defaultConstraints)).toBe(0); - expect(constrainNumber(15, defaultConstraints)).toBe(10); + expect(constrainNumber(5, defaultConstraints)).toEqual(5); + expect(constrainNumber(-5, defaultConstraints)).toEqual(0); + expect(constrainNumber(15, defaultConstraints)).toEqual(10); }); it('should round to nearest multiple', () => { const constraints = { min: 0, max: 10, step: 2 }; - expect(constrainNumber(1, constraints)).toBe(2); - expect(constrainNumber(2, constraints)).toBe(2); - expect(constrainNumber(3, constraints)).toBe(4); - expect(constrainNumber(9, constraints)).toBe(10); - expect(constrainNumber(11, constraints)).toBe(10); + expect(constrainNumber(1, constraints)).toEqual(2); + expect(constrainNumber(2, constraints)).toEqual(2); + expect(constrainNumber(3, constraints)).toEqual(4); + expect(constrainNumber(9, constraints)).toEqual(10); + expect(constrainNumber(11, constraints)).toEqual(10); }); it('should handle negative multiples', () => { const constraints = { min: -10, max: 10, step: 3 }; - expect(constrainNumber(-9, constraints)).toBe(-9); - expect(constrainNumber(-8, constraints)).toBe(-9); - expect(constrainNumber(-7, constraints)).toBe(-6); - expect(constrainNumber(-3, constraints)).toBe(-3); - expect(constrainNumber(-2, constraints)).toBe(-3); - // In JS, -0 !== +0... :) - expect(constrainNumber(-1, constraints)).toBe(0); - expect(constrainNumber(0, constraints)).toBe(0); - expect(constrainNumber(1, constraints)).toBe(0); - expect(constrainNumber(2, constraints)).toBe(3); - expect(constrainNumber(3, constraints)).toBe(3); - expect(constrainNumber(4, constraints)).toBe(3); - expect(constrainNumber(7, constraints)).toBe(6); - expect(constrainNumber(8, constraints)).toBe(9); - expect(constrainNumber(9, constraints)).toBe(9); + expect(constrainNumber(-9, constraints)).toEqual(-9); + expect(constrainNumber(-8, constraints)).toEqual(-9); + expect(constrainNumber(-7, constraints)).toEqual(-6); + expect(constrainNumber(-3, constraints)).toEqual(-3); + expect(constrainNumber(-2, constraints)).toEqual(-3); + expect(constrainNumber(-1, constraints)).toEqual(0); + expect(constrainNumber(0, constraints)).toEqual(0); + expect(constrainNumber(1, constraints)).toEqual(0); + expect(constrainNumber(2, constraints)).toEqual(3); + expect(constrainNumber(3, constraints)).toEqual(3); + expect(constrainNumber(4, constraints)).toEqual(3); + expect(constrainNumber(7, constraints)).toEqual(6); + expect(constrainNumber(8, constraints)).toEqual(9); + expect(constrainNumber(9, constraints)).toEqual(9); }); it('should respect boundaries when rounding', () => { const constraints = { min: 0, max: 10, step: 4 }; // Value at 9 would normally round to 8 - expect(constrainNumber(9, constraints)).toBe(8); + expect(constrainNumber(9, constraints)).toEqual(8); // Value at 11 would normally round to 12, but max is 10 - expect(constrainNumber(11, constraints)).toBe(10); + expect(constrainNumber(11, constraints)).toEqual(10); }); it('should handle decimal multiples', () => { const constraints = { min: 0, max: 1, step: 0.25 }; - expect(constrainNumber(0.3, constraints)).toBe(0.25); - expect(constrainNumber(0.87, constraints)).toBe(0.75); - expect(constrainNumber(0.88, constraints)).toBe(1.0); - expect(constrainNumber(0.13, constraints)).toBe(0.25); + expect(constrainNumber(0.3, constraints)).toEqual(0.25); + expect(constrainNumber(0.87, constraints)).toEqual(0.75); + expect(constrainNumber(0.88, constraints)).toEqual(1.0); + expect(constrainNumber(0.13, constraints)).toEqual(0.25); }); it('should apply overrides correctly', () => { // Override min - expect(constrainNumber(2, defaultConstraints, { min: 5 })).toBe(5); + expect(constrainNumber(2, defaultConstraints, { min: 5 })).toEqual(5); // Override max - expect(constrainNumber(8, defaultConstraints, { max: 7 })).toBe(7); + expect(constrainNumber(8, defaultConstraints, { max: 7 })).toEqual(7); // Override multipleOf - expect(constrainNumber(4.7, defaultConstraints, { step: 2 })).toBe(4); + expect(constrainNumber(4.7, defaultConstraints, { step: 2 })).toEqual(4); // Override all - expect(constrainNumber(15, defaultConstraints, { min: 5, max: 20, step: 5 })).toBe(15); + expect(constrainNumber(15, defaultConstraints, { min: 5, max: 20, step: 5 })).toEqual(15); }); it('should handle edge cases', () => { // Value exactly at min - expect(constrainNumber(0, defaultConstraints)).toBe(0); + expect(constrainNumber(0, defaultConstraints)).toEqual(0); // Value exactly at max - expect(constrainNumber(10, defaultConstraints)).toBe(10); + expect(constrainNumber(10, defaultConstraints)).toEqual(10); // multipleOf larger than range const narrowConstraints = { min: 5, max: 7, step: 5 }; - expect(constrainNumber(6, narrowConstraints)).toBe(5); + expect(constrainNumber(6, narrowConstraints)).toEqual(5); }); });