Feature #16833 ยป add-enumerable-empty.patch
| enum.c | ||
|---|---|---|
| 
         } 
   | 
||
| 
     } 
   | 
||
| 
     /* 
   | 
||
| 
      *  call-seq: 
   | 
||
| 
      *     enum.empty? -> true or false 
   | 
||
| 
      * 
   | 
||
| 
      *  Returns true if enumerable is empty? 
   | 
||
| 
      * 
   | 
||
| 
      *    [].to_enum.empty?        #=> true 
   | 
||
| 
      *    [nil].to_enum.empty?     #=> false 
   | 
||
| 
      *    [false].to_enum.empty?   #=> false 
   | 
||
| 
      *    [1, 2, 3].to_enum.empty? #=> false 
   | 
||
| 
      * 
   | 
||
| 
      */ 
   | 
||
| 
     static VALUE 
   | 
||
| 
     enum_empty(VALUE obj) 
   | 
||
| 
     { 
   | 
||
| 
         long len = RARRAY_LEN(enum_to_a(0, 0, enum_take(obj, INT2FIX(1)))); 
   | 
||
| 
         return len == 0 ? Qtrue : Qfalse; 
   | 
||
| 
     } 
   | 
||
| 
     /* 
   | 
||
| 
      *  call-seq: 
   | 
||
| ... | ... | |
| 
         rb_define_method(rb_mEnumerable, "group_by", enum_group_by, 0); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "tally", enum_tally, 0); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "first", enum_first, -1); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "empty?", enum_empty, 0); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "all?", enum_all, -1); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "any?", enum_any, -1); 
   | 
||
| 
         rb_define_method(rb_mEnumerable, "one?", enum_one, -1); 
   | 
||
| test/ruby/test_enum.rb | ||
|---|---|---|
| 
         assert_equal(true, {a: 1, b: 2}.any?(->(kv) { kv == [:b, 2] })) 
   | 
||
| 
       end 
   | 
||
| 
       def test_empty 
   | 
||
| 
         assert_equal(true, [].to_enum.empty?) 
   | 
||
| 
         assert_equal(true, @empty.empty?) 
   | 
||
| 
         assert_equal(false, @obj.empty?) 
   | 
||
| 
         assert_equal(false, [nil].to_enum.empty?) 
   | 
||
| 
         assert_equal(false, [0].to_enum.empty?) 
   | 
||
| 
         assert_equal(false, [false].to_enum.empty?) 
   | 
||
| 
         assert_equal(false, (1..Float::INFINITY).lazy.empty?) 
   | 
||
| 
       end 
   | 
||
| 
       def test_any_with_unused_block 
   | 
||
| 
         assert_in_out_err [], <<-EOS, [], ["-:1: warning: given block not used"] 
   | 
||
| 
           [1, 23].any?(1) {|x| x == 1 } 
   | 
||