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/