Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-7608

Comparison of decimal subclasses of Number with == fails

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.4.4
    • 2.5.0-alpha-1
    • groovy-runtime
    • None

    Description

      If I create a subclass of Number that is implemented internally with a decimal value, e.g. using a BigDecimal even if I implement compareTo(), Groovy will convert my numbers to Integer before comparison.

      given:
      def one = MyNumberSubclass.of(1)
      def oneptone = MyNumberSubclass.of(1.1)
      
      then:
      one == onptone          // passes when it shouldn't!
      oneptone == oneptone    // fails when it shouldn't!
      

      This is a critical issue for anyone creating a DSL that has custom numeric types (e.g. for currency handling) and wants to compare them with ==.

      Specifically this problem occurs with implementations of NumberValue in JSR354 aka JavaMoney.

      I can provide some test cases for this if needed and am interesting in working to contribute a fix.

      Attachments

        Issue Links

          Activity

            People

              paulk Paul King
              msgilligan Sean Gilligan
              Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: