 
   (fact "Forms are evaluated in correct order"
     (let [side-effect-place (atom [])]
-      (do1
+      (sut/do1
           (swap! side-effect-place conj 1)
         (swap! side-effect-place conj 2)
         (swap! side-effect-place conj 3))

                        :k-2-2-3 "v-2-2-3"}}})

    (fact
      (select-keys-recursively m [[:k-1]
                                  [:k-2 [:k-2-2
                                         [:k-2-2-1]
                                         [:k-2-2-3]]]])
      => {:k-1 "v-1"
          :k-2 {:k-2-2 {:k-2-2-1 "v-2-2-1"
                        :k-2-2-3 "v-2-2-3"}}})))

;;;; ___________________________________________________________________________
;;;; ---- indexed ----

(fact "`indexed` works"
  (indexed [:a :b :c :d])
  => [[0 :a]
      [1 :b]
      [2 :c]
      [3 :d]])

;;;; ___________________________________________________________________________
;;;; ---- position ----
;;;; ---- positions ----

(fact "`position` and `positions` work"
  (fact "`position` tests"
    (position even? []) => nil
    (position even? [12]) => 0
    (position even? [11 13 14]) => 2
    (position even? [11 13 14 14]) => 2)
  (fact "`positions` tests"
    (positions even? []) => []
    (positions even? [12]) => [0]
    (positions even? [11 13 14]) => [2]
    (positions even? [11 13 14 14 15]) => [2 3]))

;;;; ___________________________________________________________________________
;;;; ---- unchunk ----

(defn fun-with-return-args-to-even?-and-identity [fun]
  (let [clj-even?     even?

       @identity?-acc])))

(defmacro with-return-args-to-even?-and-identity
  "Helper for testing `sut/unchunk`.
  Execute `body` in a scope that redefines `even?` and `identity to make a note
  of their argument. After executing `body`, return a vector whose first element
  is a sequence of all the arguments passed to `even?` (in successive calls)
