spec icon indicating copy to clipboard operation
spec copied to clipboard

Need specs for each_with_index + Enumerable method interaction

Open headius opened this issue 4 months ago • 1 comments

There are at least three cases from jruby/jruby#8345 where an interaction between an each_with_index Enumerator and an Enumerable method was or is broken in JRuby:

  • to_h
  • uniq
  • zip

Of these, we've fixed uniq and I have a fix in process for to_h but I'm not sure where to put specs for this kind of interaction.

My first thought was in Enumerable specs, since that's where I had to fix things, but I have not come up with a reproduction that doesn't use an each_with_index enumerator. All cases should be specified, though only a few exhibited this differing behavior between CRuby and JRuby.

Running the same example script against TruffleRuby shows similar issues, so I think getting these cases spec'ed would benefit all impls:

$ diff truffleruby_enum_args.txt ruby_enum_args.txt                  
1c1
< truffleruby 24.2.1, like ruby 3.3.7, Oracle GraalVM Native [arm64-darwin20]
---
> ruby 3.3.3 (2024-06-12 revision f1c7b6f435) [arm64-darwin23]
25c25
< filter_map [[1, 2], 0]
---
> filter_map [1, 2]
65c65
< to_h [[1, 2], 0]
---
> to_h [1, 2]
67c67
< uniq [[1, 2], 0]
---
> uniq [1, 2]
70c70
< zip [[[1, 2], 0]]
---
> zip [[1, 2], 0]

It's also possible CRuby is wrong to have special behavior for these methods.

headius avatar Aug 20 '25 17:08 headius

Wrong first link I think? I think it might be worth to discuss on https://bugs.ruby-lang.org/, though presumably the behavior of CRuby is already relied on and cannot really be changed, so it's also fine to spec the current behavior in parallel. PR(s) welcome.

eregon avatar Aug 20 '25 20:08 eregon