Kiyoka Nishiyama
kiyok****@netfo*****
2011年 6月 21日 (火) 19:18:35 JST
kiyokaです。 Gaucheの添付ライブラリのpermutations-for-eachのテストケースが不足してい るのに気がつきました。 permutations-for-eachは以下のような定義になっているのですが、 test/util.scmには、setに長さ3のリストを取るテストケースまでしか書かれて いません。したがって、p/each4 と p/each* という関数がテストされません。 [util/combinations.scm] (define (permutations-for-each proc set) (match set [() (undefined)] [(x) (proc set)] [(x1 x2) (proc `(,x1 ,x2)) (proc `(,x2 ,x1))] [(x1 x2 x3) (p/each3 proc x1 x2 x3)] [(x1 x2 x3 x4) (p/each4 proc x1 x2 x3 x4)] [else (p/each* proc (length set) set)])) [test/util.scm] (test* "permutations-for-each" '() (let1 r '() (permutations-for-each (lambda (p) (push! r p)) '()) (reverse r))) (test* "permutations-for-each" '((a)) (let1 r '() (permutations-for-each (lambda (p) (push! r p)) '(a)) (reverse r))) (test* "permutations-for-each" '((a b c) (a c b) (b a c) (b c a) (c a b) (c b a)) (let1 r '() (permutations-for-each (lambda (p) (push! r p)) '(a b c)) (reverse r))) Gauche 0.9.1リリースtarボールに対するパッチを送ります。 引数setに対して長さ4と5のリストを渡すテストケースを追加しました。引数の setの長さ5の時は正解データが大きいので、プログラムで動的に生成する ようにしてみました。(別解によるクロスチェック) (test* "permutations-for-each" '((a b c d) (a b d c) (a c b d) (a c d b) (a d b c) (a d c b) (b a c d) (b a d c) (b c a d) (b c d a) (b d a c) (b d c a) (c a b d) (c a d b) (c b a d) (c b d a) (c d a b) (c d b a) (d a b c) (d a c b) (d b a c) (d b c a) (d c a b) (d c b a)) (let1 r '() (permutations-for-each (lambda (p) (push! r p)) '(a b c d)) (reverse r))) (test* "permutations-for-each" (let* ((set '(a b c d e)) (all-patterns (append-map (lambda (v1) (append-map (lambda (v2) (append-map (lambda (v3) (append-map (lambda (v4) (map (lambda (v5) (list v1 v2 v3 v4 v5)) set)) set)) set)) set)) set))) (filter (lambda (x) (eq? (length x) (length (delete-duplicates x)))) all-patterns)) (let1 r '() (permutations-for-each (lambda (p) (push! r p)) '(a b c d e)) (reverse r))) あまり良いコードでは無いなら書き直していただければと思います。 --kiyoka -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: gauche-0.9.1-testcase-for-permutations.patch 型: text/x-patch サイズ: 1758 バイト 説明: 無し ダウンロード