diff options
author | Nobuyoshi Nakada <[email protected]> | 2023-01-15 13:03:27 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2023-01-15 13:03:27 +0900 |
commit | 71ce7e1825c5b8fe08dd96cd77c6a379afd34256 (patch) | |
tree | 58ddc2eed52edc772fa0a21704d1c24d7aa81a22 /test/ruby/test_integer_comb.rb | |
parent | 1ddeb7473d231fa68bd972442937e9fb5c994cb5 (diff) |
[Bug #19335] `Integer#remainder` should respect `#coerce` (#7120)
Also `Numeric#remainder` should.
Notes
Notes:
Merged-By: mrkn <[email protected]>
Diffstat (limited to 'test/ruby/test_integer_comb.rb')
-rw-r--r-- | test/ruby/test_integer_comb.rb | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/test/ruby/test_integer_comb.rb b/test/ruby/test_integer_comb.rb index 1ad13dd31b..150f45cfd7 100644 --- a/test/ruby/test_integer_comb.rb +++ b/test/ruby/test_integer_comb.rb @@ -408,19 +408,32 @@ class TestIntegerComb < Test::Unit::TestCase end def test_remainder + coerce = EnvUtil.labeled_class("CoerceNum") do + def initialize(num) + @num = num + end + def coerce(other) + [other, @num] + end + def inspect + "#{self.class.name}(#@num)" + end + alias to_s inspect + end + VS.each {|a| - VS.each {|b| - if b == 0 + (VS + VS.map {|b| [coerce.new(b), b]}).each {|b, i = b| + if i == 0 assert_raise(ZeroDivisionError) { a.divmod(b) } else - r = a.remainder(b) + r = assert_nothing_raised(ArgumentError, "#{a}.remainder(#{b})") {a.remainder(b)} assert_kind_of(Integer, r) if a < 0 - assert_operator(-b.abs, :<, r, "#{a}.remainder(#{b})") + assert_operator(-i.abs, :<, r, "#{a}.remainder(#{b})") assert_operator(0, :>=, r, "#{a}.remainder(#{b})") elsif 0 < a assert_operator(0, :<=, r, "#{a}.remainder(#{b})") - assert_operator(b.abs, :>, r, "#{a}.remainder(#{b})") + assert_operator(i.abs, :>, r, "#{a}.remainder(#{b})") else assert_equal(0, r, "#{a}.remainder(#{b})") end |