129 lines
5.2 KiB
TypeScript
129 lines
5.2 KiB
TypeScript
import { Fraction } from '../src'
|
|
import JSBI from 'jsbi'
|
|
|
|
describe.only('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)
|
|
})
|
|
})
|
|
})
|