          (.assoc! tree (js/Math.sin i) (* 2 i))))))
 
   (h)
+
+  (do
+    (def samples (gen/sample (gen/tuple gen/s-pos-int (gen/vector gen-action) (gen/vector gen-movement)) 100))
+    (def trees (for [[min-keys actions _] samples]
+                 (apply-to-tree (tree min-keys) actions)))
+    (def benches (mapv vector trees (map #(nth % 2) samples)))
+    (time
+     (doseq [[tree movements] benches]
+       (apply-to-iterator (iterator tree) movements))))
  )
 

  (dc/quick-check 1000 anti-symmetric-prop)
  (dc/quick-check 1000 total-prop)
  (dc/quick-check 100 (building-prop gen-assoc))
  (dc/quick-check 1000 (building-prop gen-action))
  (dc/quick-check 100 (lookup-prop gen-action))
  (dc/quick-check 100 iterator-prop)

  (defn f []
    (time

              (set! ix 0)
              #js [(aget (.-keys node) ix) (aget (.-vals node) ix)]))))
  (seek [this key]
        (loop []
          (when (false? end?)
            (let [upper (.-upper node)]
              (if (lt upper key)
                (if (instance? Node (.-parent node))
                  (do
                    (set! ix (.-parent-ix node))
