Clojure テスト

(ns fizzbuzz
  (:use clojure.test))
(defn whole-numbers [] (iterate inc 1))
(defn fizzbuzz [num]
  (cond
    (= (rem num 15) 0) "FIZZBUZZ"
    (= (rem num 3) 0)  "FIZZ"
    (= (rem num 5) 0)  "BUZZ"
    :else              (str num)))

(deftest fizzbuzz-test
  (testing "FIZZBUZZ 配列を生成できること"
    (is (= (map fizzbuzz (take 15 (whole-numbers)))
            ["1" "2" "FIZZ" "4" "BUZZ" "FIZZ" "7" "8" "FIZZ" "BUZZ" "11" "FIZZ" "13" "14" "FIZZBUZZ"])))
  (testing "15の倍数は FIZZBUZZ を返すこと"
    (is (= (fizzbuzz 15)
            "FIZZBUZZ"))
    (is (= (fizzbuzz 30)
            "FIZZBUZZ")))
  (testing "3の倍数は FIZZ を返すこと"
    (is (= (fizzbuzz 3)
            "FIZZ"))
    (is (= (fizzbuzz 6)
            "FIZZ")))
  (testing "5の倍数は BUZZ を返すこと"
    (is (= (fizzbuzz  5)
            "BUZZ"))
    (is (= (fizzbuzz 10)
            "BUZZ")))
  (testing "整数を返すこと (3の倍数 5の倍数でない場合)"
    (is (= (fizzbuzz 1)
            "1"))
    (is (= (fizzbuzz 4)
            "4"))))

Clojure で テストを素振りしてみた。Clojure系なら 「数列を写像して、FIZZBUZZ 配列をつくる。ここを意識しつつ、数値を受け取ったら、数 or FIZZ or BUZZ or FIZZBUZZ を返す 関数をまずはつくる」と考えるのが筋なのかな。
ネットで調べたら、assertの仕方の練度が足りないかも。
(take 15 (whole-numbers)) とか 書いたが、rangeの方がわかりやすいか

http://softnoise.wordpress.com/2010/02/21/the-fizzbuzz-kata-in-clojure/