Ensure that the comparison succeeded [Bug #17205]

This commit is contained in:
Nobuyoshi Nakada 2020-10-02 10:57:07 +09:00
Родитель 4b41ee154f
Коммит 89ca842dcc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7CD2805BFA3770C6
2 изменённых файлов: 24 добавлений и 1 удалений

Просмотреть файл

@ -1518,7 +1518,9 @@ flo_cmp(VALUE x, VALUE y)
MJIT_FUNC_EXPORTED int MJIT_FUNC_EXPORTED int
rb_float_cmp(VALUE x, VALUE y) 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);
} }
/* /*

Просмотреть файл

@ -1648,6 +1648,13 @@ class TestArray < Test::Unit::TestCase
TEST TEST
end 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 def test_to_a
a = @cls[ 1, 2, 3 ] a = @cls[ 1, 2, 3 ]
a_id = a.__id__ a_id = a.__id__
@ -1768,6 +1775,13 @@ class TestArray < Test::Unit::TestCase
assert_same(obj, [obj, 1.0].min) assert_same(obj, [obj, 1.0].min)
end 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 def test_max
assert_equal(1, [1].max) assert_equal(1, [1].max)
assert_equal(3, [1, 2, 3, 1, 2].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) assert_same(obj, [obj, 1.0].max)
end 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 def test_minmax
assert_equal([3, 3], [3].minmax) assert_equal([3, 3], [3].minmax)
assert_equal([1, 3], [1, 2, 3, 1, 2].minmax) assert_equal([1, 3], [1, 2, 3, 1, 2].minmax)