目的
ruby のコードを実際に書いてみよう.今回は第 IV 弾.
お題:assert_equal
assert equal とは, equal かどうかを確かめる (assert) 関数.
これを実際に書いてみる.
(参考資料はこれ)
code 例
実際に書いた code はこんな感じ.
def assert_equal(expected, result)
return expected == result
end
print "#{assert_equal(1, 1)}\n"
print "#{assert_equal(1, 2)}\n"
関数 assert_equal の説明はこんな感じ. (見たまんま)
- 関数名 : assert_equal
- 入力 : expected, result
- 出力 : true or false
- 概要 : expected と result が一致するなら true, そうでないなら false を返す
他の code からこの関数を呼び出したい時
この関数を他の ruby code から呼び出したい時は,
require './assert_equal'
assert_equal(2, 1*2)
こんな感じで使える.
でも, このままだと
print "#{assert_equal(1, 1)}\n"
print "#{assert_equal(1, 2)}\n"
ここも実行される.
そんな時, この部分 (関数のテスト部分) を実行しないようにするために, 以下の記述が使える
if $PROGRAM_NAME == __FILE__
print "#{assert_equal(1, 1)}\n"
print "#{assert_equal(1, 2)}\n"
end
これは, 実行してるファイル名と, code が実際に記述されているファイル名が同じなら, if - end を実行するという意味.
この書き方はとりあえず覚えよう.
colorize で色をつける
colorize で文字列に色をつけることが出来る.
require 'colorize'
print "#{assert_equal(1, 1)}\n".green
print "#{assert_equal(1, 2)}\n".red
こんな感じ.
どういう色があるかを見る時は,
> irb
irb(main):001:0> require 'colorize'
=> true
irb(main):002:0> String.colors
=> [:black, :light_black, :red, :light_red, :green, :light_green, :yellow, :light_yellow, :blue, :light_blue, :magenta, :light_magenta, :cyan, :light_cyan, :white, :light_white, :default]
こうやって見れる.
ちなみに colorize がない時は,
> gem install colorize
これで install.(gem は ruby の library を管理するシステム)
今回書いた code の全体
最終的にこうなった. ファイル名は "assert_equal_final.rb".
ちなみに自身の関数名を取得したい時は, __method__
で良いらしい. (ここ参照)
require 'colorize'
def print_expected_and_result(expected, result)
print "expected: #{expected}\n"
print "result: #{result}\n"
end
def assert_equal(expected, result)
print_expected_and_result(expected, result)
is_equal = (expected == result)
if is_equal
print "succeeded in #{__method__}.\n".green
else
print "failed in #{__method__}.\n".red
end
return is_equal # 何となく返したいから返してる
end
def assert_not_equal(expected, result)
print_expected_and_result(expected, result)
is_not_equal = (expected != result)
if is_not_equal
print "succeeded in #{__method__}.\n".green
else
print "failed in #{__method__}.\n".red
end
return is_not_equal # 何となく返したいから返してる
end
if $PROGRAM_NAME == __FILE__
array_expected = [1, 1, 2, 2]
array_result = [1, 2, 1, 2]
array_expected.zip(array_result) do |expected, result|
assert_equal(expected, result)
assert_not_equal(expected, result)
end
end
参考資料
- source ~/Lecture/multiscale_simulation/grad_members_20f/members/gagagagazelle/docs/c4_assert_equal.org