В MySQL Вы могли сделать что-то как
SELECT
IF(ISNULL(processed_timestamp), 'NULL', 'NOT NULL') as myfield,
COUNT(*)
FROM mytable
GROUP BY myfield
user=> (instance? clojure.lang.LazySeq (map + [1 2 3 4] [1 2 3 4]))
true
Если вам нужно много чего проверить, возможно, это упростит задачу:
(defmacro is-lazy? [x] `(is (instance? clojure.lang.LazySeq ~x)))
user=> (is-lazy? 1)
FAIL in clojure.lang.PersistentList$EmptyList@1 (NO_SOURCE_FILE:7)
expected: (clojure.core/instance? clojure.lang.LazySeq 1)
actual: (not (clojure.core/instance? clojure.lang.LazySeq 1))
false
user=> (is-lazy? (map + [1 2 3 4] [1 2 3 4]))
true
В Clojure 1.3 также реализована функция ?
: "Возвращает истину. если значение было создано для обещания, задержки, будущего или ленивой последовательности "
Используйте функцию с побочным эффектом (например, запись в ссылку) в качестве функции генератора последовательности в вашем тестовом примере. Если побочный эффект никогда не возникает, это означает, что последовательность остается нереализованной ... как только последовательность реализована, функция будет вызвана.
Сначала настройте его так:
(def effect-count (ref 0))
(defn test-fn [x]
(do
(dosync (alter effect-count inc))
x))
Затем запустите свою функцию. Я просто воспользуюсь картой, здесь:
(def result (map test-fn (range 1 10)))
Проверить, запускалась ли когда-либо test-fn:
(if (= 0 @effect-count)
(println "Test passed!")
(println "Test failed!"))
Поскольку мы знаем, что карта ленивая, она всегда должна работать на этом этапе. Теперь выполните принудительную оценку последовательности:
(dorun result)
И снова проверьте значение счетчика эффектов. На этот раз мы ДЕЙСТВИТЕЛЬНО ожидаем появления побочного эффекта. И это так ...
user=>@effect-count
9