require 'helper' class TestRecnum < Test::Unit::TestCase def reinject(i) 1.upto(i) do |i| @array.push i.to_s @bdb1.push i end end def test_00_error clean_tmpdir assert_raises(BDB1::Fatal, "invalid name") do BDB1::Recnum.new(tmpdir("."), "a") end assert_raises(BDB1::Fatal, "invalid Env") do BDB1::Recnum.open(tmpdir("aa"), "env" => 1) end end def test_01 sub_init sub_get_set sub_subseq sub_op sub_at sub_slice sub_slice_bang sub_reverse sub_index sub_delete sub_reject sub_clear sub_fill sub_include sub_replace sub_reopen sub_collect sub_insert sub_flp sub_cmp sub_compact sub_close end def sub_init assert_kind_of(BDB1::Recnum, @bdb1 = BDB1::Recnum.new(tmpdir("aa"), "w"), "") @array = [] end def sub_get_set reinject(99) @bdb1.each_index do |i| assert_equal(@bdb1[i], @array[i], "") end -1.downto(-99) do |i| assert_equal(@bdb1[i], @array[i], "") end 200.times do i = rand(@array.size) assert_equal(@bdb1[i], @array[i], "") end end def sub_subseq assert_equal(@bdb1[-1], @array[-1], "") assert_equal(@bdb1[2 .. 7], @array[2 .. 7], "") @bdb1[2 .. 7] = "a", "b" @array[2 .. 7] = "a", "b" assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") @bdb1[3 .. 6] = "a", "b", "c", "d", "e", "g", "h", "i" @array[3 .. 6] = "a", "b", "c", "d", "e", "g", "h", "i" assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") end def sub_op assert_equal(@bdb1 & ["1", "2", "3"], @array & ["1", "2", "3"], "<&>") assert_equal(@bdb1 & [], @array & [], "<&>") assert_equal(@bdb1 + ["3", "4"], @array + ["3", "4"], "") assert_equal(["3", "4"] + @bdb1, ["3", "4"] + @array, "") assert_equal(@bdb1 - ["3", "4"], @array - ["3", "4"], "") assert_equal(["3", "4"] - @bdb1, ["3", "4"] - @array, "") assert_equal(@bdb1 * 2, @array * 2, "") assert_equal(@bdb1 * ":", @array * ":", "") assert_equal(@bdb1 * "", @array * "", "") assert_equal(@bdb1.size, @array.size, "") end def sub_at assert_equal(@bdb1.to_a, @array, "") assert_equal(@bdb1.at(0), @array.at(0), "") assert_equal(@bdb1.at(10), @array.at(10), "") assert_equal(@bdb1.at(99), @array.at(99), "") assert_equal(@bdb1.at(205), @array.at(205), "") assert_equal(@bdb1.at(-1), @array.at(-1), "") assert_equal(@bdb1.at(-100), @array.at(-100), "") assert_equal(@bdb1.at(205), @array.at(205), "") end def sub_slice assert_equal(@bdb1.to_a, @array, "") 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.slice(i), @array.slice(i), "") end 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.slice(-i), @array.slice(-i), "") end 100.times do i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.slice(i, j), @array.slice(i, j), "") end 100.times do i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.slice(-i, j), @array.slice(-i, j), "") end 100.times do i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.slice(i .. j), @array.slice(i .. j), "") end 100.times do i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.slice(-i, j), @array.slice(-i, j), "") end end def sub_slice_bang assert_equal(@bdb1.to_a, @array, "") 10.times do |iter| i = rand(@bdb1.size) assert_equal(@bdb1.slice!(i), @array.slice!(i), "<#{iter} slice!(#{i})>") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| i = rand(@bdb1.size) assert_equal(@bdb1.slice!(-i), @array.slice!(-i), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.slice!(i, j), @array.slice!(i, j), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| i = rand(@bdb1.size) j = i + rand(@bdb1.size - i) assert_equal(@bdb1.slice!(-i, j), @array.slice!(-i, j), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end reinject(60) another = 0 10.times do |iter| i = rand(@bdb1.size) j = i + rand(@bdb1.size - i) if ! @array.slice(i .. j) assert_raises(RangeError, "") { @bdb1.slice!(i .. j) } another += 1 redo if another < 10 another = 0 next end assert_equal(@bdb1.slice!(i .. j), @array.slice!(i .. j), "") assert_equal(@bdb1.size, @array.size, "") another = 0 reinject(60) if @bdb1.size < 20 end another = 0 10.times do |iter| i = rand(@bdb1.size) j = 1 + rand(@bdb1.size - i) if ! @array.slice(-i .. -j) assert_raises(RangeError, "") { @bdb1.slice!(-i .. -j) } another += 1 redo if another < 10 another = 0 next end assert_equal(@bdb1.slice!(-i .. -j), @array.slice!(-i .. -j), "") assert_equal(@bdb1.size, @array.size, "") another = 0 reinject(60) if @bdb1.size < 20 end reinject(40) if @bdb1.size < 40 assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") end def sub_reverse assert_equal(@bdb1.reverse, @array.reverse, "") @array.reverse! ; @bdb1.reverse! assert_equal(@bdb1.to_a, @array, "") assert_equal(@bdb1.size, @array.size, "") end def sub_index 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.index(i), @array.index(i), "") assert_equal(@bdb1.index(-i), @array.index(-i), "") end 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.rindex(i), @array.rindex(i), "") assert_equal(@bdb1.rindex(-i), @array.rindex(-i), "") end 100.times do aa = [] rand(12).times do aa.push(rand(@bdb1.size)) end assert_equal(@array.values_at(*aa), @bdb1.values_at(*aa), "") end 100.times do aa = [] rand(12).times do aa.push(-1 * rand(@bdb1.size)) end assert_equal(@array.values_at(*aa), @bdb1.values_at(*aa), "") end end def sub_delete assert_equal(@bdb1.to_a, @array, "") 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.delete(i), @array.delete(i), "") reinject(60) if @bdb1.size < 20 end assert_equal(@bdb1.to_a, @array, "") 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.delete_at(i), @array.delete_at(i), "") reinject(60) if @bdb1.size < 20 end assert_equal(@bdb1.to_a, @array, "") reinject(60) if @bdb1.size < 60 assert_equal(@bdb1.delete_if { false }, @bdb1, "") assert_equal(@bdb1.to_a, @array, "") assert_equal(@bdb1.delete_if { true }, @bdb1, "") assert_equal(@bdb1.size, 0, "") @bdb1.push *@array assert_equal(@bdb1.to_a, @array, "") 100.times do i = rand(@bdb1.size) assert_equal(@bdb1.delete_if {|i| i.to_i > 32}, @bdb1, "") @array.delete_if {|i| i.to_i > 32} assert_equal(@bdb1.to_a, @array, "") reinject(60) if @bdb1.size < 60 end reinject(99) if @bdb1.size < 99 end def sub_reject assert_equal(@bdb1.to_a, @array, "") assert_equal(nil, @bdb1.reject! { false }, "") end def sub_clear @bdb1.clear ; @array.clear assert_equal(@array.size, @bdb1.size, "") assert_equal(@array, @bdb1.to_a, "") end def sub_fill @bdb1.fill "32", 0, 99; @array.fill "32", 0, 99 assert_equal(@array.size, @bdb1.size, "") assert_equal(@array, @bdb1.to_a, "") @bdb1.fill "42"; @array.fill "42" assert_equal(@array.size, @bdb1.size, "") assert_equal(@array, @bdb1.to_a, "") 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) assert_equal(@bdb1.fill(k, i).to_a, @array.fill(k, i), "<#{iter} fill(#{i})>") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) assert_equal(@bdb1.fill(k, -i).to_a, @array.fill(k, -i), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) j = rand(@bdb1.size) assert_equal(@bdb1.fill(k, i, j).to_a, @array.fill(k, i, j), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) j = i + rand(@bdb1.size - i) assert_equal(@bdb1.fill(k, -i, j).to_a, @array.fill(k, -i, j), "") assert_equal(@bdb1.size, @array.size, "") reinject(60) if @bdb1.size < 20 end reinject(60) another = 0 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) j = i + rand(@bdb1.size - i) if ! @array.slice(i .. j) assert_raises(RangeError, "") { @bdb1.fill(k, i .. j) } another += 1 redo if another < 10 another = 0 next end assert_equal(@bdb1.fill(k, i .. j).to_a, @array.fill(k, i .. j), "") assert_equal(@bdb1.size, @array.size, "") another = 0 reinject(60) if @bdb1.size < 20 end another = 0 10.times do |iter| k = rand(@bdb1.size).to_s i = rand(@bdb1.size) j = 1 + rand(@bdb1.size - i) if ! @array.slice(-i .. -j) assert_raises(RangeError, "") { @bdb1.fill(k, -i .. -j) } another += 1 redo if another < 10 another = 0 next end assert_equal(@bdb1.fill(k, -i .. -j).to_a, @array.fill(k, -i .. -j), "") assert_equal(@bdb1.size, @array.size, "") another = 0 reinject(60) if @bdb1.size < 20 end reinject(60) if @bdb1.size < 60 assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") end def sub_include @bdb1.clear; @array.clear; reinject(99) assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") 100.times do k = rand(@bdb1.size + 20).to_s assert_equal(@array.include?(k), @bdb1.include?(k), "") end end def sub_replace @array.replace(('a' .. 'zz').to_a) @bdb1.replace(('a' .. 'zz').to_a) assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") end def sub_reopen @bdb1.close assert_kind_of(BDB1::Recnum, @bdb1 = BDB1::Recnum.new(tmpdir("aa"), "a"), "") assert_equal(@bdb1.size, @array.size, "") assert_equal(@bdb1.to_a, @array, "") end def sub_collect a = @bdb1.collect assert_equal(@array, a, "") a = @array.collect {|k| k + "!"} b = @bdb1.collect {|k| k + "!"} assert_equal(a, b, "") assert_equal(@bdb1.to_a, @array, "") a = @array.collect! {|k| k + "!"} b = @bdb1.collect! {|k| k + "!"} assert_equal(a, b, "") assert_equal(@bdb1.to_a, @array, "") end def sub_insert @array.insert(2, "1", "2", "3") @array.insert(-1, "4", "5") @array.insert(-4, "3", "5", "5", "5", "5") @bdb1.insert(2, 1, 2, 3) @bdb1.insert(-1, 4, 5) @bdb1.insert(-4, 3, 5, 5, 5, 5) assert_equal(@bdb1.to_a, @array, "") end def sub_flp assert_equal(@array.first, @bdb1.first, "") assert_equal(@array.last, @bdb1.last, "") @bdb1.concat(@array) @array.concat(@array) assert_equal(@bdb1.to_a, @array, "") assert_equal(@bdb1, @bdb1 << 12, "") @array << "12" assert_equal(@bdb1.to_a, @array, "") assert_equal(@array.pop, @bdb1.pop, "") @array.unshift("5", "6") @bdb1.unshift(5, 6) assert_equal(@bdb1.to_a, @array, "") assert_equal(@array.shift, @bdb1.shift, "") assert_equal(@bdb1.to_a, @array, "") assert_equal(0, @bdb1 <=> @array, "") end def sub_cmp assert_kind_of(BDB1::Recnum, bdb1 = BDB1::Recnum.new(tmpdir("bb"), "a"), "") assert_equal(true, bdb1.empty?, "") @array.each {|a| bdb1 << a} assert_equal(false, bdb1.empty?, "") assert_equal(0, @bdb1 <=> bdb1, "<=>") bdb1 << 12 assert_equal(1, bdb1 <=> @bdb1, "<=>") assert_equal(-1, @bdb1 <=> bdb1, "<=>") end def sub_compact assert_equal(@array.compact, @bdb1.compact, "") @array.compact! @bdb1.compact! assert_equal(@bdb1.to_a, @array, "") end def sub_close assert_equal(nil, @bdb1.close, "") end end