この記事は「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_value
はRubyのProcess::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本テストが落ちているのは想定内です。これできれいにテスト結果を表示できるようになり、テストをしたくなりました。