| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import {ethers, web3} from "hardhat";
- import fee from "../config/fee";
- import contracts from "../config/contracts";
- import logger from "../utils/logger";
- describe('Calc test', () => {
- let inAmount = 1e15.toString()
- it('Univ3 calc test', async () => {
- const CALC_ABI = require('../artifacts/contracts/Calc.sol/Calc.json').abi
- let calc = new web3.eth.Contract(CALC_ABI, contracts.CALC)
- await calc.methods.getQuoteHandleFee(contracts.WETH, inAmount, contracts.USDT, fee._30_per_10000).call().then(console.log)
- })
- it('Two points', () => {
- let value = 333333
- let low: number = 0
- let high: number = 1000000
- let prevLow: number = low
- let prevHigh: number = high
- let checkNumber = low
- function check(checkNumber: number) {
- function final_check(checkNumber: number) {
- return checkNumber <= value
- }
- // [,,,,,c(,,,,,,,)]
- let too_low = false
- for (let i = 1; i <= 10; i++) {
- too_low = too_low || (final_check(checkNumber + i))
- }
- if (too_low) return 'too_low'
- // [,,,,,(c,,,,,,,)]
- let too_high = true
- for (let i = 0; i < 10; i++) {
- too_high = too_high && (!final_check(checkNumber + i))
- }
- if (too_high) return 'too_high'
- return 'ok'
- }
- let count = 0
- while (true) {
- let checkRst = check(checkNumber)
- logger.debug(`[${low}, ${high}], c: ${checkNumber}, v: ${value}, ${checkRst}. [${++count}]`)
- if (checkRst == 'ok') {
- break
- } else {
- let tempHigh = high
- let tempLow = low
- if (checkNumber == low) {
- if (checkRst == 'too_high') {
- high = tempLow
- low = prevLow
- prevHigh = tempHigh
- prevLow = tempLow
- checkNumber = high
- } else if (checkRst == 'too_low') {
- low = low + Math.floor((high - low) / 2)
- prevLow = tempLow
- checkNumber = low
- }
- } else if (checkNumber == high) {
- if (checkRst == 'too_high') {
- high = low + Math.floor((high - low) / 2)
- prevHigh = tempHigh
- checkNumber = high
- } else if (checkRst == 'too_low') {
- low = tempHigh
- high = prevHigh
- prevHigh = tempHigh
- prevLow = tempLow
- checkNumber = low
- }
- }
- }
- }
- logger.debug(`Found value, is: ${checkNumber}`)
- })
- })
|