読者です 読者をやめる 読者になる 読者になる

情報系の凡才日記

エンジニアりんぐの試行錯誤とか参加したイベントとかについて書いていこうとおもいます。

【アルゴリズム+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構文なんかもついでにおぼえました(。・・。)
明日もがんばります。