Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

テストではまったお話 Test::More

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 17 Publicité

Plus De Contenu Connexe

Les utilisateurs ont également aimé (17)

Publicité

Plus récents (20)

テストではまったお話 Test::More

  1. 1. テストではまったお話 Perl Beginners#12 @dokechin
  2. 2. 自己紹介 @dokechin • Perl歴2年目 • PerlのWAF Mojoliciousで自作Webアプリケー ションを作って運用中 • Mishima.pm主催
  3. 3. 複数の配列を1つの配列にまとめたい。 ただし、以下のようなルールで @array1=(1,1,3,8); @array2=(2,3); @array3=(5,6); ↓ @array=(1,2,5,1,3,6,3,8);
  4. 4. こんな感じの関数をつくりたい my @array1=(1,2,3,8); my @array2=(1,3); my @array3=(5,6); my @sorted = my_sort(¥@array1,¥@array2,¥@array3); my @sorted = my_sort(@array1,@array2,@array3);
  5. 5. とりあえず実装した package Sort; use strict; use warnings; sub my_sort { my @sorted; my $total = 0; for my $array(@_){ $total = $total + scalar(@$array); } until( $total == scalar @sorted){ foreach (@_) { if (my $item = shift (@$_)){ push @sorted , $item; } } } return @sorted; }
  6. 6. テスト1 use strict; use warnings; use Test::More; my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]); is(@result, (1,1,5,2,3,6,3,8), "sort 3 list");
  7. 7. テスト2 use strict; Use warnings; Use Test::More; my @result =Sort::my_sort ([],[],[]); is(@result, (), "sort empty list"); # got: '0' # expected: undef ← scalar @result ← scalar ()
  8. 8. is はスカラーにした結果値を比較して いる Test::Moreのソース sub is ($$;$) { my $tb = Test::More->builder; return $tb->is_eq(@_); } プロトタイプ この場合、引数をスカ ラー評価してから処理する
  9. 9. Test::Moreのis はリストコンテキスト の値のテストはできない 待てよ、テスト1に戻る
  10. 10. テスト1 use strict; use warnings; use Test::More; my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]); is(@result, (1,1,5,2,3,6,3,8), "sort 3 list"); scalar @result →配列の要素数 8 Scalar(1,1,5,2,3,6,3,8) →リストの末尾の要素 8
  11. 11. 書き直し is_deeply
  12. 12. テスト1 use strict; use warnings; use Test::More; my @result =Sort::my_sort ([1,2,3,8],[1,3],[5,6]); is_deeply(¥@result, [1,1,5,2,3,6,3,8], "sort 3 list");
  13. 13. テスト2 use strict; Use warnings; Use Test::More; my @result =Sort::my_sort ([],[],[]); is_deeply(¥@result, [], "sort empty list");
  14. 14. tokuhiromさんからのコメント `if (my $hit = shift (@$_)){` を `if (defined(my $hit = shift (@$_))){` にしないと、0がはいると 無限ループになりますね。
  15. 15. tsucchiさんからのコメント List::MoreUtils のzip(mesh)も近いけど、詰めて くれないからちょっと違うか...(undef がデータと して入ってこないなら grep で undef 除けば多分 所望の動作になりますが...) my @result = grep { defined $_ } zip @aa, @bb, @cc, @dd;
  16. 16. 結論 Listの操作で困ったら、List::Util,List::MoreUtils のドキュメントを読もう。 イケてないからクールへ。
  17. 17. • ご清聴ありがとうございました コメントいただいた xtetsujiさん、tokuhiromさ ん、tsucchiさん、magnolia_k_さん ありがとうございました。

×