                                (val-lt (aget his ix) (aget los ix)))
                        (set! failed? true))))
                  changed?))
-  (split [this current]
-         (debug :splitting-left los his current)
+  (split [this]
+         (debug :splitting-left los his)
          (apush pushed-los (aclone los))
          (apush pushed-his (aclone his))
          (set! depth (+ depth 1))
-         (loop [splitter current]
-           (.write-bounds this splitter)
-           (.split-left (aget constraints splitter) (aget constraint->los splitter) (aget constraint->his splitter))
-           (if (true? (.read-bounds this splitter))
-             (do (apush pushed-splitters splitter)
-               (debug :split-left los his splitter))
-             (let [new-splitter (mod (+ splitter 1) (alength constraints))]
-               (if (identical? new-splitter current)
-                 (assert false "Can't split anything!")
-                 (recur new-splitter))))))
+         (loop [splitter 0]
+           (if (< splitter (alength constraints))
+             (do
+               (.write-bounds this splitter)
+               (.split-left (aget constraints splitter) (aget constraint->los splitter) (aget constraint->his splitter))
+               (if (true? (.read-bounds this splitter))
+                 (do
+                   (apush pushed-splitters splitter)
+                   (debug :split-left los his splitter))
+                 (recur (+ splitter 1))))
+             (assert false "Can't split anything!"))))
   (backtrack [this]
              (set! los (.pop pushed-los))
              (set! his (.pop pushed-his))

            [cemerick.double-check.properties :as prop :include-macros true]
            [cemerick.pprng :as pprng]
            clojure.set)
  (:require-macros [aurora.macros :refer [debug check apush apush* amake aclear typeof set!! dofrom]]))

;; COMPARISONS


            (let [i (+ i 2)]
              (.assoc! tree3 #js [(+ i 1) (+ i 2)] (* 2 i))))
        ]
     (let [s (solver 3 #js [(contains (iterator tree1)) (contains (iterator tree2)) (contains (iterator tree3))] #js [#js [0 1 2] #js [0 2] #js [1 2]])]
       (while (not (nil? (.next s))))))

  (let [tree1 (tree 10)
          _ (dotimes [i 100000]
