C言語のユニットテストライブラリPicoUnitを作った

C言語でテスト

僕が通っている大学のソフトウェア演習で、C言語で(BASIC風の)独自言語のコンパイラを作る課題が出た。 1ヶ月おきくらいに進捗のチェックと機能追加があって、それを5回くらい繰り返すと完成するらしい。

今までもソフトウェア演習はあったけど、この課題は今までと違ってテストのテストデータを提出することが必須になっている。

ただ、手動でテストすることを想定しているらしく、ユニットテストを書いてテストするみたいなことではないらしい。 手動で確認だと大変だし、カバレッジ下がりそうだし、何よりも僕は機械で出来ることは全部機械に任せる主義なので、手動でテストはナンセンスに感じて仕方無い。

assert()

調べてみたらC言語にはassert()関数というものがあって、それを使うと期待する値と違う結果が渡されたときにConsoleに何かしら表示してくれる。 ただ、assert()関数はプログラム内のどこか一度でもテストが失敗すると、その場でexitされてしまう。

まとめて全部をテストした上で落ちたテストを表示してくれる機能が欲しかったので、ライブラリ?マクロ?を書いてみた。 C言語のマクロを使ってプリプロセッサーでテストコードを差し込んで表示するだけのライブラリなので、一つのヘッダファイルだけで動く。

github.com

PerlのProveみたいにしたかったので、結果の出力形式を似せている。 使い方は簡単でテストしたいところでpu_test()して、全体のテストが終了するときにpu_print()すれば結果が表示される。