# 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 ContainerTest
  def test_clear
    DS_Test_Case.method_checked(:clear, @test_container)
    for i in 0...N do
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      l.clear
      assert l.size == 0
      assert l.length == 0
      l.each do |i|
        assert false
      end
    end
  end

  def test_size_and_length
    DS_Test_Case.method_checked(:size, @test_container)
    DS_Test_Case.method_checked(:length, @test_container)
    for i in 0...N do
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      assert_equal l.size, l.length
      assert_equal l.size, a.size
    end
  end

  def test_dup_and_clone
    DS_Test_Case.method_checked(:dup, @test_container)
    DS_Test_Case.method_checked(:clone, @test_container)
    [1, 2, 5, N].each do |i|
      a = generate_random_container(i, @analgous_container)
      l1 = generate_container_from_analgous(a)
      l1.taint
      l1.freeze
      l2 = l1.dup
      assert l1.frozen?
      assert !l2.frozen?
      assert l1.tainted?
      assert l2.tainted?
      assert_containers_equal(l1, l2)
      l3 = l1.clone
      assert l1.frozen?
      assert !l2.frozen?
      assert l3.frozen?
      assert l1.tainted?
      assert l2.tainted?
      assert l3.tainted?
      l2.clear
      assert_containers_equal(l1, l3)
      assert l1.size != 0
      assert l3.size != 0
    end
  end

  def test_inspect
    DS_Test_Case.method_checked(:inspect, @test_container)
    # TODO
  end

  def test_empty?
    DS_Test_Case.method_checked(:empty?, @test_container)
    for i in 0...N do
      a = generate_random_container(i, @analgous_container).dup
      l = generate_container_from_analgous(a)
      if i != 0 then
        assert !l.empty?
      else
        assert l.empty?
      end
      l.clear
      assert l.empty?
    end
  end
end
