### Question:
Wcc extends Algorithm<Wcc, DisjointSetStruct> { @Override public DisjointSetStruct compute() { progressLogger.logMessage(":: Start"); long nodeCount = graph.nodeCount(); DisjointSetStruct dss = config.isIncremental() ? new HugeAtomicDisjointSetStruct(nodeCount, initialComponents, tracker, config.concurrency()) : new HugeAtomicDisjointSetStruct(nodeCount, tracker, config.concurrency()); final Collection<Runnable> tasks = new ArrayList<>(threadSize); for (long i = 0L; i < this.nodeCount; i += batchSize) { WCCTask wccTask = Double.isNaN(threshold()) || threshold() == 0 ? new WCCTask(dss, i) : new WCCWithThresholdTask(threshold(), dss, i); tasks.add(wccTask); } ParallelUtil.run(tasks, executor); progressLogger.logMessage(":: Finished"); return dss; } Wcc(
        Graph graph,
        ExecutorService executor,
        int minBatchSize,
        WccBaseConfig config,
        ProgressLogger progressLogger,
        AllocationTracker tracker
    ); static MemoryEstimation memoryEstimation(boolean incremental); @Override DisjointSetStruct compute(); @Override Wcc me(); @Override void release(); double threshold();  }### Answer:
@Test void shouldLogProgress() { var graph = createTestGraph(Orientation.NATURAL); var testLogger = new TestProgressLogger(graph.relationshipCount(), "Wcc", 2); new Wcc( graph, Pools.DEFAULT, communitySize() / 4, ImmutableWccStreamConfig.builder().concurrency(2).build(), testLogger, AllocationTracker.empty() ).compute(); List<AtomicLong> progresses = testLogger.getProgresses(); assertEquals(1, progresses.size()); assertEquals(graph.relationshipCount(), progresses.get(0).get()); assertTrue(testLogger.containsMessage(TestLog.INFO, ":: Start")); assertTrue(testLogger.containsMessage(TestLog.INFO, ":: Finished")); }