random bug in the & (set intersection) operator in Arrays

Discussion in 'Ruby' started by Jean-Christophe Le Lann, Nov 6, 2010.

  1. 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)
    Jean-Christophe Le Lann, Nov 6, 2010
    #1
    1. Advertising

  2. Jean-Christophe Le Lann

    Ryan Davis Guest

    On Nov 6, 2010, at 9:08 AM, Jean-Christophe Le Lann =
    <> wrote:

    > How can I report that ?


    Just as you did, but with a code repro. Send it to ruby-core@ or file a =
    ticket on redmine.=
    Ryan Davis, Nov 6, 2010
    #2
    1. Advertising

  3. 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/
    Robert Klemme, Nov 6, 2010
    #3
  4. Le 07/11/2010 11:40, Robert Klemme a écrit :
    >> Hi
    >>
    >> I think I have discovered a random bug in the& (set intersection)
    >> operator in Arrays.
    >>

    >
    > 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.
    >

    Hello Robert

    I have no such methods. I simply though that the object IDs would be
    used for the intersection of the two arrays. Am I wrong ? Thx for your
    time and explanations !

    Regards
    JCLL
    Jean-Christophe Le Lann, Nov 7, 2010
    #4
  5. On 07.11.2010 12:06, Jean-Christophe Le Lann wrote:
    > Le 07/11/2010 11:40, Robert Klemme a écrit :


    >>> I think I have discovered a random bug in the& (set intersection)
    >>> operator in Arrays.

    >>
    >> 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.


    > I have no such methods. I simply though that the object IDs would be
    > used for the intersection of the two arrays. Am I wrong ? Thx for your
    > time and explanations !


    As long as you define equivalence solely based on object identity you do
    not need specific implementations of #hash and #eql?. You can find a
    bit of explanation here

    http://blog.rubybestpractices.com/posts/rklemme/018-Complete_Class.html

    Still it would be good if you could provide a simple test case that
    reproduces the problem. You need that for a bug report anyway.

    Kind regards

    robert

    --
    remember.guy do |as, often| as.you_can - without end
    http://blog.rubybestpractices.com/
    Robert Klemme, Nov 7, 2010
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. mkppk
    Replies:
    2
    Views:
    273
    Gabriel Genellina
    Dec 13, 2006
  2. Giulio Veronesi

    set of structs (intersection)

    Giulio Veronesi, Sep 20, 2005, in forum: C++
    Replies:
    1
    Views:
    421
    Karl Heinz Buchegger
    Sep 20, 2005
  3. globalrev
    Replies:
    4
    Views:
    742
    Gabriel Genellina
    Apr 20, 2008
  4. PerlFAQ Server
    Replies:
    0
    Views:
    252
    PerlFAQ Server
    Feb 2, 2011
  5. VK
    Replies:
    15
    Views:
    1,116
    Dr J R Stockton
    May 2, 2010
Loading...

Share This Page