groovy
  1. groovy
  2. GROOVY-4916

Set equality fails if null elements are present

    Details

    • Type: Bug Bug
    • Status: Closed Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.8.0
    • Fix Version/s: 1.8.1
    • Component/s: None
    • Labels:
      None
    • Environment:
      java version "1.6.0_24"
      Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
      Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
      Ubuntu 10.04
    • Number of attachments :
      0

      Description

      The following assertions work as expected in groovy 1.7.10, but fail in groovy 1.8.0

      First case:

      def foo = [ "a", null ] as Set
      assert foo.equals( foo )
      

      Second case:

      def foo = [ "a", null ] as Set
      def bar = [ "a", null ] as Set
      assert foo == bar
      assert foo.equals( bar )
      

      foo == foo happens to work, which leads me to believe that == tests for object identity first.

      I can workaround by testing Set equality using brute force, but it's very surprising.

        Activity

        Hide
        Paul King added a comment -

        add code tags, move environment info

        Show
        Paul King added a comment - add code tags, move environment info
        Hide
        Paul King added a comment - - edited

        There was/is no special Set equals handling in Groovy 1.7, so it just gets the default Java equals (which happens to be AbstractSet#equals which works in your case but wouldn't work in other places where Groovy coerces values from related types, e.g. if you had 3 and 3.0 in two sets). Groovy 1.8.0 had special equals handling but it was broken for sets containing null. It has been fixed now. Thanks for filing the report.

        Show
        Paul King added a comment - - edited There was/is no special Set equals handling in Groovy 1.7, so it just gets the default Java equals (which happens to be AbstractSet#equals which works in your case but wouldn't work in other places where Groovy coerces values from related types, e.g. if you had 3 and 3.0 in two sets). Groovy 1.8.0 had special equals handling but it was broken for sets containing null. It has been fixed now. Thanks for filing the report.

          People

          • Assignee:
            Paul King
            Reporter:
            Ray A. Conner
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: