lean4-code-actions
Version:
Refactorings and snippets for Lean 4
60 lines (57 loc) • 1.69 kB
text/typescript
import { BigNumber } from 'bignumber.js'
import { purry } from 'remeda'
import { BasicArithmetic } from '../arithmetic'
export const BigNumberBasicArithmetic: BasicArithmetic<BigNumber> = {
zero: new BigNumber(0),
one: new BigNumber(1),
fromNumber(a) {
return new BigNumber(a)
},
fromString(a) {
return new BigNumber(a)
},
add() {
return purry((a: BigNumber, b: BigNumber) => a.plus(b), arguments)
},
sub() {
return purry((a: BigNumber, b: BigNumber) => a.minus(b), arguments)
},
mul() {
return purry((a: BigNumber, b: BigNumber) => a.multipliedBy(b), arguments)
},
/* IMPORTANT: This function loses data due to fixed precision */
div() {
return purry((a: BigNumber, b: BigNumber) => a.dividedBy(b), arguments)
},
mod() {
return purry((a: BigNumber, b: BigNumber) => a.modulo(b), arguments)
},
min() {
return purry((a: BigNumber, b: BigNumber) => BigNumber.min(a, b), arguments)
},
max() {
return purry((a: BigNumber, b: BigNumber) => BigNumber.max(a, b), arguments)
},
abs(a) {
return a.abs()
},
sqrt(a) {
return a.sqrt()
},
eq() {
return purry((a: BigNumber, b: BigNumber) => a.eq(b), arguments)
},
lt() {
return purry((a: BigNumber, b: BigNumber) => a.lt(b), arguments)
},
gt() {
return purry((a: BigNumber, b: BigNumber) => a.gt(b), arguments)
},
lte() {
return purry((a: BigNumber, b: BigNumber) => a.lte(b), arguments)
},
gte() {
return purry((a: BigNumber, b: BigNumber) => a.gte(b), arguments)
},
}
export const { zero, one, fromNumber, fromString, add, sub, mul, div, mod, min, max, abs, sqrt, eq, lt, gt, lte, gte } = BigNumberBasicArithmetic