On 06.11.2010 17:08, Jean-Christophe Le Lann wrote:
> Hi
>
> I think I have discovered a random bug in the& (set intersection)
> operator in Arrays.
>
> It statistically appeared 37 times out of 200 executions of my program.
>
> on version ruby 1.9.1p376 (2009-12-07 revision 26041) [i686-linux]
> on version ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]
>
> I cannot deliver this full program (a source to source compiler) but
> here is a example :
>
> array1 = [#<While:0x8a15808>,
> #<Say:0x8b0c2c0 @str="2_1a">,
> #<Say:0x8b0c25c @str="2_1b">,
> #<If:0x8b0c1d0 @body=[#<Say:0x8b0c054 @str="2_1c">], @cond=true>]
> ========================================
> array2 = [#<Say:0x8b0c2c0 @str="2_1a">,
> #<Say:0x8b0c25c @str="2_1b">,
> #<If:0x8b0c1d0 @body=[#<Say:0x8b0c054 @str="2_1c">], @cond=true>,
> #<While:0x8b0c02c,
> #<If:0x8b0bb2c @body=[#<Say:0x8b0baa0 @str="2_3">], @cond=true>,
> #<Else:0x8b0ba78 @body=[#<Say:0x8b0b94c @str="2_3">]>]
> ========================================
> array1& array2 sometimes gives things like :
>
> [#<While:0x8a15808>,
> #<Say:0x8b0c2c0 @str="2_1a">,
> #<Say:0x8b0c25c @str="2_1b">,
> #<If:0x8b0c1d0 @body=[#<Say:0x8b0c054 @str="2_1c">], @cond=true>]
>
> while the expected result is
>
> [#<Say:0x8b0c2c0 @str="2_1a">,
> #<Say:0x8b0c25c @str="2_1b">,
> #<If:0x8b0c1d0 @body=[#<Say:0x8b0c054 @str="2_1c">], @cond=true>]
>
> How can I report that ? Thx
> JCLL
> (ps : using Set instead of Array, this works perfectly)
Well, Set's implementation and Array's are different. I believe Array
does not use #hash while Set does to efficiently find equivalent
instances. Can you show the code for Say#eql?, Say#hash and Say#==
(same for all other classes whose instances are put into your Arrays)?
I am not convinced yet that you found a bug.
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/