From: Hideto ISHIBASHI Date: 2000-05-20T19:58:13+09:00 Subject: [ruby-list:22756] Re: assert with iterator 石橋"rubyholic"秀仁です。 Subject: [ruby-list:22751] Re: assert with iterator > 助田です。 > > 1、rubyunit の assert 関数群でブロックも渡せたら嬉しいなとふと思いました。 > > うーん。これは、どうしようかな。どういうときに嬉しいんでしょうか? > もう少し説明していただけますか? > # あっても良い気はするんですが、使い道を自分では思いつかないんで。 集合オブジェクトの条件など、条件式が長くなると便利かも。 # assert { ... } のパターン assert { nil == array.find { |e| hash.each_pair { |k,v| raise "constraint error" unless e[k] == v } } } # assert(condition) のパターン assert(nil == array.find {|e| hash.each_pair {|k,v| raise "constraint error" unless e[k] == v } }) > > 2、例外が起こることを assert する。 > > これは規定外のパラメータを与えたときとかに使えそうな気がします。 > > こっちは使い道がありそうなので用意します。 IO#gets と IO#readline のような区別 (例外) があるときに使えそうですね。 ほかに、フィボナッチ数列の生成をアサートするなら、 fib = [ 1, 1 ] 5.times do fib.push fib[-1] + fib[-2] end p fib # => [1, 1, 2, 3, 5, 8, 13] assert_exception { for i in 2 ... fib.size raise "no Fibonacci" unless fib[i] == fib[i-1] + fib[i-2] end } -- Hideto "rubyholic" ISHIBASHI http://www.rr.iij4u.or.jp/~hideto-i/