NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/gl-matrix/spec/helpers/spec-helper.js
2023-09-14 14:47:11 +08:00

109 lines
3.4 KiB
JavaScript

const EPSILON = 0.00001;
const assert = require('assert');
global.expect = function(e) {
function expected(e, message, a) {
assert.fail(e, a, `expected ${JSON.stringify(e)} ${message} ${JSON.stringify(a)}`);
}
return {
toBe: function(a) {
assert.strictEqual(e, a);
},
toEqual: function(a) {
assert.strictEqual(e,a);
},
toBeDefined: function() {
assert.notStrictEqual(e, undefined);
},
toBeTruthy: function() {
assert(e);
},
toBeFalsy: function() {
assert(!e);
},
toBeNull: function() {
assert.strictEqual(e, null);
},
not: {
toBe: function(a) {
assert.notStrictEqual(e, a);
},
toBeEqualish: function(a) {
if (typeof(e) == 'number')
assert(Math.abs(e - a) >= EPSILON);
if (e.length != a.length)
return;
for (let i = 0; i < e.length; i++) {
if (isNaN(e[i]) !== isNaN(a[i]))
return;
if (Math.abs(e[i] - a[i]) >= EPSILON)
return;
}
assert.fail(e, a);
}
},
toBeGreaterThan: function(a) {
assert(e > a);
},
toBeLessThan: function(a) {
assert(e < a);
},
/*
Returns true if `actual` has the same length as `expected`, and
if each element of both arrays is within 0.000001 of each other.
This is a way to check for "equal enough" conditions, as a way
of working around floating point imprecision.
*/
toBeEqualish: function(a) {
if (typeof(e) == 'number') {
if(isNaN(e) !== isNaN(a))
expected(e, "to be equalish to", a);
if(Math.abs(e - a) >= EPSILON)
expected(e, "to be equalish to", a);
}
if (e.length != a.length)
assert.fail(e.length, a.length, "length mismatch");
for (let i = 0; i < e.length; i++) {
if (isNaN(e[i]) !== isNaN(a[i]))
assert.fail(isNaN(e[i]), isNaN(a[i]));
if (Math.abs(e[i] - a[i]) >= EPSILON)
assert.fail(Math.abs(e[i] - a[i]));
}
},
//Dual quaternions are very special & unique snowflakes
toBeEqualishQuat2: function(a, epsilon) {
if(epsilon == undefined) epsilon = EPSILON;
let allSignsFlipped = false;
if (e.length != a.length)
expected(e, "to have the same length as", a);
for (let i = 0; i < e.length; i++) {
if (isNaN(e[i]) !== isNaN(a[i]))
expected(e, "to be equalish to", a);
if (allSignsFlipped) {
if (Math.abs(e[i] - (-a[i])) >= epsilon)
expected(e, "to be equalish to", a);
} else {
if (Math.abs(e[i] - a[i]) >= epsilon) {
allSignsFlipped = true;
i = 0;
}
}
}
}
};
};