1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Ensure that the comparison succeeded [Bug #17205]

This commit is contained in:
Nobuyoshi Nakada 2020-10-02 10:57:07 +09:00
parent 4b41ee154f
commit 89ca842dcc
No known key found for this signature in database
GPG key ID: 7CD2805BFA3770C6
2 changed files with 24 additions and 1 deletions

View file

@ -1518,7 +1518,9 @@ flo_cmp(VALUE x, VALUE y)
MJIT_FUNC_EXPORTED int
rb_float_cmp(VALUE x, VALUE y)
{
return NUM2INT(flo_cmp(x, y));
VALUE c = flo_cmp(x, y);
if (NIL_P(c)) rb_cmperr(x, y);
return NUM2INT(c);
}
/*

View file

@ -1648,6 +1648,13 @@ class TestArray < Test::Unit::TestCase
TEST
end
def test_sort_uncomparable
assert_raise(ArgumentError) {[1, Float::NAN].sort}
assert_raise(ArgumentError) {[1.0, Float::NAN].sort}
assert_raise(ArgumentError) {[Float::NAN, 1].sort}
assert_raise(ArgumentError) {[Float::NAN, 1.0].sort}
end
def test_to_a
a = @cls[ 1, 2, 3 ]
a_id = a.__id__
@ -1768,6 +1775,13 @@ class TestArray < Test::Unit::TestCase
assert_same(obj, [obj, 1.0].min)
end
def test_min_uncomparable
assert_raise(ArgumentError) {[1, Float::NAN].min}
assert_raise(ArgumentError) {[1.0, Float::NAN].min}
assert_raise(ArgumentError) {[Float::NAN, 1].min}
assert_raise(ArgumentError) {[Float::NAN, 1.0].min}
end
def test_max
assert_equal(1, [1].max)
assert_equal(3, [1, 2, 3, 1, 2].max)
@ -1791,6 +1805,13 @@ class TestArray < Test::Unit::TestCase
assert_same(obj, [obj, 1.0].max)
end
def test_max_uncomparable
assert_raise(ArgumentError) {[1, Float::NAN].max}
assert_raise(ArgumentError) {[1.0, Float::NAN].max}
assert_raise(ArgumentError) {[Float::NAN, 1].max}
assert_raise(ArgumentError) {[Float::NAN, 1.0].max}
end
def test_minmax
assert_equal([3, 3], [3].minmax)
assert_equal([1, 3], [1, 2, 3, 1, 2].minmax)