### Question:
ColumnCombinationBitset implements Comparable<ColumnCombinationBitset> { public List<ColumnCombinationBitset> getNSubsetColumnCombinationsSupersetOf( ColumnCombinationBitset subSet, int n) { if ((this.size() - n) < (n - subSet.size())) { return getNSubsetColumnCombinationsSupersetOfTopDown(subSet, n); } return getNSubsetColumnCombinationsSupersetOfBottomUp(subSet, n); } ColumnCombinationBitset(int... columnIndeces);  ColumnCombinationBitset(List<Integer> columnIndices);  ColumnCombinationBitset(ColumnCombinationBitset columnCombination); ColumnCombinationBitset addColumn(int columnIndex); ColumnCombinationBitset removeColumn(int columnIndex); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString(); boolean isSubsetOf(ColumnCombinationBitset potentialSuperset); boolean isProperSubsetOf(ColumnCombinationBitset potentialProperSuperSet); boolean containsSubset(ColumnCombinationBitset potentialSubset); boolean containsProperSubset(ColumnCombinationBitset potentialProperSubset); List<ColumnCombinationBitset> getAllSubsets(); List<ColumnCombinationBitset> getNSubsetColumnCombinations(int n); List<ColumnCombinationBitset> getNSubsetColumnCombinationsSupersetOf(
    ColumnCombinationBitset subSet, int n); List<Integer> getSetBits(); List<Integer> getClearedBits(int numberOfColumns); ColumnCombinationBitset minus(
    ColumnCombinationBitset otherColumnCombination); List<ColumnCombinationBitset> getContainedOneColumnCombinations(); ColumnCombinationBitset union(ColumnCombinationBitset other); ColumnCombinationBitset intersect(ColumnCombinationBitset other); List<ColumnCombinationBitset> getDirectSupersets(int numberOfColumns); List<ColumnCombinationBitset> getDirectSupersets(ColumnCombinationBitset maximalSuperset); List<ColumnCombinationBitset> getDirectSubsets(); List<ColumnCombinationBitset> getDirectSubsetsSupersetOf(ColumnCombinationBitset subSet); int size(); boolean isEmpty(); ColumnCombination createColumnCombination(String relationName,
                                                   List<String> columnNames); ColumnCombinationBitset setAllBits(int dimension); boolean containsColumn(int columnIndex); boolean containsColumn(int... columnIndices); ColumnCombinationBitset invert(int size); @Override int compareTo(ColumnCombinationBitset other);  }### Answer:
@Test public void testGetNSubsetColumnCombinationsSupersetOf() { int[] superSetColumns = {0, 2, 3, 4}; ColumnCombinationBitset superSet = new ColumnCombinationBitset(superSetColumns); int[] subSetColumns = {2, 3}; ColumnCombinationBitset subSet = new ColumnCombinationBitset(subSetColumns); List<ColumnCombinationBitset> expected3SubsetColumnCombinations = new LinkedList<>(); int[] expected3SubSet1 = {0, 2, 3}; expected3SubsetColumnCombinations.add(new ColumnCombinationBitset(expected3SubSet1)); int[] expected3SubSet2 = {4, 2, 3}; expected3SubsetColumnCombinations.add(new ColumnCombinationBitset(expected3SubSet2)); List<ColumnCombinationBitset> actual3SubsetColumnCombinations = superSet.getNSubsetColumnCombinationsSupersetOf(subSet, 3); assertThat(actual3SubsetColumnCombinations, IsIterableContainingInAnyOrder.containsInAnyOrder( expected3SubsetColumnCombinations.toArray( new ColumnCombinationBitset[expected3SubsetColumnCombinations.size()]) ) ); }