### Question:
FunAlgorithm { public void run(List<PositionListIndex> pliList) throws InputIterationException, CouldNotReceiveResultException, ColumnNameMismatchException { LinkedList<FunQuadruple> lkminusOne = new LinkedList<>(); lkminusOne.add(new FunQuadruple(new ColumnCombinationBitset(), Long.MAX_VALUE, new ColumnCombinationBitset(), new ColumnCombinationBitset())); LinkedList<FunQuadruple> lk = new LinkedList<>(); for (int i = 0; i < numberOfColumns; i++) { PositionListIndex currentPli = pliList.get(i); plis.put(new ColumnCombinationBitset(i), currentPli); lk.add(new FunQuadruple( new ColumnCombinationBitset(i), currentPli .getRawKeyError(), new ColumnCombinationBitset(i), new ColumnCombinationBitset(i))); if (!currentPli.isUnique()) { rDash.addColumn(i); } } while (!lk.isEmpty()) { computeClosure(lkminusOne); computeQuasiClosure(lk, lkminusOne); displayFD(lkminusOne); purePrune(lk, lkminusOne); lkminusOne = lk; lk = generateCandidates(lk); } computeClosure(lkminusOne); displayFD(lkminusOne); } FunAlgorithm(String relationName, List<String> columnNames,
                        FunctionalDependencyResultReceiver fdReceiver);  FunAlgorithm(String relationName, List<String> columnNames,
                        FunctionalDependencyResultReceiver fdReceiver,
                        UniqueColumnCombinationResultReceiver uccReceiver); void run(List<PositionListIndex> pliList);  }### Answer:
@Test public void testYieldsAllFDsAndUCCs() throws InputIterationException, CouldNotReceiveResultException, InputGenerationException, AlgorithmConfigurationException, ColumnNameMismatchException { AlgorithmTestFixture fixture = new AlgorithmTestFixture(); RelationalInput relationalInput = fixture.getInputGenerator().generateNewCopy(); FunAlgorithm funAlgorithm = new FunAlgorithm( relationalInput.relationName(), relationalInput.columnNames(), fixture.getFunctionalDependencyResultReceiver(), fixture.getUniqueColumnCombinationResultReceiver()); funAlgorithm.run(new PLIBuilder(relationalInput).getPLIList()); fixture.verifyFunctionalDependencyResultReceiver(); fixture.verifyUniqueColumnCombinationResultReceiver(); }
@Test public void testFunFastCount() throws CouldNotReceiveResultException, InputGenerationException, InputIterationException, AlgorithmConfigurationException, ColumnNameMismatchException { FunFastCountFixture fixture = new FunFastCountFixture(); RelationalInput relationalInput = fixture.getInputGenerator().generateNewCopy(); FunAlgorithm funAlgorithm = new FunAlgorithm( relationalInput.relationName(), relationalInput.columnNames(), fixture.getFunctionalDependencyResultReceiver()); funAlgorithm.run(new PLIBuilder(relationalInput).getPLIList()); fixture.verifyFunctionalDependencyResultReceiver(); }