Ranides Atterwim 4 роки тому
батько
коміт
95347b27c5

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/collection/iterators/IteratorUtils.java

@@ -889,7 +889,7 @@ public final class IteratorUtils {
         }
 
         public boolean hasNext() {
-            return hasNext && value != null;
+            return hasNext;
         }
 
         @Override

+ 4 - 8
assira.core/src/main/java/net/ranides/assira/collection/query/CQuery.java

@@ -225,10 +225,6 @@ public interface CQuery<T> extends Iterable<T> {
             return new CQArray<>(source);
         }
 
-        public final <A> CQuery<Object> array(A source) {
-            return new CQList<>(NativeArrayList.wrap(source));
-        }
-
         public final <T extends F> CQuery<T> iterable(Iterable<T> source) {
             return CQIterator.from(source::iterator);
         }
@@ -285,6 +281,10 @@ public interface CQuery<T> extends Iterable<T> {
             return list(() -> source.apply(param));
         }
 
+        public final <A> CQuery<Object> array(A source) {
+            return new CQList<>(NativeArrayList.wrap(source));
+        }
+
         public final <T extends F> CQuery<T> array(T[] source) {
             return new CQArray<>(source);
         }
@@ -309,10 +309,6 @@ public interface CQuery<T> extends Iterable<T> {
             return iterable(() -> IteratorUtils.infinite(source));
         }
 
-        public final <T extends F> CQuery<T> finite(CheckedSupplier<Optional<T>, ?> source) {
-            return iterable(() -> IteratorUtils.finite(source));
-        }
-
     }
 
     /**

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/collection/sets/OpenSet.java

@@ -147,7 +147,7 @@ public final class OpenSet<K> extends AOpenSet<K> {
 
     @Override
     protected int hash(K key) {
-        return key.hashCode();
+        return key==null ? 0 : key.hashCode();
     }
 
     @Override

+ 95 - 0
assira.core/src/test/java/net/ranides/assira/collection/query/CQueryBuilderTest.java

@@ -0,0 +1,95 @@
+package net.ranides.assira.collection.query;
+
+import net.ranides.test.CQueryAssert;
+import org.junit.Assert;
+import org.junit.Test;
+
+import net.ranides.assira.collection.iterators.EnumerationUtils;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Optional;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import static org.junit.Assert.*;
+
+public class CQueryBuilderTest {
+
+    @Test
+    public void fromEmpty() {
+        CQueryAssert.assertEquals(Collections.emptyList(), CQuery.from().empty());
+    }
+
+    @Test
+    public void fromOptional() {
+        CQueryAssert.assertEquals(Collections.emptyList(), CQuery.from().optional(null));
+        CQueryAssert.assertEquals(Collections.singletonList(1), CQuery.from().optional(1));
+    }
+
+    @Test
+    public void fromValue() {
+        CQueryAssert.assertEquals(Collections.singletonList(1), CQuery.from().value(1));
+        CQueryAssert.assertEqualsNull(Collections.singletonList(null), CQuery.from().value(null));
+    }
+
+    @Test
+    public void fromIterable() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().iterable(Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().iterable(() -> Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().iterable(3, (a) -> Arrays.asList(1,2,a)));
+
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().collection(Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().collection(() -> Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().collection(3, (a) -> Arrays.asList(1,2,a)));
+
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().list(Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().list(() -> Arrays.asList(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().list(3, (a) -> Arrays.asList(1,2,a)));
+    }
+
+    @Test
+    public void fromArray() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().array(new int[]{1,2,3}));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().array(new Integer[]{1,2,3}));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().array(() -> new Integer[]{1,2,3}));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().array(3, (a) -> new Integer[]{1,2,a}));
+    }
+
+    @Test
+    public void fromStream() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().stream(() -> Stream.of(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().stream(3, (a) -> Stream.of(1,2,a)));
+
+    }
+
+    @Test
+    public void fromEnumeration() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().enumeration(() -> EnumerationUtils.of(1,2,3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().enumeration(3, (a) -> EnumerationUtils.of(1,2,a)));
+    }
+
+    @Test
+    public void fromSpliterator() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().spliterator(() -> Arrays.asList(1,2,3).spliterator()));
+    }
+
+    @Test
+    public void fromQuery() {
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().query(() -> CQuery.from().values(1, 2, 3)));
+        CQueryAssert.assertEquals(Arrays.asList(1,2,3), CQuery.from().query(3, (a) -> CQuery.from().values(1, 2, a)));
+    }
+
+    @Test
+    public void fromInfinite() {
+        Random r = new Random(7);
+        CQuery<Integer> infinite = CQuery.from()
+            .infinite(() -> r.nextInt(10))
+            .limit(5);
+        Assert.assertEquals(Arrays.asList(6, 4, 5, 4, 0), infinite.list());
+        Assert.assertEquals(Arrays.asList(4, 8, 9, 0, 4), infinite.list());
+        Assert.assertEquals(Arrays.asList(0, 2, 8, 1, 5), infinite.list());
+    }
+}

+ 12 - 0
assira.core/src/test/java/net/ranides/test/CQueryAssert.java

@@ -18,6 +18,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -53,6 +54,17 @@ public class CQueryAssert {
         assertJoin(expected, query);
     }
 
+    public static <T> void assertEqualsNull(List<T> expected, CQuery<T> query) {
+        assertList(expected, query);
+        assertSet(expected, query);
+        assertArray(expected, query);
+        assertCollect(expected, query);
+
+        assertSpliterator(expected, query);
+        assertEach(expected, query);
+        assertSize(expected, query);
+    }
+
     public static <T> void assertList(List<T> expected, CQuery<T> query) {
         // direct 1st check
         Assert.assertEquals(expected, query.list());