Commit graph

86 commits

Author SHA1 Message Date
zverok
b8d33df1d9 Add Enumerable#compact and Enumerator::Lazy#compact 2021-01-02 17:27:24 +09:00
卜部昌平
fa356a798a Enumerator.new: raise unless block given
Has been deprecated since c73b6bd7eb.
[Feature #17116] [ruby-dev:50945]
2020-12-22 13:52:03 +09:00
Yusuke Endoh
abdd3c5616 test/ruby/test_enumerator.rb: check the deprecation warning
by explicitly setting `Warning[:deprecated] = true`.
I removed "capture_io" at 79063d8cbf, but
it printed the warning when `RUBYOPT=-w`.

This change makes the warnings enabled explicitly, capture and check the
warning.
2020-09-25 23:45:42 +09:00
Yusuke Endoh
79063d8cbf test/ruby/test_enumerator.rb: remove capture_io that is no longer needed
The deprecation warning was disabled, and the code to check the warning
was removed at 996af2ce08, thus capture_io
is no longer needed.
2020-09-25 23:38:01 +09:00
Nobuyoshi Nakada
996af2ce08 Disable deprecation warning by the default [Feature #16345]
And `-w` option turns it on.
2020-09-25 09:50:33 +09:00
Jeremy Evans
a029b54ec7 Make Enumerator::Chain#each treat lambdas as lambda
Previously, lambdas were converted to procs because of how
rb_block_call works.  Switch to rb_funcall_with_block, which
handles procs as procs and lambdas as lambdas.

Fixes [Bug #15613]
2019-12-03 23:18:28 +02:00
Jeremy Evans
3073404e74 Add rb_enumeratorize_with_size_kw and related macros
Currently, there is not a way to create a sized enumerator in C
with a different set of arguments than provided by Ruby, and
correctly handle keyword arguments.  This function allows that.

The need for this is fairly uncommon, but it occurs at least in
Enumerator.produce, which takes arugments from Ruby but calls
rb_enumeratorize_with_size with a different set of arguments.
2019-09-30 07:06:42 -07:00
Akinori MUSHA
ac3e8834e0
Document and test Enumerator.produce
Co-authored-by: Victor Shepelev <zverok.offline@gmail.com>
2019-09-12 20:18:53 +09:00
Jeremy Evans
17af8bfce6 Make size on an infinite each_slice enumerator return Infinity
Fixes [Bug #15889]
2019-06-02 20:00:35 -07:00
Alfonso Jiménez
0acbdd1ed0
Adding Enumerable#filter_map
[Feature #15323]
Closes: https://github.com/ruby/ruby/pull/2017
2019-05-23 14:39:16 +09:00
knu
c2d3b8dfb4 Implement Enumerator::Yielder#to_proc
A Yielder object can now be directly passed to another method as a
block argument.

```ruby
enum = Enumerator.new { |y|
  Dir.glob("*.rb") { |file|
    File.open(file) { |f| f.each_line(&y) }
  }
}
```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-03-11 09:49:14 +00:00
nobu
483c7290f2 enumerator.c: fix inspect with the last empty hash
[ruby-core:90685] [Bug #15455]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-24 00:48:15 +00:00
knu
045b0e54d8 Implement Enumerator#+ and Enumerable#chain [Feature #15144]
They return an Enumerator::Chain object which is a subclass of
Enumerator, which represents a chain of enumerables that works as a
single enumerator.

```ruby
e = (1..3).chain([4, 5])
e.to_a #=> [1, 2, 3, 4, 5]

e = (1..3).each + [4, 5]
e.to_a #=> [1, 2, 3, 4, 5]
```

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-24 08:38:35 +00:00
knu
8717f0787d Set the size of a new enumerator created by Enumerator#each with arguments to nil
When each() takes arguments, it is never safe to assume that the iteration
would repeat the same number of times as with each() without any
argument.  Actually, there is no way to get the exact number, so the
size should be set to nil to denote that.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-22 11:23:56 +00:00
nobu
3367daf716 Tests of Enumerator::Yielder#yield with multiple arguments
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-09-18 08:30:24 +00:00
mrkn
f15069338d enumerator.c: Introduce Enumerator::ArithmeticSequence
This commit introduces new core class Enumerator::ArithmeticSequence.
Enumerator::ArithmeticSequence is a subclass of Enumerator, and
represents a number generator of an arithmetic sequence.

After this commit, Numeric#step and Range#step without blocks
returned an ArithmeticSequence object instead of an Enumerator.

This class introduces the following incompatibilities:

- You can create a zero-step ArithmeticSequence,
  and its size is not ArgumentError, but Infinity.
- You can create a negative-step ArithmeticSequence from a range.

[ruby-core:82816] [Feature #13904]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64205 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-06 09:08:28 +00:00
nobu
e537dc331e test_enumerator.rb: duplicate assertions
* test/ruby/test_enumerator.rb (test_uniq): remove assertions
  which ared duplicate of lazy enumerator tests in
  test_lazy_enumerator.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62735 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-13 02:43:04 +00:00
nobu
0faf018624 Bug Fix Enumerator::Lazy#uniq state for multiple call
* enumerator.c (lazy_uniq_i): create new hash for each calls.
  [Fix GH-1820]

Currently

	2.5.0-preview1 :001 > arr = (0..100).lazy.uniq{|i| i % 10}
	 => #<Enumerator::Lazy: #<Enumerator::Lazy: 0..100>:uniq>
	2.5.0-preview1 :002 > arr.to_a
	 => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
	2.5.0-preview1 :003 > arr.to_a
	 => []

Expected

arr.to_a to always return same output

From: Anmol Chopra <anmolchopra@rocketbox.in>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62731 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-13 01:00:08 +00:00
eregon
b1a8c64483 Add a new #filter alias for #select
* In Enumerable, Enumerator::Lazy, Array, Hash and Set
  [Feature #13784] [ruby-core:82285]
* Share specs for the various #select#select! methods and
  reuse them for #filter/#filter!.
* Add corresponding filter tests for select tests.
* Update NEWS.

[Fix GH-1824]

From: Alexander Patrick <adp90@case.edu>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-25 13:52:07 +00:00
shyouhei
b57915eddc Add FrozenError as a subclass of RuntimeError
FrozenError will be used instead of RuntimeError for exceptions
raised when there is an attempt to modify a frozen object. The
reason for this change is to differentiate exceptions related
to frozen objects from generic exceptions such as those generated
by Kernel#raise without an exception class.

From: Jeremy Evans <code@jeremyevans.net>
Signed-off-by: Urabe Shyouhei <shyouhei@ruby-lang.org>


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12 00:46:34 +00:00
nobu
4b7f531553 enum.c: check argument first
* enum.c (enum_cycle_size): check an argument before the size of
  the receiver, if it is given.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60668 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-11-05 23:32:50 +00:00
marcandre
dcb8a22f26 Fix size on Enumerable#cycle when the size is 0 [Bug #14082].
Patch by Kenichi Kamiya

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-11-05 22:14:25 +00:00
nobu
6882b35460 enumerator.c: Enumerator::Lazy#uniq
* enumerator.c (lazy_uniq): new method Enumerator::Lazy#uniq.
  [Feature #11090]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-07-20 08:44:08 +00:00
nobu
41f4317f45 test/ruby: suppress parser warnings
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-02-19 07:48:02 +00:00
naruse
3e92b635fb Add frozen_string_literal: false for all files
When you change this to true, you may need to add more tests.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16 05:07:31 +00:00
knu
f4c487173c Kernel#loop returns the result value of a finished iterator
* vm_eval.c (rb_f_loop): When a loop is stopped by a StopIteration
  exception, return what the enumerator has returned instead of
  nil. [ruby-core:71133] [Feature #11498]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-22 09:58:01 +00:00
nobu
4191a6b90d preserve encodings in error messages
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-09-28 02:40:46 +00:00
akr
fb2008a73a * test/lib/envutil.rb: Moved from test/ruby/.
* test/lib/find_executable.rb: Ditto.

* test/lib/memory_status.rb: Ditto.

* test/lib/test/unit.rb: require envutil.

* test/: Don't require envutil in test files.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48409 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-13 16:05:37 +00:00
nobu
21759a08b3 merge GH-558
* test/ruby/test_enumerator.rb (test_iterators): fix test for hash
  iterators.  [Fixes GH-558]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-03-10 01:51:45 +00:00
nobu
7f83b7872a Additional test coverage to Enumerator#peek.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-14 04:17:06 +00:00
nobu
7416073cde hash.c: rb_hash_reject without dup
* hash.c (rb_hash_reject): copy unrejected elements only to new hash,
  so that the change on the original receiver can affect.
  [ruby-core:58914] [Bug #9223]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44047 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-07 02:16:04 +00:00
nobu
520f0fec95 enumerator.c: should not store local variable address
* enumerator.c (enumerator_with_index): should not store local variable
  address to memoise the arguments.  it is invalidated after the return.
  [ruby-core:58692] [Bug #9178]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-30 07:25:17 +00:00
marcandre
ca7f52a32a * enumerator.c: Allow Enumerator size argument to be any callable.
Patch by Avdi Grimm. [bug #8641] [ruby-core:56032] [fix GH-362]

* test/ruby/test_enumerator.rb: Test for above

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-27 02:50:08 +00:00
knu
075752a836 Add a frozenness check to Enumerator::Generator#initialize.
* enumerator.c (generator_init): Ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42234 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-29 12:06:42 +00:00
knu
8cb0de91c4 Add a frozenness check to Enumerator#initialize.
* enumerator.c (enumerator_init): Add a frozenness check to
  prevent a frozen Enumerator object from being reinitialized with
  a different enumerable object.  This is the least we should do,
  and more fixes will follow. [Fixes GH-368] Patch by Kenichi
  Kamiya.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42233 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-29 12:06:39 +00:00
nobu
8a28e97ae9 enumerator.c: use VALUE
* enumerator.c (inspect_enumerator): use VALUE instead of mere char*
  by using rb_sprintf() and rb_id2str().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40805 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-05-18 02:05:17 +00:00
naruse
5f257cf403 * enumerator.c (enumerator_with_index): try to convert given offset to
integer. fix bug introduced in r39594.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-03-11 09:47:15 +00:00
nobu
4a429c11e1 enumerator.c: allow Bignum for with_index
* enumerator.c (enumerator_with_index_i): allow Bignum as offset, to
  get rid of conversion exception and integer overflow.
  [ruby-dev:47131] [Bug #8010]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-03-05 01:20:20 +00:00
knu
6c1bfbe478 Fix tests of rb_warning().
* test/ruby/envutil.rb (Test::Unit::Assertions#assert_warning)
  (Test::Unit::Assertions#assert_warn), test/ruby/envutil.rb,
  test/ruby/test_enumerator.rb, test/ruby/test_io_m17n.rb,
  test/ruby/test_regexp.rb, test/ruby/test_syntax.rb:
  assert_warn() and assert_warning() are reversed.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37836 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-24 17:14:06 +00:00
marcandre
52c50bf5f5 Revert of 37541 "* test/ruby/test_enumerator.rb: Add test to shed light upon the bug"
[#7298]
This reverts commit 0ab21f9572.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37609 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-10 04:03:30 +00:00
ayumin
0ab21f9572 * test/ruby/test_enumerator.rb: Add test to shed light upon the bug
which made by r37498. See http://bugs.ruby-lang.org/issues/7298

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-07 15:51:00 +00:00
marcandre
4437403426 * string.c: Support for String#{each_byte,each_char,each_codepoint}.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:15:45 +00:00
marcandre
3a4eb4dd39 * numeric.c (int_dotimes): Support for Integer#times.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37519 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:15:30 +00:00
marcandre
c2dc0dc1ce * numeric.c (int_upto, int_downto): Support for Integer#{down|up}to.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37518 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:15:15 +00:00
marcandre
faed90d814 * range.c: Support for range.step.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:15:00 +00:00
marcandre
34be3a5d90 * numeric.c (num_step): Support for Numeric#step.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:14:31 +00:00
marcandre
ce0bf9f43d * struct.c: Support for Struct's enumerators #size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:14:02 +00:00
marcandre
17c0aff0d6 * hash.c: Support for enumerators created by ENV:
each, each_value, ...
  [Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37512 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:13:48 +00:00
marcandre
19ed71c8d0 * hash.c: Support for enumerators created by Hash:
delete_if, reject!, ...
  [Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37511 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:13:33 +00:00
marcandre
cef054d5b2 * enum.c (enum_cycle): Support for Enumerable#cycle.size
[Feature #6636]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-06 17:13:19 +00:00