Explorar el Código

上线测试uiv3动态长度

skyfffire hace 3 años
padre
commit
bbf37a38d9
Se han modificado 2 ficheros con 141 adiciones y 12 borrados
  1. 77 3
      scripts/lp/lpGenerate.ts
  2. 64 9
      test/CalcTest.ts

+ 77 - 3
scripts/lp/lpGenerate.ts

@@ -178,11 +178,85 @@ export class LpGenerate {
     let lastHigh = high
 
     let checkNumber = low
+    let prevLow: number = low
+    let prevHigh: number = high
 
+    async function check(checkNumber: number) {
+      async function final_check(checkNumber: number) {
+        try {
+          await pm.methods.positions(checkNumber).call()
+
+          return true
+        } catch (e) {
+          return false
+        }
+      }
+
+      // [,,,,,c(,,,,,,,)]
+      let too_low = false
+      for (let i = 1; i <= 10; i++) {
+        too_low = too_low || (await 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 && (!await final_check(checkNumber + i))
+      }
+      if (too_high) return 'too_high'
+
+      return 'ok'
+    }
+
+    let count = 0
+    while (true) {
+      let checkRst = await check(checkNumber)
+      logger.debug(`[${low}, ${high}], c: ${checkNumber}, ${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
+          }
+        }
+      }
+    }
 
-    // while (true) {
-    //
-    // }
+    logger.debug(`Found value, is: ${checkNumber}`)
 
     return checkNumber
   }

+ 64 - 9
test/CalcTest.ts

@@ -15,28 +15,83 @@ describe('Calc test', () => {
   })
 
   it('Two points', () => {
-    let low = 300_000
-    let high = 1_000_000
-    let lastLow = low
-    let lastHigh = high
+    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) {
-      return checkNumber <= 521_123
+      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}, ${checkRst}`)
-
-      if (checkRst) {
+      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(checkNumber)
+    logger.debug(`Found value, is: ${checkNumber}`)
   })
 })