テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(scala report) SGFパーサ実装完了

お待たせいたしました.

Scalaのparser combinatorを使って, Smart Game Formatをパースするプログラムを作った. ライブラリとしてのAPIデザインは, 自分で食いつつ決めていきたいと思うが, 実装とテストに関しては大体終了した. なんと200行で書けてしまった. 関数プログラミングは素晴らしい. あぁ, Scalaで働きたい. Scalaジョブをください.

github.com

SGF自体は碁以外にもさまざまなゲームに対応しているが, 私は碁以外で使う気がないのと, おそらくさまざまなゲームに対応させるためにはそれらのゲームのルールもざっくりと学ぶ必要が出てきてストレスで禿げてしまうから, 碁に特化してある.

実装の難易度としては別に高くなく, HaskellとParsecに馴染みのある私としては簡単であった. ただし, Applicative FunctorやMonadという概念を言語レベルで取り入れてない(APIデザインとしてはそうなっているが)ので, APIをいちいち見て勉強する必要があった. これは大変うざい. Scalazを前提として欲しい.

テストはTravis回帰テストが走るようにした. テスト内容は, 現状は以下の2つ.

  1. Propertyという小さな単位を読むためのパーサをいくつかピックアップして, それぞれに自作の微妙なテストケースを突っ込んで, 出力が思ったとおりか調べる.
  2. SGFの本家にあるサンプルや, ネットに転がっているSGFファイルを実際にパースしてみて, パージングが成功するかどうか調べる.

2に進んでからいくつかバグが見つかり, エッセンスを1に抽出してから泣きながらデバグをするということを繰り返した. 結局, 今日は10時間くらい開発していたことになる. 働くのも辛いが, フリーダムプログラマも辛い.

今の目標はSGFビューアを実装してウェブアプリとして公開することである. そのためには, パースした情報を碁盤に適用するコードも書く必要があるが, ぶっちゃけどういうコードが最善かイメージがわかない(Travesableにするという感じだとは思うが)ので, とりあえず保留して先に進もうと思う.

しばらくまた本読みします. Chao