Julia tips #1:【超簡単】コードのテスト
テストマクロについてのメモ(2017/12/03時点)
環境
windows 10 Pro (Fall Creators Update)
WSL有効化済み
WSLのbashにて実行
環境構築の仕方はこちらをどうぞ
テストマクロの使い方
まずはJuliaのバージョン確認から
$ julia --version julia version 0.5.2
foo(x)という関数があったとして、その挙動を引数ごとにまとめて行う方法
julia> @testset "Foo Tests" begin @test foo("a") == 1 @test foo("ab") == 4 @test foo("abc") == 9 end Test Summary: | Pass Total Foo Tests | 3 3
全部で3回テスト(Total)して、3回ともクリアしたぞ(Pass)って意味。
ネストしていても大丈夫
julia> @testset "Foo Tests" begin @testset "Animals" begin @test foo("cat") == 9 @test foo("dog") == foo("cat") end @testset "Arrays $i" for i in 1:3 @test foo(zeros(i)) == i^2 @test foo(ones(i)) == i^2 end end Test Summary: | Pass Total Foo Tests | 8 8
結果が全部まとめられているが、エラーを吐いている場合は展開して表示してくれる。
Arrays: Test Failed Expression: foo(ones(4)) == 15 Evaluated: 16 == 15 in record at test.jl:297 in do_test at test.jl:191 Test Summary: | Pass Fail Total Foo Tests | 3 1 4 Animals | 2 2 Arrays | 1 1 2 ERROR: Some tests did not pass: 3 passed, 1 failed, 0 errored, 0 broken. in finish at test.jl:362
他にも色んなマクロがある
大体一緒か判定する
@test a≈b
≈は\approxと打った後にtabで表示される。
以下、エラーコードつき。
めっちゃ小さい数値誤差を許容して等しいかどうか判定
julia> @test_approx_eq 1. 0.999999999 ERROR: assertion failed: |1.0 - 0.999999999| < 2.220446049250313e-12 1.0 = 1.0 0.999999999 = 0.999999999 in test_approx_eq at test.jl:75 in test_approx_eq at test.jl:80
e-12なら通常使用なら問題なさそうかな?
許容誤差を設定して判定
@test_approx_eq_eps 1. 0.999 1e-3 ERROR: assertion failed: |1.0 - 0.999| <= 0.001 1.0 = 1.0 0.999 = 0.999 difference = 0.0010000000000000009 > 0.001 in error at error.jl:22 in test_approx_eq at test.jl:68
こんな書き方もあったりする。
julia> ≈(1, 0.999, atol=0.001) true julia> ≈(1, 0.999, atol=0.0001) false
感想
Pythonでデコレータ書いたりするより遥かに簡単で良い。