# 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 EnumerableTest
  def test_to_s
    DS_Test_Case.method_checked(:to_s, @test_container)
    # TODO
  end

  def test_to_a
    DS_Test_Case.method_checked(:to_a, @test_container)
    for i in 0...N do
      a1 = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a1)
      a2 = l.to_a
      l.each do |i|
        assert a2.index(i)
      end
    end
  end

  def test_join
    DS_Test_Case.method_checked(:join, @test_container)
    sep = '%-%'
    for i in 0...N do
      if @analgous_container.method_defined?(:uniq) then
        a = generate_random_container(i, @analgous_container).uniq
      else
        a = generate_random_container(i, @analgous_container)
      end
      l = generate_container_from_analgous(a)
      s1 = a.join(sep)
      s2 = l.join(sep)
      a1 = s1.split(sep, -1).sort
      a2 = s2.split(sep, -1).sort
      assert_containers_equal(a1, a2)
    end
  end

  def test_eql?
    DS_Test_Case.method_checked(:eql?, @test_container)
    # TODO
  end

  def test_each
    DS_Test_Case.method_checked(:each, @test_container)
    [0, 1, 2, 5, N].each do |i|
      a = generate_random_container(i, @analgous_container)
      l = generate_container_from_analgous(a)
      # this uses a Continuation_Iterator, which calls each() on both
      # containers.
      assert_containers_equal(a, l)
    end
  end

  def test_enumerable
    DS_Test_Case.method_checked(:include?, @test_container)
    DS_Test_Case.method_checked(:member?, @test_container)
    DS_Test_Case.method_checked(:max, @test_container)
    DS_Test_Case.method_checked(:min, @test_container)
    DS_Test_Case.method_checked(:map, @test_container)
    DS_Test_Case.method_checked(:collect, @test_container)
    DS_Test_Case.method_checked(:reject, @test_container)
    DS_Test_Case.method_checked(:grep, @test_container)
    DS_Test_Case.method_checked(:find, @test_container)
    DS_Test_Case.method_checked(:find_all, @test_container)
    DS_Test_Case.method_checked(:detect, @test_container)
    DS_Test_Case.method_checked(:select, @test_container)
    DS_Test_Case.method_checked(:entries, @test_container)
    DS_Test_Case.method_checked(:each_with_index, @test_container)
    DS_Test_Case.method_checked(:sort, @test_container)
    # TODO
    # We can probably safely assume that Enumerable works.
  end
end
