FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

DSLでビルドツールを自作する (20日目 Rumy-Makeのテスト結果を綺麗に管理しよう)

この記事は「Qiita Advent Calendar 2019 DSLで自作ビルドツールを作ろう」の20日目の記事です。

20日目 Rumy-Makeのテスト結果を綺麗に管理しよう

前回でテストを実行する環境が整いましたが、ただ単にテストを流すだけで結果を綺麗に表示したり、リグレッションの結果を取得する機能が甘いです。

蛇足ではありますが、Rumyのテスト実行結果を取得して、綺麗に表示する機能を作っておきましょう。

Swimmer-RISCVのテストに限定しますが、現在RISC-Vシミュレータはリグレッションテスト実行時に、最後の実行コードが1だとテスト成功、そうでなければテスト失敗としています。本当はこれ以外にもテスト結果の判定方法は用意しておかなければならないのでしょうけれども、今回は簡単化のために、テストの終了コードが1ならばテスト成功、それ以外であればテスト失敗として取り扱います。

という訳で、さっそくrumy-test.rbを改造して、テスト結果を取得します。Rubyで外部コマンドを実行するためにはコマンド名という表記をしていたのですが、その実行結果は、コマンド実行直後に$?で取得します。

  • src/rumy-test.rb
  $test_list.each{|key, value|
    print "Executing " + value.name + " ..."
    result_string = `#{value.command}`
    res_value = $?
...

res_valueRubyProcess::Statusクラスを返してくるので、ExitStatusメンバを取得します。これでテストのPass/Failを判定します。

    result_string = `#{value.command}`
    res_value = $?
    if res_value.exitstatus == 1 then
      puts "o"
      test_success = test_success + 1
    else
      puts "x"
      test_failure = test_failure + 1
    end

最後に、テストのPass/Fail数を表示するようにしておきました。

  puts "======================================"
  puts "  RESULT"
  puts "  success = " + test_success.to_s
  puts "  failure = " + test_failure.to_s
  puts "======================================"
end

というわけで、これをSwimmer-RISCVのテストに適用します。

$ rumy test
...
Executing rv32mi-p-breakpoint ...          o
Executing rv32mi-p-csr ...                 o
Executing rv32mi-p-illegal ...             x
Executing rv32mi-p-ma_addr ...             o
Executing rv32mi-p-ma_fetch ...            x
Executing rv32mi-p-mcsr ...                x
...
Executing rv64um-v-mulw ...                o
Executing rv64um-v-rem ...                 o
Executing rv64um-v-remu ...                o
Executing rv64um-v-remuw ...               o
Executing rv64um-v-remw ...                o
======================================
  RESULT
  success = 396
  failure = 6
======================================

いいですね。ま、6本テストが落ちているのは想定内です。これできれいにテスト結果を表示できるようになり、テストをしたくなりました。