174 lines
5.6 KiB
TypeScript
174 lines
5.6 KiB
TypeScript
import { ChainId, Token, TokenAmount, Pair, InsufficientInputAmountError } from '../src'
|
|
import { sortedInsert } from '../src/utils'
|
|
|
|
describe('miscellaneous', () => {
|
|
it('getLiquidityMinted:0', async () => {
|
|
const tokenA = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000001', 18)
|
|
const tokenB = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000002', 18)
|
|
const pair = new Pair(new TokenAmount(tokenA, '0'), new TokenAmount(tokenB, '0'))
|
|
|
|
expect(() => {
|
|
pair.getLiquidityMinted(
|
|
new TokenAmount(pair.liquidityToken, '0'),
|
|
new TokenAmount(tokenA, '1000'),
|
|
new TokenAmount(tokenB, '1000')
|
|
)
|
|
}).toThrow(InsufficientInputAmountError)
|
|
|
|
expect(() => {
|
|
pair.getLiquidityMinted(
|
|
new TokenAmount(pair.liquidityToken, '0'),
|
|
new TokenAmount(tokenA, '1000000'),
|
|
new TokenAmount(tokenB, '1')
|
|
)
|
|
}).toThrow(InsufficientInputAmountError)
|
|
|
|
const liquidity = pair.getLiquidityMinted(
|
|
new TokenAmount(pair.liquidityToken, '0'),
|
|
new TokenAmount(tokenA, '1001'),
|
|
new TokenAmount(tokenB, '1001')
|
|
)
|
|
|
|
expect(liquidity.raw.toString()).toEqual('1')
|
|
})
|
|
|
|
it('getLiquidityMinted:!0', async () => {
|
|
const tokenA = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000001', 18)
|
|
const tokenB = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000002', 18)
|
|
const pair = new Pair(new TokenAmount(tokenA, '10000'), new TokenAmount(tokenB, '10000'))
|
|
|
|
expect(
|
|
pair
|
|
.getLiquidityMinted(
|
|
new TokenAmount(pair.liquidityToken, '10000'),
|
|
new TokenAmount(tokenA, '2000'),
|
|
new TokenAmount(tokenB, '2000')
|
|
)
|
|
.raw.toString()
|
|
).toEqual('2000')
|
|
})
|
|
|
|
it('getLiquidityValue:!feeOn', async () => {
|
|
const tokenA = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000001', 18)
|
|
const tokenB = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000002', 18)
|
|
const pair = new Pair(new TokenAmount(tokenA, '1000'), new TokenAmount(tokenB, '1000'))
|
|
|
|
{
|
|
const liquidityValue = pair.getLiquidityValue(
|
|
tokenA,
|
|
new TokenAmount(pair.liquidityToken, '1000'),
|
|
new TokenAmount(pair.liquidityToken, '1000'),
|
|
false
|
|
)
|
|
expect(liquidityValue.token.equals(tokenA)).toBe(true)
|
|
expect(liquidityValue.raw.toString()).toBe('1000')
|
|
}
|
|
|
|
// 500
|
|
{
|
|
const liquidityValue = pair.getLiquidityValue(
|
|
tokenA,
|
|
new TokenAmount(pair.liquidityToken, '1000'),
|
|
new TokenAmount(pair.liquidityToken, '500'),
|
|
false
|
|
)
|
|
expect(liquidityValue.token.equals(tokenA)).toBe(true)
|
|
expect(liquidityValue.raw.toString()).toBe('500')
|
|
}
|
|
|
|
// tokenB
|
|
{
|
|
const liquidityValue = pair.getLiquidityValue(
|
|
tokenB,
|
|
new TokenAmount(pair.liquidityToken, '1000'),
|
|
new TokenAmount(pair.liquidityToken, '1000'),
|
|
false
|
|
)
|
|
expect(liquidityValue.token.equals(tokenB)).toBe(true)
|
|
expect(liquidityValue.raw.toString()).toBe('1000')
|
|
}
|
|
})
|
|
|
|
it('getLiquidityValue:feeOn', async () => {
|
|
const tokenA = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000001', 18)
|
|
const tokenB = new Token(ChainId.TESTNET, '0x0000000000000000000000000000000000000002', 18)
|
|
const pair = new Pair(new TokenAmount(tokenA, '1000'), new TokenAmount(tokenB, '1000'))
|
|
|
|
const liquidityValue = pair.getLiquidityValue(
|
|
tokenA,
|
|
new TokenAmount(pair.liquidityToken, '500'),
|
|
new TokenAmount(pair.liquidityToken, '500'),
|
|
true,
|
|
'250000' // 500 ** 2
|
|
)
|
|
expect(liquidityValue.token.equals(tokenA)).toBe(true)
|
|
expect(liquidityValue.raw.toString()).toBe('917') // ceiling(1000 - (500 * (1 / 6)))
|
|
})
|
|
|
|
describe('#sortedInsert', () => {
|
|
const comp = (a: number, b: number) => a - b
|
|
|
|
it('throws if maxSize is 0', () => {
|
|
expect(() => sortedInsert([], 1, 0, comp)).toThrow('MAX_SIZE_ZERO')
|
|
})
|
|
|
|
it('throws if items.length > maxSize', () => {
|
|
expect(() => sortedInsert([1, 2], 1, 1, comp)).toThrow('ITEMS_SIZE')
|
|
})
|
|
|
|
it('adds if empty', () => {
|
|
const arr: number[] = []
|
|
expect(sortedInsert(arr, 3, 2, comp)).toEqual(null)
|
|
expect(arr).toEqual([3])
|
|
})
|
|
|
|
it('adds if not full', () => {
|
|
const arr: number[] = [1, 5]
|
|
expect(sortedInsert(arr, 3, 3, comp)).toEqual(null)
|
|
expect(arr).toEqual([1, 3, 5])
|
|
})
|
|
|
|
it('adds if will not be full after', () => {
|
|
const arr: number[] = [1]
|
|
expect(sortedInsert(arr, 0, 3, comp)).toEqual(null)
|
|
expect(arr).toEqual([0, 1])
|
|
})
|
|
|
|
it('returns add if sorts after last', () => {
|
|
const arr = [1, 2, 3]
|
|
expect(sortedInsert(arr, 4, 3, comp)).toEqual(4)
|
|
expect(arr).toEqual([1, 2, 3])
|
|
})
|
|
|
|
it('removes from end if full', () => {
|
|
const arr = [1, 3, 4]
|
|
expect(sortedInsert(arr, 2, 3, comp)).toEqual(4)
|
|
expect(arr).toEqual([1, 2, 3])
|
|
})
|
|
|
|
it('uses comparator', () => {
|
|
const arr = [4, 2, 1]
|
|
expect(sortedInsert(arr, 3, 3, (a, b) => comp(a, b) * -1)).toEqual(1)
|
|
expect(arr).toEqual([4, 3, 2])
|
|
})
|
|
|
|
describe('maxSize of 1', () => {
|
|
it('empty add', () => {
|
|
const arr: number[] = []
|
|
expect(sortedInsert(arr, 3, 1, comp)).toEqual(null)
|
|
expect(arr).toEqual([3])
|
|
})
|
|
it('full add greater', () => {
|
|
const arr: number[] = [2]
|
|
expect(sortedInsert(arr, 3, 1, comp)).toEqual(3)
|
|
expect(arr).toEqual([2])
|
|
})
|
|
it('full add lesser', () => {
|
|
const arr: number[] = [4]
|
|
expect(sortedInsert(arr, 3, 1, comp)).toEqual(4)
|
|
expect(arr).toEqual([3])
|
|
})
|
|
})
|
|
})
|
|
})
|