製造準備 (C で UT)
RSpec で試験、なソレはあまりに面倒なので断念な方向です。探してみたら C で UT な環境って結構色々あるみたい。とりあえず試験的に cunit を入れてみた。
とりあえず gauche.h の試験なサンプルを書いてみながら問題点を洗ってみる事に。
make 使いたいんだけどとりあえずサンプルって事で簡単に行きます。試験なファイル名は main.c で。参考にしているチュートリアルは行番号が付いてて微妙。
#include <CUnit/CUnit.h> #include <CUnit/Console.h> #include "gauche.h" void test_gauche_001(void) { int i = 0; CU_ASSERT(SCM_PTRP(&i)); } int main(void) { CU_pSuite sample_suite; CU_initialize_registry(); sample_suite = CU_add_suite("Sort", NULL, NULL); CU_add_test(sample_suite, "test_001", test_gauche_001); CU_basic_run_tests(); CU_cleanup_registry(); return 0; }
動くんかいな。コンパイルは以下で良いのかな。
$ gcc -o test main.c -Wall -lcunit
げ。gauche.h 方面でエラーが (以下略
ちょっと誤魔化し気味に微妙なソレ達をざくざく削って、CU_basic_run_tests() 使う場合には Basic.h を include らしい。一応動作しましたが微妙。
$ ./test CUnit - A Unit testing framework for C - Version 2.1-0 http://cunit.sourceforge.net/ --Run Summary: Type Total Ran Passed Failed suites 1 1 n/a 0 tests 1 1 1 0 asserts 1 1 1 0 $
あとは gauche.h をどう誤魔化すか、かなぁ (何
追記
試験が微妙。こう、とか??
void test_gauche_001(void) { int i = 0; CU_ASSERT_TRUE(SCM_PTRP(&i)); CU_ASSERT_TRUE(SCM_PTRP(0)); CU_ASSERT_FALSE(SCM_PTRP(1)); CU_ASSERT_FALSE(SCM_PTRP(2)); CU_ASSERT_FALSE(SCM_PTRP(3)); CU_ASSERT_TRUE(SCM_PTRP(4)); }
あとは試験な関数の書き方 (suite とか test の切り分け) とか make なソレをさくっと検討して gauche.h の最低限必要な部分を切り分けて試験しとけば製造に着手できるはず。