require 'test/unit' require 'splay' class SplayTreeTest < Test::Unit::TestCase def setup @keys = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] @t = SplayTree.new @keys.each do |k| @t[k] = k * 2 end end def test_inserts @keys.each do |k| # puts @t assert_equal k * 2, @t[k] end end def test_reverse_inserts @keys.reverse.each do |k| assert_equal k * 2, @t[k] end end def test_random 100.times do i = rand(9) assert_equal i * 2, @t[i] end end def test_lookup_speed n = Time.now 1000.times do i = rand(9) assert_equal i * 2, @t[i] end base = Time.now - n 10000.times do i = rand(1000) @t[i] = i * 2 @keys << i end n = Time.now 1000.times do i = @keys[rand(@keys.size)] assert_equal i*2, @t[i] end diff = Time.now - n assert diff.to_f / base.to_f < 5, "it took #{diff} seconds with a big tree, and #{base} seconds with a small one" end end