import { Eq, eqUndefined, eqNull, eqString, eqNumber, eqArray, eqRecord, eqAny, tripleEq } from './Eq'; import { Pprint, pprintUndefined, pprintNull, pprintString, pprintNumber, pprintArray, pprintRecord, pprintAny } from './Pprint'; /** To test a type, you should be able to compare 2 values and print them out. */ export interface Testable extends Eq, Pprint {} export const testable = (eqA: Eq, pprintA: Pprint) => ({ ...eqA, ...pprintA }); export const tUndefined = testable(eqUndefined, pprintUndefined); export const tNull = testable(eqNull, pprintNull); export const tString = testable(eqString, pprintString); export const tNumber = testable(eqNumber, pprintNumber); export const tArray = (ta: Testable): Testable> => testable(eqArray(ta), pprintArray(ta)); export const tRecord = (ta: Testable): Testable> => testable(eqRecord(ta), pprintRecord(ta)); export const tAny = testable(eqAny, pprintAny); export const tStrict = testable(tripleEq, pprintAny);