                      (when (val-lt new-hi (aget his ix))
                        (set!! changed? true)
                        (aset his ix new-hi))
-                     (when (val-lt (aget his ix) (aget los ix))
+                     ;; TODO need a better way to indicate failure
+                     (when (or (identical? greatest (aget los ix))
+                               (identical? least (aget his ix))
+                               (val-lt (aget his ix) (aget los ix)))
                        (set! failed? true))))
                  changed?))
   (split [this current]

  [(.next s) (.next s) (.next s)]
  )


    (alength (time (iterator->keys j)))
  )

  (let [tree1 (tree 10)
      _ (.assoc! tree1 #js ["a" "b"] 0)
      _ (.assoc! tree1 #js ["b" "c"] 0)
      _ (.assoc! tree1 #js ["c" "d"] 0)
