blob: 955fa68138ee81613fc9f2248dd194a8447307a9 [file] [log] [blame]
import { ROArrayArray } from '../../../../common/util/types.js';
import { Comparator, compare } from '../../../util/compare.js';
import {
ArrayValue,
MatrixValue,
Value,
VectorValue,
isScalarValue,
} from '../../../util/conversion.js';
import { FPInterval } from '../../../util/floating_point.js';
export type Expectation =
| Value
| FPInterval
| readonly FPInterval[]
| ROArrayArray<FPInterval>
| Comparator;
/** @returns if this Expectation actually a Comparator */
export function isComparator(e: Expectation): e is Comparator {
return !(
e instanceof FPInterval ||
isScalarValue(e) ||
e instanceof VectorValue ||
e instanceof MatrixValue ||
e instanceof ArrayValue ||
e instanceof Array
);
}
/** @returns the input if it is already a Comparator, otherwise wraps it in a 'value' comparator */
export function toComparator(input: Expectation): Comparator {
if (isComparator(input)) {
return input;
}
return { compare: got => compare(got, input as Value), kind: 'value' };
}