$ java GathererBasics (JDK 25) windowFixed(3) of 1..7 = [[1, 2, 3], [4, 5, 6], [7]] CHECK ok : windowFixed(3) groups into [1,2,3][4,5,6][7], last window is the short remainder CHECK ok : windowFixed(0) throws IllegalArgumentException: 'windowSize' must be greater than zero windowSliding(3) of 1..5 = [[1, 2, 3], [2, 3, 4], [3, 4, 5]] CHECK ok : windowSliding(3) of 5 elements produces exactly 3 overlapping windows, each length 3 CHECK ok : windowSliding(3) on a 2-element stream still emits one short window: [[1, 2]] CHECK ok : windowSliding(3) on an empty stream emits nothing fold building a String: [1][2][3][4] CHECK ok : fold("", acc+"[n]") over 1..4 builds "[1][2][3][4]" left to right CHECK ok : fold's output stream has exactly one element, the final accumulation scan running total of 1..5 = [1, 3, 6, 10, 15] CHECK ok : scan(0, +) over 1..5 emits every prefix sum: [1,3,6,10,15] fold(0,+) over 1..3 = [6] scan(0,+) over 1..3 = [1, 3, 6] CHECK ok : fold(0,+) over 1..3 emits just the final sum [6] CHECK ok : scan(0,+) over 1..3 emits every partial sum [1,3,6] exit=0