From c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:08:27 +0200 Subject: add: graphs et rushs --- .../epita/assistants/seq/ExtendedStreamTest.java | 244 +++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 graphs/java/seq/src/test/java/fr/epita/assistants/seq/ExtendedStreamTest.java (limited to 'graphs/java/seq/src/test') diff --git a/graphs/java/seq/src/test/java/fr/epita/assistants/seq/ExtendedStreamTest.java b/graphs/java/seq/src/test/java/fr/epita/assistants/seq/ExtendedStreamTest.java new file mode 100644 index 0000000..b0bb911 --- /dev/null +++ b/graphs/java/seq/src/test/java/fr/epita/assistants/seq/ExtendedStreamTest.java @@ -0,0 +1,244 @@ +package fr.epita.assistants.seq; + +import java.lang.reflect.Modifier; +import java.time.Duration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; + +import fr.epita.assistants.seq.ExtendedStream.Pair; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Supplier; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class ExtendedStreamTest { + + private static ExtendedStream ctor(final List values) { + // FIXME: replace by your own implementation. + return Seq.of(values); + } + + private static ExtendedStream ctor(final TYPE... values) { + // FIXME: replace by your own implementation. + return Seq.of(values); + } + + private static ExtendedStream ctor(final Stream values) { + // FIXME: replace by your own implementation. + return Seq.of(values); + } + + private static DummyObject dummy(final int id, final String name) { + return new DummyObject(id, name); + } + + @Test + public void isSeqAnInterface() throws ClassNotFoundException { + Class seqClass = Class.forName("fr.epita.assistants.seq.Seq"); + int modifiers = seqClass.getModifiers(); + boolean isInterface = Modifier.isInterface(modifiers); + assertTrue(isInterface, "Seq must be an interface"); + } + + @Test + public void toMapKeyValue() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(dummy(1, "1"), dummy(2, "2"), dummy(2, "4"), dummy(3, "3")); + final Map map = es.toMap(DummyObject::getId, DummyObject::getName); + assertEquals(3, map.size()); + assertEquals("1", map.get(1)); + assertEquals("4", map.get(2)); + assertEquals("3", map.get(3)); + }); + } + + @Test + public void toMapKeyValueMap() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(dummy(1, "1"), dummy(2, "2"), dummy(2, "4"), dummy(3, "3")); + final Map source = new HashMap<>(); + source.put(42, new DummyObject(42, "me")); + final Map map = es.toMap(source, DummyObject::getId, it -> it); + assertEquals(4, map.size()); + assertEquals("1", map.get(1).name); + assertEquals("4", map.get(2).name); + assertEquals("3", map.get(3).name); + assertEquals("me", map.get(42).name); + }); + } + + @Test + public void toMapKey() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(dummy(1, "1"), dummy(2, "2"), dummy(2, "4"), dummy(3, "3")); + final Map map = es.toMap(DummyObject::getId); + assertEquals(3, map.size()); + assertEquals("1", map.get(1).name); + assertEquals("4", map.get(2).name); + assertEquals("3", map.get(3).name); + }); + } + + + @Test + public void toList() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(dummy(1, "1"), dummy(2, "2"), dummy(2, "4"), dummy(3, "3")); + final List list = es.toList(); + assertEquals(4, list.size()); + assertEquals("1", list.get(0).name); + assertEquals("2", list.get(1).name); + assertEquals("4", list.get(2).name); + assertEquals("3", list.get(3).name); + + }); + } + + @Test + public void toListWithList() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(dummy(1, "1"), dummy(2, "2"), dummy(2, "4"), dummy(3, "3")); + final List source = new ArrayList<>(); + source.add(new DummyObject(42, "me")); + final List list = es.toList(source); + assertEquals(5, list.size()); + assertEquals("me", list.get(0).name); + assertEquals("1", list.get(1).name); + assertEquals("2", list.get(2).name); + assertEquals("4", list.get(3).name); + assertEquals("3", list.get(4).name); + }); + } + + @Test + public void toSet() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(1, 2, 2, 3); + final Set set = es.toSet(); + assertEquals(3, set.size()); + assertTrue(set.contains(1)); + assertTrue(set.contains(2)); + assertTrue(set.contains(3)); + }); + } + + @Test + public void toSetWithSet() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(1, 2, 2, 3); + final Set source = new HashSet<>(); + source.add(1); + source.add(2); + source.add(42); + final Set set = es.toSet(source); + assertEquals(4, set.size()); + assertTrue(set.contains(1)); + assertTrue(set.contains(2)); + assertTrue(set.contains(3)); + assertTrue(set.contains(42)); + }); + } + + @Test + public void associateWithSupplier() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor("a", "b", "c"); + final List> list = es.associate(new Increment()).toList(); + + assertEquals(3, list.size()); + assertEquals(new Pair<>("a", 0), list.get(0)); + assertEquals(new Pair<>("b", 1), list.get(1)); + assertEquals(new Pair<>("c", 2), list.get(2)); + + + }); + } + + @Test + public void associateWithStream() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor("a", "b", "c"); + final List> list = es.associate(ctor(0, 1, 2, 3, 4, 5)).toList(); + + assertEquals(3, list.size()); + assertEquals(new Pair<>("a", 0), list.get(0)); + assertEquals(new Pair<>("b", 1), list.get(1)); + assertEquals(new Pair<>("c", 2), list.get(2)); + }); + } + + @Test + public void plus() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor("a", "b", "c").plus(ctor("d", "e", "f")); + assertEquals("abcdef", es.join()); + }); + } + + @Test + public void join() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor("a", "b", "c", "d", "e", "f"); + assertEquals("abcdef", es.join()); + }); + } + + @Test + public void joinWithDelimiter() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor("a", "b", "c", "d", "e", "f"); + assertEquals("a-b-c-d-e-f", es.join("-")); + }); + } + + @Test + public void partition() { + assertTimeoutPreemptively(Duration.ofSeconds(10), () -> { + final ExtendedStream es = ctor(0, 1, 2, 3, 4, 5, 6, 7); + final ExtendedStream>> partitions = es.partition(val -> val % 2 == 0); + final List>> list = partitions.toList(); + + + assertEquals(list.get(0).first ? "0246" : "1357", list.get(0).second.join()); + assertEquals(list.get(0).first ? "1357" : "0246", list.get(1).second.join()); + }); + } + + static class DummyObject { + public final Integer id; + public final String name; + + public DummyObject(final Integer id, final String name) { + this.id = id; + this.name = name; + } + + public Integer getId() { + return id; + } + + public String getName() { + return name; + } + } + + + static class Increment implements Supplier { + private int increment = 0; + + @Override + public Integer get() { + return increment++; + } + } +} -- cgit v1.2.3