import { DOUBLE_EPSILON } from '../../../lib/math/float'; import { Vector2D } from '../../../lib/graphics/Vector2D'; import { Vector2DArray } from '../../../lib/graphics/Vector2DArray'; const vector2d = Vector2D.create; describe('graphics.Vector2DArray', () => { describe('equal', () => { test.each([ [[], [], true], [[vector2d()], [], false], [[], [vector2d()], false], [[vector2d()], [vector2d()], true], [[vector2d(), vector2d()], [vector2d()], false], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d()], false], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1)], true], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], false], ])('equal#%#', (lhs: Vector2D[], rhs: Vector2D[], result: boolean) => { expect(Vector2DArray.equal(lhs, rhs)).toBe(result); }); }); describe('fuzzyEqual', () => { test.each([ [[], [], true, undefined], [[vector2d()], [], false, undefined], [[], [vector2d()], false, undefined], [[vector2d()], [vector2d()], true, undefined], [[vector2d(), vector2d()], [vector2d()], false, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d()], false, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1)], true, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], true, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], false, DOUBLE_EPSILON], ])('fuzzyEqual#%#', (lhs: Vector2D[], rhs: Vector2D[], result: boolean, epsilon?: number) => { expect(Vector2DArray.fuzzyEqual(lhs, rhs, epsilon)).toBe(result); }); }); describe('deepEqual', () => { test.each([ [undefined, undefined, true], [undefined, [], false], [[], undefined, false], [[], [], true], [[vector2d()], [], false], [[], [vector2d()], false], [[vector2d()], [vector2d()], true], [[vector2d(), vector2d()], [vector2d()], false], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d()], false], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1)], true], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], false], ])('deepEqual#%#', (lhs: Vector2D[], rhs: Vector2D[], result: boolean) => { expect(Vector2DArray.deepEqual(lhs, rhs)).toBe(result); }); }); describe('fuzzyDeepEqual', () => { test.each([ [undefined, undefined, true, undefined], [undefined, [], false, undefined], [[], undefined, false, undefined], [[], [], true, undefined], [[vector2d()], [], false, undefined], [[], [vector2d()], false, undefined], [[vector2d()], [vector2d()], true, undefined], [[vector2d(), vector2d()], [vector2d()], false, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d()], false, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1)], true, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], true, undefined], [[vector2d(), vector2d(1, 1)], [vector2d(), vector2d(1, 1.000001)], false, DOUBLE_EPSILON], ])('fuzzyDeepEqual#%#', (lhs: Vector2D[], rhs: Vector2D[], result: boolean, epsilon?: number) => { expect(Vector2DArray.fuzzyDeepEqual(lhs, rhs, epsilon)).toBe(result); }); }); describe('compare', () => { test.each([ [[], [], 0], [[vector2d()], [], 1], [[], [vector2d()], -1], [[vector2d()], [vector2d()], 0], [[vector2d(1, 2)], [vector2d()], 1], [[vector2d(1, 2)], [vector2d(2, 1)], -1], [[vector2d(1, 2)], [vector2d(1, 2)], 0], ])('compare#%#', (lhs: Vector2D[], rhs: Vector2D[], result: number) => { expect(Math.sign(Vector2DArray.compare(lhs, rhs))).toBe(Math.sign(result)); }); }); });