require 'test_helper'
require 'tins/xt'

module Tins
  class NamedTest < Test::Unit::TestCase

    def test_named_simple
      a = [ 1, 2, 3 ]
      a.named(:plus1, :map) { |x| x + 1 }
      assert_equal [ 2, 3, 4 ], a.plus1
      Array.named(:odd, :select) { |x| x % 2 == 1 }
      assert_equal [ 3 ], a.plus1.odd
    end

    if RUBY_VERSION >= '1.9'
      def foo(x, y, &block)
        block.call x * y
      end

      def test_more_complex
        Object.named(:foo_with_block, :foo) do |z|
          z ** 2
        end
        assert_equal foo(2, 3) { |z| z ** 2 }, foo_with_block(2, 3)
        Object.named(:foo_23, :foo, 2, 3)
        assert_equal foo(2, 3) { |z| z ** 2 }, foo_23 { |z| z ** 2 }
        Object.named(:foo_2, :foo, 2)
        assert_equal foo(2, 3) { |z| z ** 2 }, foo_2(3) { |z| z ** 2 }
      end
    end
  end
end
