# Ruby Treasures 0.1
# Copyright (C) 2001 Paul Brannan <paul@atdesk.com>
# 
# You may distribute this software under the same terms as Ruby (see the file
# COPYING that was distributed with this library).
# 
module PairEnumerableTest
  def test_has_key_has_value
    DS_Test_Case.method_checked(:has_value?, @test_container)
    DS_Test_Case.method_checked(:value?, @test_container)
    DS_Test_Case.method_checked(:has_key?, @test_container)
    DS_Test_Case.method_checked(:key?, @test_container)
    DS_Test_Case.method_checked(:include?, @test_container)
    DS_Test_Case.method_checked(:member?, @test_container)
    [0, 1, 2, 5, N-1, N].each do |i|
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      a.each do |key, value|
        assert l.has_key?(key)
        if not key.nil? then
          if a.has_key?(key.succ) then
            assert l.has_key?(key.succ)
            assert l.key?(key.succ)
            assert l.include?(key.succ)
            assert l.member?(key.succ)
          end
        end
        assert l.has_value?(value)
        if not value.nil? then
          if a.has_value?(value.succ) then
            assert l.has_value?(value.succ)
            assert l.value?(value.succ)
          end
        end
      end
    end
  end

  def test_each_key_and_each_value
    DS_Test_Case.method_checked(:each_key, @test_container)
    DS_Test_Case.method_checked(:each_value, @test_container)
    [0, 1, 2, 5, N-1, N].each do |i|
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      assert_containers_equal(a, l, :each_key)
      assert_containers_equal(a, l, :each_value)
    end
  end

  def test_keys_and_values
    DS_Test_Case.method_checked(:keys, @test_container)
    DS_Test_Case.method_checked(:values, @test_container)
    for i in 0...N do
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      assert_containers_equal(a.keys, l.keys)
      assert_containers_equal(a.values, l.values)
    end
  end
end
