|
|
@@ -6,9 +6,16 @@
|
|
|
*/
|
|
|
package net.ranides.assira.collection.query;
|
|
|
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
+import java.util.function.Predicate;
|
|
|
+import java.util.function.Supplier;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
import org.junit.Test;
|
|
|
import static net.ranides.assira.junit.NewAssert.*;
|
|
|
@@ -53,5 +60,52 @@ public class CQueryTest {
|
|
|
assertEquals(exp2, query.list());
|
|
|
assertEquals(exp2, query.list());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCache() throws IOException {
|
|
|
+ Path temp = File.createTempFile("cquery", ".bin").toPath();
|
|
|
+ Files.deleteIfExists(temp);
|
|
|
+
|
|
|
+ List<String> events = new ArrayList<>();
|
|
|
+
|
|
|
+ Supplier<Stream<Integer>> creator = () -> {
|
|
|
+ events.add("create");
|
|
|
+ return Arrays.stream(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
|
|
|
+ };
|
|
|
+
|
|
|
+ Predicate<Integer> filter1 = v -> {
|
|
|
+ events.add("A"+v);
|
|
|
+ return v % 2 == 0;
|
|
|
+ };
|
|
|
+ Predicate<Integer> filter2 = v -> {
|
|
|
+ events.add("B"+v);
|
|
|
+ return v < 6;
|
|
|
+ };
|
|
|
+
|
|
|
+ CQuery<Integer> query = CQuery.from(creator::get)
|
|
|
+ .filter(filter1)
|
|
|
+ .cache(temp)
|
|
|
+ .filter(filter2);
|
|
|
+
|
|
|
+ List<Integer> data1 = query.list();
|
|
|
+ List<Integer> data2 = query.list();
|
|
|
+ List<Integer> data3 = query.list();
|
|
|
+ List<Integer> data4 = query.list();
|
|
|
+
|
|
|
+ assertEquals(data1, data2);
|
|
|
+ assertEquals(data1, data3);
|
|
|
+ assertEquals(data1, data4);
|
|
|
+
|
|
|
+ List<String> expected = Arrays.asList(
|
|
|
+ "create",
|
|
|
+ "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10",
|
|
|
+ "B2", "B4", "B6", "B8", "B10",
|
|
|
+ "B2", "B4", "B6", "B8", "B10",
|
|
|
+ "B2", "B4", "B6", "B8", "B10",
|
|
|
+ "B2", "B4", "B6", "B8", "B10"
|
|
|
+ );
|
|
|
+ assertEquals(expected, events);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
}
|