Files
protocol/apps-node/api/test/utils/assert_roughly_equals.ts

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);
}