[Gauche-devel-jp] permutations-for-eachのテストケース追加

アーカイブの一覧に戻る

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 バイト
説明:       無し
ダウンロード 



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る