Files
mruby-mruby/test/t/numeric.rb
T
KOBAYASHI Shuji 44381f0a0c Refine message to skip in nested assert
- I think "Info" is used only to `skip`, so change to "Skip".
- Changed the default value of `assert` and specify the argument explicitly
  at the caller of `assert` because it is unnatural "Assertion failed" is
  output even though the assertion doesn't fail.

== Example:

  def assert_foo(exp, act)
    assert do
      assert_equal exp[0], act[0]
      assert_equal exp[1], act[1]
    end
  end

  def assert_bar(exp, act)
    assert do
      skip
    end
  end

  def assert_baz(exp, act)
    assert do
      assert_equal exp, act
      assert_bar exp, act
    end
  end

  assert 'test#skip_in_nested_assert' do
    assert_baz 1, 1
  end

  === Before this patch:

    ?..
    Info: test#skip_in_nested_assert (core)
     - Assertion[1]
        Info: Assertion failed (core)
         - Assertion[1-2]
            Skip: Assertion failed (core)
      Total: 3
         OK: 2
         KO: 0
      Crash: 0
    Warning: 0
       Skip: 1

  === After this patch:

    ???
    Skip: test#skip_in_nested_assert (core)
     - Assertion[1]
        Skip: assert (core)
         - Assertion[1-2]
            Skip: assert (core)
      Total: 3
         OK: 0
         KO: 0
      Crash: 0
    Warning: 0
       Skip: 3
2019-07-30 13:05:01 +09:00

115 lines
3.5 KiB
Ruby

##
# Numeric ISO Test
def assert_step(exp, receiver, args, inf: false)
act = []
ret = receiver.step(*args) do |i|
act << i
break if inf && exp.size == act.size
end
expr = "#{receiver.inspect}.step(#{args.map(&:inspect).join(', ')})"
assert "assert_step" do
assert_true(exp.eql?(act), "#{expr}: counters", assertion_diff(exp, act))
assert_same(receiver, ret, "#{expr}: return value") unless inf
end
end
assert('Numeric', '15.2.7') do
assert_equal(Class, Numeric.class)
end
assert('Numeric#+@', '15.2.7.4.1') do
assert_equal(+1, +1)
end
assert('Numeric#-@', '15.2.7.4.2') do
assert_equal(-1, -1)
end
assert('Numeric#abs', '15.2.7.4.3') do
assert_equal(1, 1.abs)
skip unless Object.const_defined?(:Float)
assert_equal(1.0, -1.abs)
end
assert('Numeric#/', '15.2.8.3.4') do
n = Class.new(Numeric){ def /(x); 15.1;end }.new
assert_equal(2, 10/5)
assert_equal(0.0625, 1/16)
assert_equal(15.1, n/10)
assert_raise(TypeError){ 1/n }
assert_raise(TypeError){ 1/nil }
end
# Not ISO specified
assert('Numeric#**') do
assert_equal(8, 2 ** 3)
assert_equal(-8, -2 ** 3)
assert_equal(1, 2 ** 0)
skip unless Object.const_defined?(:Float)
assert_equal(1.0, 2.2 ** 0)
assert_equal(0.5, 2 ** -1)
assert_equal(8.0, 2.0**3)
end
assert('Numeric#step') do
assert_raise(ArgumentError) { 1.step(2, 0) { break } }
assert_step([2, 3, 4], 2, [4])
assert_step([10, 8, 6, 4, 2], 10, [1, -2])
assert_step([], 2, [1, 3])
assert_step([], -2, [-1, -3])
assert_step([10, 11, 12, 13], 10, [], inf: true)
assert_step([10, 7, 4], 10, [nil, -3], inf: true)
skip unless Object.const_defined?(:Float)
inf = Float::INFINITY
assert_raise(ArgumentError) { 1.step(2, 0.0) { break } }
assert_step([2.0, 3.0, 4.0], 2, [4.0])
assert_step([7.0, 4.0, 1.0, -2.0], 7, [-4, -3.0])
assert_step([2.0, 3.0, 4.0], 2.0, [4])
assert_step([10.0, 11.0, 12.0, 13.0], 10.0, [], inf: true)
assert_step([10.0, 7.0, 4.0], 10, [nil, -3.0], inf: true)
assert_step([1.0], 1, [nil, inf])
assert_step([1.0], 1, [nil, -inf])
assert_step([1.0], 1, [3, inf])
assert_step([], 1, [-3, inf])
assert_step([], 1, [3, -inf])
assert_step([1.0], 1, [-3, -inf])
assert_step([1.0], 1, [inf, inf])
assert_step([], 1, [inf, -inf])
assert_step([], 1, [-inf, inf])
assert_step([1.0], 1, [-inf, -inf])
assert_step([], inf, [2])
assert_step([], inf, [-2])
assert_step([], inf, [2, 3])
assert_step([inf, inf, inf], inf, [2, -3], inf: true)
assert_step([], inf, [2, inf])
assert_step([inf], inf, [2, -inf])
assert_step([], inf, [-2, inf])
assert_step([inf], inf, [-2, -inf])
assert_step([], inf, [-2, 3])
assert_step([inf, inf, inf], inf, [-2, -3], inf: true)
assert_step([inf], inf, [inf])
assert_step([], inf, [-inf])
assert_step([inf], inf, [inf, inf])
assert_step([inf], inf, [inf, -inf])
assert_step([inf], inf, [-inf, -inf])
assert_step([-inf, -inf, -inf], -inf, [2], inf: true)
assert_step([-inf, -inf, -inf], -inf, [-2], inf: true)
assert_step([-inf, -inf, -inf], -inf, [2, 3], inf: true)
assert_step([], -inf, [2, -3])
assert_step([-inf], -inf, [2, inf])
assert_step([], -inf, [2, -inf])
assert_step([-inf], -inf, [-2, inf])
assert_step([], -inf, [-2, -inf])
assert_step([-inf, -inf, -inf], -inf, [-2, 3], inf: true)
assert_step([], -inf, [-2, -3])
assert_step([-inf, -inf, -inf], -inf, [inf], inf: true)
assert_step([-inf], -inf, [-inf])
assert_step([-inf], -inf, [inf, inf])
assert_step([], -inf, [inf, -inf])
assert_step([-inf], -inf, [-inf, -inf])
end