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

Más contenido relacionado

Destacado

Resumen computacion nube zulema pacheco
Resumen computacion nube   zulema pachecoResumen computacion nube   zulema pacheco
Resumen computacion nube zulema pachecoSeida Zulema Pacheco
 
国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案share_stone
 
webサービス「ふっふはっほ」
webサービス「ふっふはっほ」webサービス「ふっふはっほ」
webサービス「ふっふはっほ」Tetsuya Tatsumi
 
国际结算 课程简介
国际结算 课程简介国际结算 课程简介
国际结算 课程简介share_stone
 
国际贸易(课程简介)
国际贸易(课程简介)国际贸易(课程简介)
国际贸易(课程简介)share_stone
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演Tetsuya Tatsumi
 
焦聪基本信息表
焦聪基本信息表焦聪基本信息表
焦聪基本信息表share_stone
 
国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版share_stone
 
App revealupを改造して
App revealupを改造してApp revealupを改造して
App revealupを改造してTetsuya Tatsumi
 
Mojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールMojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールTetsuya Tatsumi
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演Tetsuya Tatsumi
 
Mojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったMojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったTetsuya Tatsumi
 
英文難易度の低いニュースを集めたWebアプリ twien
英文難易度の低いニュースを集めたWebアプリ  twien英文難易度の低いニュースを集めたWebアプリ  twien
英文難易度の低いニュースを集めたWebアプリ twienTetsuya Tatsumi
 

Destacado (17)

Resumen computacion nube zulema pacheco
Resumen computacion nube   zulema pachecoResumen computacion nube   zulema pacheco
Resumen computacion nube zulema pacheco
 
模拟试卷
模拟试卷模拟试卷
模拟试卷
 
国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案国际贸易实务-课后习题及答案
国际贸易实务-课后习题及答案
 
Pollution
PollutionPollution
Pollution
 
webサービス「ふっふはっほ」
webサービス「ふっふはっほ」webサービス「ふっふはっほ」
webサービス「ふっふはっほ」
 
国际结算 课程简介
国际结算 课程简介国际结算 课程简介
国际结算 课程简介
 
Lingua::EN::Fathom
Lingua::EN::FathomLingua::EN::Fathom
Lingua::EN::Fathom
 
国际贸易(课程简介)
国际贸易(课程简介)国际贸易(课程简介)
国际贸易(课程简介)
 
Bringing dignity to life
Bringing dignity to lifeBringing dignity to life
Bringing dignity to life
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
焦聪基本信息表
焦聪基本信息表焦聪基本信息表
焦聪基本信息表
 
国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版国际贸易实务-案例选编-完整版
国际贸易实务-案例选编-完整版
 
App revealupを改造して
App revealupを改造してApp revealupを改造して
App revealupを改造して
 
Mojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツールMojoliciousのl10 nを自動化するツール
Mojoliciousのl10 nを自動化するツール
 
ラインスタンプ作りの実演
ラインスタンプ作りの実演ラインスタンプ作りの実演
ラインスタンプ作りの実演
 
Mojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作ったMojolicious+redisでチャットを作った
Mojolicious+redisでチャットを作った
 
英文難易度の低いニュースを集めたWebアプリ twien
英文難易度の低いニュースを集めたWebアプリ  twien英文難易度の低いニュースを集めたWebアプリ  twien
英文難易度の低いニュースを集めたWebアプリ twien
 

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

知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented ProgrammingPerl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programmingrisou
 
PHPのタイプヒンティング
PHPのタイプヒンティングPHPのタイプヒンティング
PHPのタイプヒンティングHidetaka Okamoto
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行guest5f4320
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へonozaty
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEGTakayuki Goto
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 

Similar a テストではまったお話 Test::More (12)

知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Perl 6 Object-Oliented Programming
Perl 6 Object-Oliented ProgrammingPerl 6 Object-Oliented Programming
Perl 6 Object-Oliented Programming
 
PHPのタイプヒンティング
PHPのタイプヒンティングPHPのタイプヒンティング
PHPのタイプヒンティング
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Java8から17へ
Java8から17へJava8から17へ
Java8から17へ
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 

Último

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Último (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

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