From 3cef89fc46252fad706b2cab5da453f0f0a37c77 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Thu, 30 Jun 2022 13:45:19 +0200 Subject: [PATCH] Add tests for functional utility methods --- .../org/pgpainless/util/CollectionUtils.java | 13 +++ .../pgpainless/util/CollectionUtilsTest.java | 98 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 pgpainless-core/src/test/java/org/pgpainless/util/CollectionUtilsTest.java diff --git a/pgpainless-core/src/main/java/org/pgpainless/util/CollectionUtils.java b/pgpainless-core/src/main/java/org/pgpainless/util/CollectionUtils.java index c1ed5a02..22c2b8f4 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/util/CollectionUtils.java +++ b/pgpainless-core/src/main/java/org/pgpainless/util/CollectionUtils.java @@ -100,6 +100,13 @@ public final class CollectionUtils { }; } + public static N reduce(Iterator iterator, Reducer reducer) { + while (iterator.hasNext()) { + reducer.accumulate(iterator.next()); + } + return reducer.getResult(); + } + @FunctionalInterface interface Filter { boolean accept(T t); @@ -110,6 +117,12 @@ public final class CollectionUtils { N mapValue(T item); } + interface Reducer { + void accumulate(T item); + + N getResult(); + } + /** * Add all items from the iterator to the collection. * diff --git a/pgpainless-core/src/test/java/org/pgpainless/util/CollectionUtilsTest.java b/pgpainless-core/src/test/java/org/pgpainless/util/CollectionUtilsTest.java new file mode 100644 index 00000000..0d4cc806 --- /dev/null +++ b/pgpainless-core/src/test/java/org/pgpainless/util/CollectionUtilsTest.java @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2022 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.util; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CollectionUtilsTest { + + @Test + public void testIteratorToList() { + List list = Arrays.asList("Hello", "World"); + Iterator iterator = list.iterator(); + + List toList = CollectionUtils.iteratorToList(iterator); + assertEquals(list, toList); + } + + @Test + public void testEmptyIteratorToList() { + Iterator emptyIterator = new Iterator() { + @Override + public boolean hasNext() { + return false; + } + + @Override + public String next() { + throw new NoSuchElementException(); + } + }; + + List list = CollectionUtils.iteratorToList(emptyIterator); + assertTrue(list.isEmpty()); + } + + @Test + public void testIteratorContains() { + Iterator iterator = Arrays.asList("Alpha", "Bravo", "Charlie", "Delta").iterator(); + assertTrue(CollectionUtils.contains(iterator,"Charlie")); + } + + @Test + public void testIteratorNotContains() { + Iterator iterator = Arrays.asList("Alpha", "Bravo", "Charlie", "Delta").iterator(); + assertFalse(CollectionUtils.contains(iterator,"Echo")); + } + + @Test + public void testMapStringsToNumbers() { + Iterator phonetics = Arrays.asList("Foxtrot", "Uniform", "Charlie", "Kilo").iterator(); + CollectionUtils.Mapper phoneticsMapper = + item -> item.toUpperCase().charAt(0); + Iterator characters = CollectionUtils.map(phonetics, phoneticsMapper); + CollectionUtils.Reducer concat = new CollectionUtils.Reducer() { + final StringBuilder sb = new StringBuilder(); + @Override + public void accumulate(Character item) { + sb.append(item); + } + + @Override + public String getResult() { + return sb.toString(); + } + }; + String explicit = CollectionUtils.reduce(characters, concat); + assertEquals(rot13("SHPX"), explicit); + } + + private String rot13(String string) { + char[] chars = string.toCharArray(); + for (int i = 0; i < chars.length; i++) { + chars[i] = (char) (65 + ((chars[i] - 52) % 26)); + } + return new String(chars); + } + + @Test + public void testAddAll() { + List list = new ArrayList<>(Arrays.asList("Alpha", "Bravo")); + Iterator iterator = Arrays.asList("Charlie", "Delta", "Echo").iterator(); + + CollectionUtils.addAll(iterator, list); + assertEquals(Arrays.asList("Alpha", "Bravo", "Charlie", "Delta", "Echo"), list); + } +}