LoginSignup
7
0

More than 3 years have passed since last update.

ruby 演習メモ IV (assert_equal)

Last updated at Posted at 2020-11-25

目的

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
7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0