Enjoy Architecting

Twitter: @taisho6339

【アルゴリズム+Ruby】Rubyで単体テスト 【test-unit】

備忘録。
イナリサーチRubyで実装しつつ単体テストを行ってみました。
使用したテストフレームワークはとりあえずtest-unitで。。。

テストケースは、

・通常の探索でヒットする場合
・通常の探索でヒットしない場合
・数字じゃないオブジェクトを与えた場合(例外テスト)

です。
とりあえずてきとーです。

require 'test/unit'

class Searcher

    def self.binary_search( x , left , right , array )

        while left <= right do
            mid = (left + right) / 2

            if array[mid] == x then
                return mid
            end

            if array[mid] < x then
                left = mid + 1
            else
                right = mid - 1
            end
        end

        return nil

    end

end

class SearchTest < Test::Unit::TestCase

    @@array = [1,2,3,4,5,6,6,8,9,10]
    
    def testHitSearch
        ans = Searcher.binary_search( 9 , 0 , @@array.length-1 , @@array)
        assert_equal(8,ans)
    end

    def testMissSearch
        ans = Searcher.binary_search( 34 , 0 ,@@array.length-1 , @@array)
        assert_equal(nil,ans)
    end

    def testillegalArgument
        begin
            Searcher.binary_search( "String" , 0 ,@@array.length-1 , @@array)
            flunk('Failed')
        rescue 
        end
    end
end

実行結果

Run options: 

# Running tests:

Finished tests in 0.004678s, 641.2997 tests/s, 427.5331 assertions/s.
3 tests, 2 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]


おー、、、、
、、、、、はい。
ちゃんとすべてのテストが通りました。

今回はクラス変数、クラスメソッド、Javaでいうtry-catchにあたるbegin構文なんかもついでにおぼえました(。・・。)
明日もがんばります。