From c877d306c47a998c06638e969f19e2bdd182b53c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 23 Oct 2024 15:08:24 +0200 Subject: [PATCH] Fix MoreGatherers.windowSliding() (#64) --- .../pivovarit/gatherers/WindowSlidingGatherer.java | 12 +++++++----- .../gatherers/blackbox/WindowSlidingTest.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/pivovarit/gatherers/WindowSlidingGatherer.java b/src/main/java/com/pivovarit/gatherers/WindowSlidingGatherer.java index 236e8e7..48b5689 100644 --- a/src/main/java/com/pivovarit/gatherers/WindowSlidingGatherer.java +++ b/src/main/java/com/pivovarit/gatherers/WindowSlidingGatherer.java @@ -38,12 +38,13 @@ public BiConsumer> downstream) { window[at++] = element; + emitted = false; if (at < windowSize) { return true; } else { @@ -52,17 +53,18 @@ boolean integrate(T element, Downstream> downstream) { System.arraycopy(oldWindow, step, newWindow, 0, windowSize - step); window = newWindow; at -= step; - firstWindow = false; + emitted = true; return downstream.push((List) Arrays.asList(oldWindow)); } } void finish(Downstream> downstream) { - if (firstWindow && at > 0 && !downstream.isRejecting()) { + if (!emitted && at > 0 && !downstream.isRejecting()) { var lastWindow = new Object[at]; System.arraycopy(window, 0, lastWindow, 0, at); window = null; at = 0; + emitted = true; downstream.push((List) Arrays.asList(lastWindow)); } } diff --git a/src/test/java/com/pivovarit/gatherers/blackbox/WindowSlidingTest.java b/src/test/java/com/pivovarit/gatherers/blackbox/WindowSlidingTest.java index 35a3838..219eda2 100644 --- a/src/test/java/com/pivovarit/gatherers/blackbox/WindowSlidingTest.java +++ b/src/test/java/com/pivovarit/gatherers/blackbox/WindowSlidingTest.java @@ -52,6 +52,6 @@ void shouldWindowSlidingWithStep1() { @Test void shouldWindowSlidingWithStep2() { assertThat(Stream.of(1, 2, 3, 4, 5).gather(MoreGatherers.windowSliding(2, 2))) - .containsExactly(of(1, 2), of(3, 4)); + .containsExactly(of(1, 2), of(3, 4), of(5)); } }