require 'test/unit'

class Arity
  def a;           end
  def b(a);        end
  def c(*a);       end
  def d(a, b);     end
  def e(a, b, *c); end
  def f(a, &d);    end
  def n_args(symbol)
    method(symbol).arity
  end
end

class ArityTests < Test::Unit::TestCase
  def setup
    @demo = Arity.new
  end
  def test_fixed
    assert(@demo.n_args(:a), 0)
    assert(@demo.n_args(:b), 1)
    assert(@demo.n_args(:d), 2)
  end
  def test_variable
    assert(@demo.n_args(:c), -1)
    assert(@demo.n_args(:e), -3)
  end
  def test_code
    assert(@demo.n_args(:f), 1)
  end
end