assert_equal
本記事は大学院前期過程の講義[マルチスケールシミュレーション特論]に関する記事です
assert_equal は、イコール(両者が等しい)かどうかを確かめる関数。これを作っていく。
とりあえず
思いつく範囲でとりあえず書いてみる。
def assert_equal(expected, result)
return expected == result
end
p assert_equal(1, 1)
これを実行する。
$ ruby assert_equal.rb
true
よし。
色、つけてみる?
$ gem install colorize
してから、
require 'colorize'
def assert_equal(expected, result)
if expected == result
puts 'true'.green
else
puts 'false'.red
end
end
assert_equal(1, 1)
assert_equal(1, 2)
みたいなプログラムを実行!
$ ruby assert_equal.rb
true
false
true
は 緑 、 false
は 赤 になった!
出力を豪華にしてみる?
require 'colorize'
def assert_equal(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
if expected == result
puts 'succeeded in assert_equal.'.green
else
puts 'failed in assert_equal.'.red
end
end
assert_equal(1, 1)
assert_equal(1, 2)
実行!
$ ruby assert_equal_richer_output.rb
expected :: 1
result :: 1
succeeded in assert_equal.
expected :: 1
result :: 2
failed in assert_equal.
qiitaでは色変わらないけど、ターミナル上では変わってます。
まぁNot Equal もやるか〜
require 'colorize'
def assert_not_equal(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
if expected != result
puts 'succeeded in assert_not_equal.'.green
else
puts 'failed in assert_not_equal.'.red
end
end
assert_not_equal(1, 1)
assert_not_equal(1, 2)
簡単。
$ ruby assert_not_equal_richer_output.rb
expected :: 1
result :: 1
failed in assert_not_equal.
expected :: 1
result :: 2
succeeded in assert_not_equal.
ファイルをまとめて汎用化
上の、イコールとノットイコールをまとめて、重複してる部分はまとめて、さらに外部からも呼び出します。まずは重複部分の整理
require 'colorize'
def puts_vals(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
end
def assert_equal(expected, result)
puts_vals(expected, result)
print expected == result ?
"succeeded in #{__method__}.\n".green :
"failed in #{__method__}.\n".red
end
def assert_not_equal(expected, result)
puts_vals(expected, result)
print expected != result ?
"succeeded in #{__method__}.\n".green :
"failed in #{__method__}.\n".red
end
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
これを外部ファイルからも呼び出したい。
require './assert_equal'
assert_equal(2, 1*2)
assert_not_equal('bob', 'bob2')
みたいな感じ。けど、外部から呼び出したら、tail の4行も実行されてしまう。これを避ける方法がある。
これはもう覚えるしかない。
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
end
これは、実行中のプログラムのファイル名と、記述されているファイル名が一致したら、という構文である。例えば、上記コードが A.rb
に記述されていて、 B.rb
から呼び出されても実行されない。最終はこうなった。
require 'colorize'
def puts_vals(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
end
def assert_equal(expected, result)
puts_vals(expected, result)
print expected == result ?
"succeeded in #{__method__}.\n".green :
"failed in #{__method__}.\n".red
end
def assert_not_equal(expected, result)
puts_vals(expected, result)
print expected != result ?
"succeeded in #{__method__}.\n".green :
"failed in #{__method__}.\n".red
end
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
end
いい感じ!!今後の講義でもこのメソッドは活用するらしい。
- source ~/Library/Mobile Documents/com~apple~CloudDocs/KG/class/M1/multi_scale_sim/grad_members_20f/members/ryomichi56/./qiita/no9.org