ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
@ 2023-10-02 21:05 segiddins (Samuel Giddins) via ruby-core
  2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: segiddins (Samuel Giddins) via ruby-core @ 2023-10-02 21:05 UTC (permalink / raw
  To: ruby-core; +Cc: segiddins (Samuel Giddins)

Issue #19910 has been reported by segiddins (Samuel Giddins).

----------------------------------------
Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
https://bugs.ruby-lang.org/issues/19910

* Author: segiddins (Samuel Giddins)
* Status: Open
* Priority: Normal
* ruby -v: 3.2.2
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Given the following script:

```ruby
#!/usr/bin/env ruby

require 'set'

def enum(collection)
  i = 0
  collection.delete_if do
    i += 1
    raise ArgumentError if i == 6
    i.odd?
  end
rescue ArgumentError
  return collection
end

pp enum([0, 1, 2, 3, 4, 5, 6, 7])
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_h { [_1, _1] })
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_set)
```

It results in:

```
[1, 3, 5, 6, 7]
{1=>1, 3=>3, 5=>5, 6=>6, 7=>7}
#<Set: {0, 1, 2, 3, 4, 5, 6, 7}>
```

As you can see, when an exception is raise inside `delete_if` on Hash/Array, the already-considered elements are still removed from the array. For `Set`, no elements are deleted (due to the implementation that builds up an intermediary list of elements to delete, then removes them from the underlying hash afterwards). It would be very helpful if `Set#delete_if` behaved consistently with other core collection types



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:114944] Re: [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
  2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
@ 2023-10-03 16:52 ` Игорь Пятчиц via ruby-core
  2023-10-04  8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
  2023-10-13  4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: Игорь Пятчиц via ruby-core @ 2023-10-03 16:52 UTC (permalink / raw
  To: Ruby developers
  Cc: Игорь Пятчиц


[-- Attachment #1.1: Type: text/plain, Size: 1870 bytes --]

😉

вт, 3 окт. 2023 г. в 03:05, segiddins (Samuel Giddins) via ruby-core <
ruby-core@ml.ruby-lang.org>:

> Issue #19910 has been reported by segiddins (Samuel Giddins).
>
> ----------------------------------------
> Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
> https://bugs.ruby-lang.org/issues/19910
>
> * Author: segiddins (Samuel Giddins)
> * Status: Open
> * Priority: Normal
> * ruby -v: 3.2.2
> * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
> ----------------------------------------
> Given the following script:
>
> ```ruby
> #!/usr/bin/env ruby
>
> require 'set'
>
> def enum(collection)
>   i = 0
>   collection.delete_if do
>     i += 1
>     raise ArgumentError if i == 6
>     i.odd?
>   end
> rescue ArgumentError
>   return collection
> end
>
> pp enum([0, 1, 2, 3, 4, 5, 6, 7])
> pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_h { [_1, _1] })
> pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_set)
> ```
>
> It results in:
>
> ```
> [1, 3, 5, 6, 7]
> {1=>1, 3=>3, 5=>5, 6=>6, 7=>7}
> #<Set: {0, 1, 2, 3, 4, 5, 6, 7}>
> ```
>
> As you can see, when an exception is raise inside `delete_if` on
> Hash/Array, the already-considered elements are still removed from the
> array. For `Set`, no elements are deleted (due to the implementation that
> builds up an intermediary list of elements to delete, then removes them
> from the underlying hash afterwards). It would be very helpful if
> `Set#delete_if` behaved consistently with other core collection types
>
>
>
> --
> https://bugs.ruby-lang.org/
>  ______________________________________________
>  ruby-core mailing list -- ruby-core@ml.ruby-lang.org
>  To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
>  ruby-core info --
> https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/
>

[-- Attachment #1.2: Type: text/html, Size: 2716 bytes --]

[-- Attachment #2: Type: text/plain, Size: 264 bytes --]

 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:114946] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
  2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
  2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
@ 2023-10-04  8:22 ` stevegeek (Stephen Ierodiaconou) via ruby-core
  2023-10-13  4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: stevegeek (Stephen Ierodiaconou) via ruby-core @ 2023-10-04  8:22 UTC (permalink / raw
  To: ruby-core; +Cc: stevegeek (Stephen Ierodiaconou)

Issue #19910 has been updated by stevegeek (Stephen Ierodiaconou).


I was just looking at this, and it seems like the behaviour used to be as you expected but changed in v2.1, https://github.com/ruby/ruby/commit/2849ee5d18360f26b55643a2643a1c597376865d 

----------------------------------------
Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
https://bugs.ruby-lang.org/issues/19910#change-104817

* Author: segiddins (Samuel Giddins)
* Status: Open
* Priority: Normal
* ruby -v: 3.2.2
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Given the following script:

```ruby
#!/usr/bin/env ruby

require 'set'

def enum(collection)
  i = 0
  collection.delete_if do
    i += 1
    raise ArgumentError if i == 6
    i.odd?
  end
rescue ArgumentError
  return collection
end

pp enum([0, 1, 2, 3, 4, 5, 6, 7])
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_h { [_1, _1] })
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_set)
```

It results in:

```
[1, 3, 5, 6, 7]
{1=>1, 3=>3, 5=>5, 6=>6, 7=>7}
#<Set: {0, 1, 2, 3, 4, 5, 6, 7}>
```

As you can see, when an exception is raise inside `delete_if` on Hash/Array, the already-considered elements are still removed from the array. For `Set`, no elements are deleted (due to the implementation that builds up an intermediary list of elements to delete, then removes them from the underlying hash afterwards). It would be very helpful if `Set#delete_if` behaved consistently with other core collection types



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:115034] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash
  2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
  2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
  2023-10-04  8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
@ 2023-10-13  4:42 ` the_spectator (Akshay Birajdar) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: the_spectator (Akshay Birajdar) via ruby-core @ 2023-10-13  4:42 UTC (permalink / raw
  To: ruby-core; +Cc: the_spectator (Akshay Birajdar)

Issue #19910 has been updated by the_spectator (Akshay Birajdar).


Took a stab at it in https://github.com/ruby/ruby/pull/8642

----------------------------------------
Bug #19910: Set#delete_if behavior inconsistent with Array/Hash
https://bugs.ruby-lang.org/issues/19910#change-104908

* Author: segiddins (Samuel Giddins)
* Status: Open
* Priority: Normal
* ruby -v: 3.2.2
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Given the following script:

```ruby
#!/usr/bin/env ruby

require 'set'

def enum(collection)
  i = 0
  collection.delete_if do
    i += 1
    raise ArgumentError if i == 6
    i.odd?
  end
rescue ArgumentError
  return collection
end

pp enum([0, 1, 2, 3, 4, 5, 6, 7])
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_h { [_1, _1] })
pp enum([0, 1, 2, 3, 4, 5, 6, 7].to_set)
```

It results in:

```
[1, 3, 5, 6, 7]
{1=>1, 3=>3, 5=>5, 6=>6, 7=>7}
#<Set: {0, 1, 2, 3, 4, 5, 6, 7}>
```

As you can see, when an exception is raise inside `delete_if` on Hash/Array, the already-considered elements are still removed from the array. For `Set`, no elements are deleted (due to the implementation that builds up an intermediary list of elements to delete, then removes them from the underlying hash afterwards). It would be very helpful if `Set#delete_if` behaved consistently with other core collection types



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-10-13  4:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-02 21:05 [ruby-core:114943] [Ruby master Bug#19910] Set#delete_if behavior inconsistent with Array/Hash segiddins (Samuel Giddins) via ruby-core
2023-10-03 16:52 ` [ruby-core:114944] " Игорь Пятчиц via ruby-core
2023-10-04  8:22 ` [ruby-core:114946] " stevegeek (Stephen Ierodiaconou) via ruby-core
2023-10-13  4:42 ` [ruby-core:115034] " the_spectator (Akshay Birajdar) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).