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

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

                Dates

                • Created:
                  Updated:
                  Resolved: