[270] | 1 | ##
|
---|
| 2 | # Numeric ISO Test
|
---|
| 3 |
|
---|
[439] | 4 | def assert_step(exp, receiver, args, inf: false)
|
---|
| 5 | act = []
|
---|
| 6 | ret = receiver.step(*args) do |i|
|
---|
| 7 | act << i
|
---|
| 8 | break if inf && exp.size == act.size
|
---|
| 9 | end
|
---|
| 10 | expr = "#{receiver.inspect}.step(#{args.map(&:inspect).join(', ')})"
|
---|
| 11 | assert "assert_step" do
|
---|
| 12 | assert_true(exp.eql?(act), "#{expr}: counters", assertion_diff(exp, act))
|
---|
| 13 | assert_same(receiver, ret, "#{expr}: return value") unless inf
|
---|
| 14 | end
|
---|
| 15 | end
|
---|
| 16 |
|
---|
[270] | 17 | assert('Numeric', '15.2.7') do
|
---|
[439] | 18 | assert_equal(Class, Numeric.class)
|
---|
[270] | 19 | end
|
---|
| 20 |
|
---|
| 21 | assert('Numeric#+@', '15.2.7.4.1') do
|
---|
| 22 | assert_equal(+1, +1)
|
---|
| 23 | end
|
---|
| 24 |
|
---|
| 25 | assert('Numeric#-@', '15.2.7.4.2') do
|
---|
| 26 | assert_equal(-1, -1)
|
---|
| 27 | end
|
---|
| 28 |
|
---|
| 29 | assert('Numeric#abs', '15.2.7.4.3') do
|
---|
| 30 | assert_equal(1, 1.abs)
|
---|
[439] | 31 | skip unless Object.const_defined?(:Float)
|
---|
[270] | 32 | assert_equal(1.0, -1.abs)
|
---|
| 33 | end
|
---|
| 34 |
|
---|
| 35 | assert('Numeric#/', '15.2.8.3.4') do
|
---|
| 36 | n = Class.new(Numeric){ def /(x); 15.1;end }.new
|
---|
| 37 |
|
---|
| 38 | assert_equal(2, 10/5)
|
---|
| 39 | assert_equal(0.0625, 1/16)
|
---|
| 40 | assert_equal(15.1, n/10)
|
---|
| 41 | assert_raise(TypeError){ 1/n }
|
---|
| 42 | assert_raise(TypeError){ 1/nil }
|
---|
| 43 | end
|
---|
| 44 |
|
---|
| 45 | # Not ISO specified
|
---|
| 46 |
|
---|
| 47 | assert('Numeric#**') do
|
---|
[439] | 48 | assert_equal(8, 2 ** 3)
|
---|
| 49 | assert_equal(-8, -2 ** 3)
|
---|
| 50 | assert_equal(1, 2 ** 0)
|
---|
| 51 | skip unless Object.const_defined?(:Float)
|
---|
| 52 | assert_equal(1.0, 2.2 ** 0)
|
---|
| 53 | assert_equal(0.5, 2 ** -1)
|
---|
| 54 | assert_equal(8.0, 2.0**3)
|
---|
[270] | 55 | end
|
---|
[439] | 56 |
|
---|
| 57 | assert('Numeric#step') do
|
---|
| 58 | assert_raise(ArgumentError) { 1.step(2, 0) { break } }
|
---|
| 59 | assert_step([2, 3, 4], 2, [4])
|
---|
| 60 | assert_step([10, 8, 6, 4, 2], 10, [1, -2])
|
---|
| 61 | assert_step([], 2, [1, 3])
|
---|
| 62 | assert_step([], -2, [-1, -3])
|
---|
| 63 | assert_step([10, 11, 12, 13], 10, [], inf: true)
|
---|
| 64 | assert_step([10, 7, 4], 10, [nil, -3], inf: true)
|
---|
| 65 |
|
---|
| 66 | skip unless Object.const_defined?(:Float)
|
---|
| 67 | inf = Float::INFINITY
|
---|
| 68 | assert_raise(ArgumentError) { 1.step(2, 0.0) { break } }
|
---|
| 69 | assert_step([2.0, 3.0, 4.0], 2, [4.0])
|
---|
| 70 | assert_step([7.0, 4.0, 1.0, -2.0], 7, [-4, -3.0])
|
---|
| 71 | assert_step([2.0, 3.0, 4.0], 2.0, [4])
|
---|
| 72 | assert_step([10.0, 11.0, 12.0, 13.0], 10.0, [], inf: true)
|
---|
| 73 | assert_step([10.0, 7.0, 4.0], 10, [nil, -3.0], inf: true)
|
---|
| 74 | assert_step([1.0], 1, [nil, inf])
|
---|
| 75 | assert_step([1.0], 1, [nil, -inf])
|
---|
| 76 | assert_step([1.0], 1, [3, inf])
|
---|
| 77 | assert_step([], 1, [-3, inf])
|
---|
| 78 | assert_step([], 1, [3, -inf])
|
---|
| 79 | assert_step([1.0], 1, [-3, -inf])
|
---|
| 80 | assert_step([1.0], 1, [inf, inf])
|
---|
| 81 | assert_step([], 1, [inf, -inf])
|
---|
| 82 | assert_step([], 1, [-inf, inf])
|
---|
| 83 | assert_step([1.0], 1, [-inf, -inf])
|
---|
| 84 | assert_step([], inf, [2])
|
---|
| 85 | assert_step([], inf, [-2])
|
---|
| 86 | assert_step([], inf, [2, 3])
|
---|
| 87 | assert_step([inf, inf, inf], inf, [2, -3], inf: true)
|
---|
| 88 | assert_step([], inf, [2, inf])
|
---|
| 89 | assert_step([inf], inf, [2, -inf])
|
---|
| 90 | assert_step([], inf, [-2, inf])
|
---|
| 91 | assert_step([inf], inf, [-2, -inf])
|
---|
| 92 | assert_step([], inf, [-2, 3])
|
---|
| 93 | assert_step([inf, inf, inf], inf, [-2, -3], inf: true)
|
---|
| 94 | assert_step([inf], inf, [inf])
|
---|
| 95 | assert_step([], inf, [-inf])
|
---|
| 96 | assert_step([inf], inf, [inf, inf])
|
---|
| 97 | assert_step([inf], inf, [inf, -inf])
|
---|
| 98 | assert_step([inf], inf, [-inf, -inf])
|
---|
| 99 | assert_step([-inf, -inf, -inf], -inf, [2], inf: true)
|
---|
| 100 | assert_step([-inf, -inf, -inf], -inf, [-2], inf: true)
|
---|
| 101 | assert_step([-inf, -inf, -inf], -inf, [2, 3], inf: true)
|
---|
| 102 | assert_step([], -inf, [2, -3])
|
---|
| 103 | assert_step([-inf], -inf, [2, inf])
|
---|
| 104 | assert_step([], -inf, [2, -inf])
|
---|
| 105 | assert_step([-inf], -inf, [-2, inf])
|
---|
| 106 | assert_step([], -inf, [-2, -inf])
|
---|
| 107 | assert_step([-inf, -inf, -inf], -inf, [-2, 3], inf: true)
|
---|
| 108 | assert_step([], -inf, [-2, -3])
|
---|
| 109 | assert_step([-inf, -inf, -inf], -inf, [inf], inf: true)
|
---|
| 110 | assert_step([-inf], -inf, [-inf])
|
---|
| 111 | assert_step([-inf], -inf, [inf, inf])
|
---|
| 112 | assert_step([], -inf, [inf, -inf])
|
---|
| 113 | assert_step([-inf], -inf, [-inf, -inf])
|
---|
| 114 | end
|
---|