SystemC プログラムで単体テストを実行したいと考えています。アイデアは、各スイートに複数のテストを含む複数のテスト スイートを用意することです。テストごとに SystemC フレームワークをリセットする必要があります (たとえば、 を呼び出すことによってsc_simcontext::reset()
) が、明らかにすぐには修正されないバグがあるため、実際には不可能です。したがって、私は回避策を考え出すことにしました。
各テストを異なるプロセスで実行すると、すべてが正常に機能することがわかりました。次のコード スニペットは、私がそれを機能させるために使用したスキームの概要を示しています。
void test1() {
// ...
sc_start();
}
void test2() {
// ...
sc_start();
}
typedef std::function<void()> TestFunction;
void run_test(TestFunction test_function) {
pid_t pid = fork();
switch (pid) {
case -1:
throw std::runtime_error("Error forking process");
case 0:
test_function();
exit(0);
default:
waitpid(pid, nullptr, 0);
break;
}
}
int main() {
run_test(test1);
run_test(test2);
}
次に、Boost Unit Test を使用してそのようなテスト スキームを実装したいと思います。
unit_test_main
Boost Unit Test ライブラリの内部を調べていると、すべてのテストの実行をトリガーする関数のように見えることがわかりました。しかし、各テストを別のプロセスで実行するために、Boost Unit Test と対話する非侵入型の方法を考案できませんでした。
各テストを異なるプロセスで実行するための簡単なソリューションを知っている人はいますか?