2013-01-21

[Ruby]Rubyのチートコード(リスト編)

書いてみた。
流行りはRSpecだけど、最近購入してみたRubyMineの設定を煮詰めたり、使いやすさとかを確認してみたかったからminitestでコードを書いた。

ついでにGroovyでも同じコードを書いてみた。
class CheatCode < Test::Unit::TestCase

  # 各テストメソッドが呼ばれる前に実行する前処理
  def setup
  end

  # 各テストメソッドが呼ばれた後に実行する後処理
  def teardown
  end

=begin
配列の初期化
初期要素を代入して初期化する
=end
  def test_array_initial
    ll = [11,12,13,14]
    expected = [11,12,13,14]
    assert_equal(expected,ll,"ll => [11, 12, 15, 13, 14] ")
  end

=begin
配列の初期化
Array.newを使用して初期化する
=end
  def test_array_initial_2
    ll = Array.new([11,12,13,14])
    expected = [11,12,13,14]
    assert_equal(expected,ll,"ll => [11, 12, 13, 14] ")
  end

=begin
配列の要素数を指定して初期化
=end
  def test_array_initial_3
    ll = Array.new(4)
    ll[0] = 11
    ll[1] = 12
    ll[2] = 13
    ll[3] = 14
    expected = [11,12,13,14]
    assert_equal(expected,ll,"ll => [11, 12, 13, 14] ")
  end

=begin
長さ3で各要素を[11,12,13,14]で初期化した配列を生成する
=end
  def test_array_initial_4
    ll = Array.new(3,[11,12,13,14])
    expected = [[11,12,13,14], [11,12,13,14], [11,12,13,14]]
    assert_equal(expected,ll,"ll => [[11,12,13,14], [11,12,13,14], [11,12,13,14]]")
  end

=begin
for-each文
valueは配列の要素を順番に取り出す
=end
  def test_each
    ll = [11,12,13,14]
    expected_1 = 12
    expected_2 = [11,12,13,14]
    # あまりよくないテスト
    # valueが12の時にアサーションを実施
    ll.each do |value|
      if(value == 12)
        assert_equal(expected_1,value,"Value is 12")
      end
    end
    # for-eachを実施しても配列に変化無しであることを確認する
    assert_equal(expected_2,ll,"ll => [11,12,13,14]")
  end

=begin
引数の値が配列かどうかを調べる
配列以外を設定するとnilが返ってくるので、nilではないことでチェックができる
=end
  def test_try_convert
    expected = [11,12,13,14]
    assert_equal(expected,Array.try_convert([11,12,13,14]),"Array.try_convert([11,12,13,14]) => [11,12,13,14]")
    assert_nil(Array.try_convert("11"),"Array.try_convert(\"11\") => nil")
  end


=begin
配列の平滑化をする
配列がネストしているので平滑化された値が取得できる
配列がネストしていない場合は何も実施されない
=end
  def test_add_array_flaten
    ll = [11,12,13,14,[15,16]]
    expected = [11,12,13,14,15,16]
    array = ll.flatten
    assert_equal(expected,array,"ll => [11, 12, 13, 14, 15, 16]")
    assert_equal(expected,array.flatten,"array => [11,12,13,14,15,16]")
  end

=begin
要素の平滑化をする
破壊的な平滑化をする
=end
  def test_add_array_break_flaten
    ll = [11,12,13,14,[15,16]]
    expected = [11,12,13,14,15,16]
    assert_equal(expected,ll.flatten!,"ll.flatten? => [11, 12, 13, 14, 15, 16]")
  end

=begin
要素の平滑化をする
破壊的な平滑化ですでに平滑化済みの場合、nilが返る
=end
  def test_add_array_break_flaten_2
    ll = [11,12,13,14,15,16]
    assert_nil(ll.flatten!,"ll.flatten? => nil")
  end

=begin
配列の末尾を取得する
popメソッドと違って末尾の要素は変更されない
取得要素数を指定した場合、指定した要素数分末尾から取得する
要素数が配列の長さよりも大きい場合は全要素を取得する
配列要素が空の場合、nilを返す
=end
  def test_last
    ll = [11,12,13,14]
    expected_1 = 14
    expected_2 = [13,14]
    expected_3 = [11,12,13,14]
    assert_equal(expected_1,ll.last,"ll.last => 14 / ll => [11,12,13,14]")
    assert_equal(expected_1,ll.last,"ll.last => 14 / ll => [11,12,13,14]")
    assert_equal(expected_1,ll[-1],"ll[-1] => 14")
    assert_equal(expected_2,ll.last(2),"ll.last(2) => [13,14]")
    assert_equal(expected_3,ll.last(5),"ll.last(2) => [11,12,13,14]")
    ll.clear
    assert_nil(ll.last,"ll.last => nil / ll => []")
  end

=begin
配列を初期化する
===========Groovy===========
def ll = [11,12,13,14]
ll = []
assert ll.size() == 0
============================
=end
  def test_list_clear
    ll = [11,12,13,14]
    expected = true
    ll.clear
    assert_equal(expected,ll.empty?,"ll.empty? is true / ll => []")
  end



=begin
引数に指定した要素と等しい要素のうち最初の位置を取得する
===========Groovy===========
def ll = [11,12,13,14]
assert ll.findIndexOf  { it > 12 } == 2
============================
=end
  def test_index
    ll = [11,12,13,14,12]
    expected_1 = 1
    expected_2 = 2
    assert_equal(expected_1,ll.index(12),"first Value is 1")
    # 条件を指定(12よりも大きい要素)
    assert_equal(expected_2,ll.index{ |value| value > 12 },"first Value is 2")
  end

=begin
リストから条件にあった要素の数を取得する
countメソッドは要素を「==」で判定する
===========Groovy===========
List ll = [11,12,13,14,13]
assert ll.count(13) == 2
assert ll.count {it % 2 == 0 } == 2
============================
=end
  def test_grep_count
    ll = [11,12,13,14,13]
    expected = 2
    assert_equal(expected,ll.count(13),"ll.count(13) => 2")
    assert_equal(expected,ll.count{|item| item%2==0},"ll.count{|item| item%2==0} => 2")
  end

=begin
リストから条件にあったもののリストを取得する
===========Groovy===========
List ll = [11,12,13,14]
assert ll.grep {it % 2 == 0 } == [12,14]
============================
=end
  def test_grep
    ll = [11,12,13,14]
    expected = [12,14]
    assert_equal(expected,ll.select{|item| item%2==0},"ll.select{|item| item%2==0} => [12,14]")
  end

=begin
リストの末尾に要素を追加する
以下のようにすることもできる
・「ll << 15」のように破壊的に追加
・「ll.push 15,16」のように連続して要素を末尾に追加
===========Groovy===========
def ll = [11,12,13,14]
def expected = [11,12,13,14,15]
ll.add(15)
assert ll == expected
============================
=end
def test_add_data
  ll = [11,12,13,14]
  expected = [11,12,13,14,15]
  ll.push 15
  assert_equal(expected,ll,"ll => [11,12,13,14,15]")
end

=begin
要素の装入する位置をして、リストに要素を追加する
===========Groovy===========
def ll = [11,12,13,14]
def expected = [11,12,15,13,14]
ll.add(2,15)
assert ll == expected
============================
=end
  def test_add_selected_index
    ll = [11,12,13,14]
    expected = [11,12,15,13,14]
    ll[2,0] = 15
    assert_equal(expected,ll,"ll => [11, 12, 15, 13, 14] ")
  end

=begin
リストから添字の位置に含まれる要素を取得する
リストの範囲外を指定した場合、nilを取得する
===========Groovy===========
def ll = [11,12,13,14]
def expected = 12
assert ll.get(1) == expected
assert ll[1] == expected
※リストの範囲外を指定するとIndexOutOfBoundsExceptionが発生する
============================
=end
  def test_get
    ll = [11,12,13,14]
    expected = 12
    assert_equal(expected,ll[1],"ll[1] => 12")
    assert_equal(expected,ll.at(1),"ll.at(1) => 12.")
    assert_nil(ll.at(5),"ll.at(nil) => 12.")
  end

=begin
リストが空であるかどうか調べる
空の場合、trueとなる
===========Groovy===========
def ll = [11,12,13,14]
assert ll.isEmpty() == false
============================
=end
  def test_list_empty
    ll = [11,12,13,14]
    expected = false
    assert_equal(expected,ll.empty?,"ll.empty? is false / ll => [11,12,13,14]")
  end

=begin
配列要素の数を取得する
配列の要素数に変更があった場合、要素数も変更になる
要素の中に配列が入った場合、配列が1要素として扱われる
===========Groovy===========
def ll = [11,12,13,14]
def expected = 4
assert ll.size() == expected
============================
=end
  def test_size
    ll = [11,12,13,14]
    add = [15,16]

    expected_1 = 4
    expected_2 = 3
    expected_3 = 4
    expected_4 = 0

    assert_equal(expected_1,ll.size,"ll.size is 4")
    assert_equal(expected_1,ll.length,"ll.size is 4")
    ll.pop
    assert_equal(expected_2,ll.size,"ll.size is 3")
    ll.push(add)
    assert_equal(expected_3,ll.size,"ll.size is 4 / ll => [11,12,13,[15,16]")
    ll.clear
    assert_equal(expected_4,ll.size,"ll.size is 4 / ll => []")
  end

=begin
リストから指定した範囲の要素のみのリストを取得する
===========Groovy===========
def ll = [11,12,13,14]
def expected = [12,13]
assert ll.getAt(1..2) == expected
assert ll.getAt([1,2]) == expected
============================
=end
def test_selected_range
  ll = [11,12,13,14]
  expected_1 = [12,13]
  expected_2 = [12,13,14]
  assert_equal(expected_1,ll.slice(1,2),"ll.slice(1,2) => [12,13]")
  assert_equal(expected_2,ll.slice(1..3),"ll.slice(1..2) => [12,13]")
  assert_nil(ll.slice(5,1),"ll.slice(5,1) => nil")
end

=begin
リストの共通部分を取り出す
===========Groovy===========
def ll = [11,12,13,14]
def common = [12,13]
def expected = [12,13]
assert ll.intersect(common) == expected
============================
=end
def test_common
  ll = [11,12,13,14]
  common = [12,13]
  expected = [12,13]
  assert_equal(expected,ll & common,"ll & common => [12,13]")
end

=begin
配列の末尾を取り出す
===========Groovy===========
    def ll = [11,12,13,14]
    def expected_1 = 14
    def expected_2 = [11,12,13]
    assert ll.pop() == expected_1
    assert ll == expected_2
============================
=end
  def test_pop
    ll = [11,12,13,14]
    expected_1 = 14
    expected_2 = 13
    assert_equal(expected_1,ll.pop,"ll.pop => 14 / ll => [11,12,13]")
    assert_equal(expected_2,ll.pop,"ll.pop => 13 / ll => [11,12]")
  end


=begin
リスト内の要素の並び順を降順に変更したリストを取得する
メソッドの末尾に「!」をつけると自分自身のリストの並び順を変更する
===========Groovy===========
def ll = [11,12,13,14]
def expected = [14,13,12,11]
assert ll.reverse() == expected
============================
=end
def test_reverse
  ll = [11,12,13,14]
  expected_1 = [14,13,12,11]
  expected_2 = [11,12,13,14]
  assert_equal(expected_1,ll.reverse,"ll.reverse => [14,13,12,11]")
  assert_equal(expected_2,ll,"ll => [11,12,13,14]")
  ll.reverse!
  assert_equal(expected_1,ll,"ll => [11,12,13,14]")
end

=begin
リストをソートする
===========Groovy===========
def ll = [12,13,11,14]
def expected = [11,12,13,14]
assert ll.sort() == expected
============================
=end
def test_sort
  ll = [12,13,11,14]
  expected_1 = [11,12,13,14]
  expected_2 = [12,13,11,14]
  assert_equal(expected_1,ll.sort,"ll.sort => [11,12,13,14]")
  assert_equal(expected_2,ll,"ll => [12,13,11,14]")
  ll.sort!
  assert_equal(expected_1,ll,"ll.sort => [11,12,13,14]")
end

=begin
リストの中で最大の値を取得する
===========Groovy===========
def ll = [11,12,13,14]
def expected = 14
assert ll.max() == expected
============================
=end
  def test_max
    ll = [11,12,13,14]
    expected = 14
    assert_equal(expected,ll.max,"ll.max is 14")
  end

=begin
リストの中で最小の値を取得する
===========Groovy===========
def ll = [11,12,13,14]
def expected = 11
assert ll.min() == expected
============================
=end
  def test_min
    ll = [11,12,13,14]
    expected = 11
    assert_equal(expected,ll.min,"ll.max is 14")
  end


=begin
リストの末尾にリストを追加する
===========Groovy===========
def ll = [11,12,13,14]
def expected = [11,12,13,14,[15,16]]
ll.push([15,16])
assert ll == expected
============================
=end
  def test_add_array_last
    ll = [11,12,13,14]
    expected = [11,12,13,14,[15,16]]
    # 追加要素
    add = [15,16]
    ll.push(add)
    assert_equal(expected,ll,"ll =>  [11, 12, 13, 14, [15, 16]]")
  end

=begin
pushメソッドを使用せず、リストの末尾にリストを追加する
===========Groovy===========
def ll = [11,12,13,14]
def expected = [11,12,13,14,[15,16]]
ll <<[15,16]
assert ll == expected
============================
=end
  def test_add_array_last_2
    ll = [11,12,13,14]
    expected = [11,12,13,14,[15,16]]
    add = [15,16]
    ll << add
    assert_equal(expected,ll,"ll => [11, 12, 13, 14, [15, 16]]")
  end
end


RubyのほうがGroovyよりも書きやすいや。。。
テストコードを書くときぐらいしか使いそうもないな

0 件のコメント:

コメントを投稿

Blogger Syntax Highliter