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

GroovyCollections.combinations(Iterable) exhibits incorrect (asymmetric) behavior

    XMLWordPrintableJSON

Details

    Description

      Issue

      When GroovyCollections.combinations() is invoked on a collection of iterables with at least one empty iterable, the expected return value is an empty list of combinations.

      Instead, in version 2.4.15 (and I am guessing in earlier versions at least since 2.2.0), the return value of combinations() is sensitive to the order of iterables in the input collection.  Here are two instances of such behavior.

      Repro

      groovy:000> assert [[1,3], []].combinations() == [[], [1,3]].combinations()
      ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
      assert [[1,3], []].combinations() == [[], [1,3]].combinations()
                         |              |              |
                         []             false          [[1], [3]]

       

      groovy:000> assert [[1,3], [2], []].combinations() == [[1,3], [], [2]].combinations()
      ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
      assert [[1,3], [2], []].combinations() == [[1,3], [], [2]].combinations()
                              |              |                   |
                              []             false               [[2]]

      Fix

      Add a short-circuiting check at the start of combinations(Iterable) method to return an empty list of combination if any of the input iterables are empty.

      Attachments

        Issue Links

          Activity

            People

              paulk Paul King
              rvprasad Venkatesh-Prasad Ranganath
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: