Practice of Programming

プログラム とか Linuxとかの話題

Test::Baseと数字のテスト

Test::Baseを使ってみてます。とても簡単。

use Test::Base;
run_is;
__END__
===
--- i
A
--- e
A

意味はないけど。ミニマムだとこんなんでいい。


入力: A+改行
出力: A+改行


が、同じなので、テストはOK。run_is は「同じ」のテストです。
普通は、run_is i => 'e'; などと書きますが、別にそう書かなくても、Test::Baseは推測してくれます。


で、数字のテストをしてみました...

use Test::Base;

sub hoge{ $_[0] / 10;}

filters {
  i => [ 'chomp', 'hoge'],
  e => [ 'chomp'],
};

run_is i => 'e';

__END__

=== sippai dayo
--- i
1000
--- e
100

これは、入力にフィルタを指定しています。
i には、chomp と、hoge
e には、chomp。
hogeは自分で定義した関数。入力($_[0])を10で割っています。

ところが、結果。

not ok 1 - sippai dayo
'   Failed test 'sippai dayo
#   in t/faile.t at line 11.
#          got: '1000'
#     expected: '100'
1..1
# Looks like you failed 1 test of 1.

なぜかフィルタが効いておらず、1000がgotされています。
これは、バグらしい仕様とのこと(コメント参照)。
http://rt.cpan.org/Public/Bug/Display.html?id=17276#txn-159555


で、下記のようにするといい。

sub hoge{ $_ = $_[0] / 10;}

てわけで、ちょっとはまりました。