Project

General

Profile

Bug #15929 ยป array-minmax.patch

jeremyevans0 (Jeremy Evans), 06/17/2019 06:47 PM

View differences:

array.c
return result;
}
/*
* call-seq:
* ary.minmax -> [obj, obj]
* ary.minmax {| a,b | block } -> [obj, obj]
*
* Returns a two element array which contains the minimum and the
* maximum value in the array.
*
* Can be given an optional block to override the default comparison
* method <code>a <=> b</code>.
*/
static VALUE
rb_ary_minmax(VALUE ary)
{
if (rb_block_given_p()) {
return rb_call_super(0, NULL);
}
return rb_assoc_new(rb_ary_min(0, 0, ary), rb_ary_max(0, 0, ary));
}
static int
push_value(st_data_t key, st_data_t val, st_data_t ary)
{
......
rb_define_method(rb_cArray, "max", rb_ary_max, -1);
rb_define_method(rb_cArray, "min", rb_ary_min, -1);
rb_define_method(rb_cArray, "minmax", rb_ary_minmax, 0);
rb_define_method(rb_cArray, "uniq", rb_ary_uniq, 0);
rb_define_method(rb_cArray, "uniq!", rb_ary_uniq_bang, 0);
test/ruby/test_array.rb
assert_same(obj, [obj, 1.0].max)
end
def test_minmax
assert_equal([1, 3], [1, 2, 3, 1, 2].minmax)
assert_equal([3, 1], [1, 2, 3, 1, 2].minmax {|a,b| b <=> a })
cond = ->((a, ia), (b, ib)) { (b <=> a).nonzero? or ia <=> ib }
assert_equal([[3, 2], [1, 3]], [1, 2, 3, 1, 2].each_with_index.minmax(&cond))
ary = %w(albatross dog horse)
assert_equal(["albatross", "horse"], ary.minmax)
assert_equal(["dog", "albatross"], ary.minmax {|a,b| a.length <=> b.length })
assert_equal([1, 3], [3,2,1].minmax)
class << (obj = Object.new)
def <=>(x) 1 <=> x end
def coerce(x) [x, 1] end
end
ary = [obj, 1.0].minmax
assert_same(obj, ary[0])
assert_equal(obj, ary[1])
end
def test_uniq
a = []
b = a.uniq
    (1-1/1)