44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { BigNumber } from '@0x/utils';
|
|
import { expect } from 'chai';
|
|
|
|
/**
|
|
* See https://github.com/0xProject/protocol/blob/3333cfc77291548ab381f1acc8485cf0ad9b9b0f/contracts/test-utils/src/number_utils.ts#L83-L88
|
|
*/
|
|
export function assertRoughlyEquals(
|
|
actual: BigNumber | string | number,
|
|
expected: BigNumber | string | number,
|
|
precision = 18,
|
|
): void {
|
|
const _a = new BigNumber(actual);
|
|
const _b = new BigNumber(expected);
|
|
const maxIntegerDigits = Math.max(
|
|
_a.integerValue(BigNumber.ROUND_DOWN).sd(true),
|
|
_b.integerValue(BigNumber.ROUND_DOWN).sd(true),
|
|
);
|
|
const _toInteger = (n: BigNumber) => {
|
|
const base = 10 ** (precision - maxIntegerDigits);
|
|
return n.times(base).integerValue(BigNumber.ROUND_DOWN);
|
|
};
|
|
const numbericalDivergence = _toInteger(_a).minus(_toInteger(_b)).abs().toNumber();
|
|
|
|
if (numbericalDivergence <= 1) {
|
|
return;
|
|
}
|
|
expect(actual).to.bignumber.eq(expected);
|
|
}
|
|
|
|
/**
|
|
* Asserts that two numbers are equal with up to `maxError` difference between them.
|
|
*/
|
|
export function assertIntegerRoughlyEquals(
|
|
actual: BigNumber | string | number,
|
|
expected: BigNumber | string | number,
|
|
maxError = 1,
|
|
): void {
|
|
const diff = new BigNumber(actual).minus(expected).abs().toNumber();
|
|
if (diff <= maxError) {
|
|
return;
|
|
}
|
|
expect(actual).to.bignumber.eq(expected);
|
|
}
|