UNPKG

@alcorexchange/alcor-swap-sdk

Version:

## Installation ​​ **npm** ``` npm i @alcorexchange/alcor-swap-sdk ``` **yarn** ``` yarn add @alcorexchange/alcor-swap-sdk ``` ## Usage ### Import:

177 lines (174 loc) 5.83 kB
import JSBI from "jsbi"; import { Fraction } from "entities/fractions/fraction"; describe("Fraction", () => { describe("#quotient", () => { it("floor division", () => { expect(new Fraction(JSBI.BigInt(8), JSBI.BigInt(3)).quotient).toEqual( JSBI.BigInt(2) ); // one below expect(new Fraction(JSBI.BigInt(12), JSBI.BigInt(4)).quotient).toEqual( JSBI.BigInt(3) ); // exact expect(new Fraction(JSBI.BigInt(16), JSBI.BigInt(5)).quotient).toEqual( JSBI.BigInt(3) ); // one above }); }); describe("#remainder", () => { it("returns fraction after divison", () => { expect(new Fraction(JSBI.BigInt(8), JSBI.BigInt(3)).remainder).toEqual( new Fraction(JSBI.BigInt(2), JSBI.BigInt(3)) ); expect(new Fraction(JSBI.BigInt(12), JSBI.BigInt(4)).remainder).toEqual( new Fraction(JSBI.BigInt(0), JSBI.BigInt(4)) ); expect(new Fraction(JSBI.BigInt(16), JSBI.BigInt(5)).remainder).toEqual( new Fraction(JSBI.BigInt(1), JSBI.BigInt(5)) ); }); }); describe("#invert", () => { it("flips num and denom", () => { expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(10)).invert().numerator ).toEqual(JSBI.BigInt(10)); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(10)).invert().denominator ).toEqual(JSBI.BigInt(5)); }); }); describe("#add", () => { it("multiples denoms and adds nums", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).add( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(52), JSBI.BigInt(120))); }); it("same denom", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(5)).add( new Fraction(JSBI.BigInt(2), JSBI.BigInt(5)) ) ).toEqual(new Fraction(JSBI.BigInt(3), JSBI.BigInt(5))); }); }); describe("#subtract", () => { it("multiples denoms and subtracts nums", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).subtract( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(-28), JSBI.BigInt(120))); }); it("same denom", () => { expect( new Fraction(JSBI.BigInt(3), JSBI.BigInt(5)).subtract( new Fraction(JSBI.BigInt(2), JSBI.BigInt(5)) ) ).toEqual(new Fraction(JSBI.BigInt(1), JSBI.BigInt(5))); }); }); describe("#lessThan", () => { it("correct", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).lessThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(true); expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).lessThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).lessThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); }); }); describe("#equalTo", () => { it("correct", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).equalTo( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).equalTo( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(true); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).equalTo( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); }); }); describe("#greaterThan", () => { it("correct", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).greaterThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).greaterThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(false); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).greaterThan( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toBe(true); }); }); describe("#multiplty", () => { it("correct", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).multiply( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(4), JSBI.BigInt(120))); expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).multiply( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(4), JSBI.BigInt(36))); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).multiply( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(20), JSBI.BigInt(144))); }); }); describe("#divide", () => { it("correct", () => { expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(10)).divide( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(12), JSBI.BigInt(40))); expect( new Fraction(JSBI.BigInt(1), JSBI.BigInt(3)).divide( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(12), JSBI.BigInt(12))); expect( new Fraction(JSBI.BigInt(5), JSBI.BigInt(12)).divide( new Fraction(JSBI.BigInt(4), JSBI.BigInt(12)) ) ).toEqual(new Fraction(JSBI.BigInt(60), JSBI.BigInt(48))); }); }); describe("#asFraction", () => { it("returns an equivalent but not the same reference fraction", () => { const f = new Fraction(1, 2); expect(f.asFraction).toEqual(f); expect(f === f.asFraction).toEqual(false); }); }); });