Browse Source

fix: wrong digs for fractional index

Tienson Qin 1 year ago
parent
commit
d907eb7654

+ 14 - 9
deps/common/src/logseq/common/fractional_index.cljs

@@ -49,15 +49,20 @@
   [x digits]
   (validate-integer x)
   (let [[head & digs] (seq x)
-        [carry digs] (reduce
-                      (fn [[_ digs] dig]
-                        (let [d (inc (.indexOf digits dig))]
-                          (if (= d (count digits))
-                            [true (conj digs (first digits))]
-                            [false (conj digs (nth digits d))])))
-                      [true []]
-                      (reverse digs))]
-    (if carry
+        [carry? diff] (reduce
+                        (fn [[carry? digs] dig]
+                          (if carry?
+                            (let [d (inc (.indexOf digits dig))]
+                              (if (= d (count digits))
+                                [true (conj digs (first digits))]
+                                [false (conj digs (nth digits d))]))
+                            [carry? digs]))
+                        [true []]
+                        (reverse digs))
+        digs (into (subvec (vec digs) 0 (- (count digs)
+                                           (count diff)))
+                   (reverse diff))]
+    (if carry?
       (cond
         (= head \Z) (str "a" (first digits))
         (= head \z) nil

+ 12 - 0
deps/common/test/logseq/common/fractional_index_test.cljs

@@ -2,6 +2,18 @@
     (:require [clojure.test :refer [deftest are]]
               [logseq.common.fractional-index :as index]))
 
+(deftest increment-integer-test
+  (are [x y]
+       (= (index/increment-integer x index/base-62-digits) y)
+    "a0" "a1"
+    "r3333333333333333zz" "r333333333333333400"))
+
+(deftest generate-key-between-test
+  (are [x y]
+       (= (index/generate-key-between x nil) y)
+    "a0" "a1"
+    "rzzzzzzzzzzzzzzzzzz" "s0000000000000000000"))
+
 (deftest generate-n-keys-between-test
   (are [x y]
        (= (index/generate-n-keys-between (first x) (second x) 20) y)

+ 1 - 1
src/test/frontend/worker/undo_redo_test.cljs

@@ -279,7 +279,7 @@
     (catch :default e
       (let [data (ex-data e)]
         (fs-node/writeFileSync "debug.json" (sqlite-util/write-transit-str data))
-        (throw e)))))
+        (throw (js/Error "check debug.json"))))))