LoginSignup
1
0

More than 3 years have passed since last update.

競プロのテストを「go test」でやりたかったので先人の知恵をお借りした

Last updated at Posted at 2019-04-13

先人の知恵

知恵お借りします。ありがとうございます。
競プロのテストを「go test」でやりたかったので作った

いきさつ

Go習得に向けてPaizaでもやろうと思ったが、元記事と同じように標準入出力のテストを簡単にやりたかった。

Paizaの場合、複数行の入力と複数行の出力の問題があるので、それに対応するように自分向けに修正をしてみた。

というお話。

リポジトリ

下記修正したのもの
GolangSkeletonForSpeedrun

イメージ

screenshot.png

修正点

複数行対応

テストケース用の構造体のプロパティ型が入力、出力想定ともに 一行だけ受け取る想定になっていたので、 複数行受け取れるように string から []strings に変更しました。

それに伴い getLine も修正。複数引数の場合、getLine にて、 os.Args[1] で一番最初の引数を受け取って、受け取った分は引数から消すという処理にすることで複数引数を受け取れるようにしました。

何故最後なのかというと、go testの後に続くフラグの数がわからないから。入力が一行だけなのであれば、コレで十分です。(つまり複数行には非対応)

後ろのフラグ消しちゃって大丈夫かな?という懸念はあったものの、特に問題なさそうだったので、毎回テストケース毎に os.Args = nil で初期化&テストケース毎の想定結果(複数行)を突っ込むことにしました。

os.Args[0]には引数の長さを突っ込んでますが、これは引数から入力を取得するのか、標準入力から取得するのかが分岐できなくなってしまうので、便宜上突っ込んでるだけで別にあんまり意味はないです。

os.Args = append(os.Args,strconv.Itoa(len(tc.args)))
for _, arg := range tc.args {
    os.Args = append(os.Args, arg)
}

出力結果に改行コードを含むか否か

paizaの場合、解答の出力に改行を含むことが前提になっているので、flagパッケージを利用して、フラグ newline がある場合は出力結果に改行を含むのが正解となるようにしました。

終わり

そんな感じで入出力の複数行対応、正解の改行対応を行って、paizaがちょっと捗るようになりましたとさ。

以上、お目通しどうもありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0