### Question:
SubSetGraph { public Set<ColumnCombinationBitset> getMinimalSubsets() { if (this.isEmpty()) { return new TreeSet<>(); } SubSetGraph graph = new SubSetGraph(); TreeSet<ColumnCombinationBitset> result = new TreeSet<>(); TreeSet<SubSetFindTask> openTasks = new TreeSet<>(); openTasks.add(new SubSetFindTask(this, 0, new ColumnCombinationBitset())); while (!openTasks.isEmpty()) { SubSetFindTask currentTask = openTasks.pollFirst(); if (currentTask.subGraph.subSetEnds) { if (!graph.containsSubset(currentTask.path)) { graph.add(currentTask.path); result.add(currentTask.path); } } else { for (int bitNumber : currentTask.subGraph.subGraphs.keySet()) { SubSetGraph subGraph = currentTask.subGraph.subGraphs.get(bitNumber); if (subGraph != null) { ColumnCombinationBitset path = new ColumnCombinationBitset(currentTask.path) .addColumn(bitNumber); openTasks .add(new SubSetFindTask(subGraph, bitNumber + 1, path)); } } } } return result; }  SubSetGraph add(ColumnCombinationBitset columnCombination); SubSetGraph addAll(Collection<ColumnCombinationBitset> columnCombinations); ArrayList<ColumnCombinationBitset> getExistingSubsets(
    ColumnCombinationBitset columnCombinationToQuery); boolean containsSubset(ColumnCombinationBitset superset); Set<ColumnCombinationBitset> getMinimalSubsets(); boolean isEmpty(); @Override boolean equals(Object o); @Override int hashCode();  }### Answer:
@Test public void testGetMinimalSubsets() { SubSetGraphFixture fixture = new SubSetGraphFixture(); SubSetGraph graph = fixture.getGraph(); Set<ColumnCombinationBitset> actualMinimalSubsets = graph.getMinimalSubsets(); assertThat(actualMinimalSubsets, IsIterableContainingInAnyOrder .containsInAnyOrder(fixture.getExpectedMinimalSubsets())); }