import { BasicArithmetic } from '../arithmetic' import { BasicAssertions } from '../arithmetic/getAssertions' import { BigIntAllAssertions } from '../bigint/BigIntAllAssertions' import { BigIntBasicArithmetic } from '../bigint/BigIntBasicArithmetic' export interface Quotient { numerator: N denominator: N } export type QuotientTuple = [N, N] export const fromQuotientTupleToQuotient = ([numerator, denominator]: QuotientTuple): Quotient => ({ numerator, denominator }) export const fromQuotientToQuotientTuple = ({ numerator, denominator }: Quotient): QuotientTuple => [numerator, denominator] export const parseQuotientGen = ({ zero }: BasicArithmetic, assert: BasicAssertions) => ({ numerator, denominator }: Quotient): Quotient => { assert.lte(numerator, denominator, 'numerator', 'denominator') assert.gte(denominator, zero, 'denominator', 'zero') return { numerator, denominator } } export const parseQuotientGenBigInt = parseQuotientGen(BigIntBasicArithmetic, BigIntAllAssertions)