package org.infinispan.functional; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.fail; import java.util.Random; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.function.Supplier; import org.infinispan.commons.api.functional.EntryView.ReadEntryView; import org.infinispan.commons.api.functional.EntryView.ReadWriteEntryView; import org.infinispan.commons.api.functional.FunctionalMap; import org.infinispan.functional.impl.FunctionalMapImpl; import org.infinispan.functional.impl.ReadOnlyMapImpl; import org.infinispan.functional.impl.ReadWriteMapImpl; import org.infinispan.functional.impl.WriteOnlyMapImpl; public final class FunctionalTestUtils { static final Random R = new Random(); static <K> FunctionalMap.ReadOnlyMap<K, String> ro(FunctionalMapImpl<K, String> fmap) { return ReadOnlyMapImpl.create(fmap); } static <K> FunctionalMap.WriteOnlyMap<K, String> wo(FunctionalMapImpl<K, String> fmap) { return WriteOnlyMapImpl.create(fmap); } static <K> FunctionalMap.ReadWriteMap<K, String> rw(FunctionalMapImpl<K, String> fmap) { return ReadWriteMapImpl.create(fmap); } static Supplier<Integer> supplyIntKey() { return () -> R.nextInt(Integer.MAX_VALUE); } public static <T> T await(CompletableFuture<T> cf) { try { return cf.get(); } catch (InterruptedException | ExecutionException e) { throw new Error(e); } } public static <K> void assertReadOnlyViewEmpty(K k, ReadEntryView<K, ?> ro) { assertEquals(k, ro.key()); assertFalse(ro.find().isPresent()); } public static <K, V> void assertReadOnlyViewEquals(K k, V expected, ReadEntryView<K, V> ro) { assertEquals(k, ro.key()); assertTrue(ro.find().isPresent()); assertEquals(expected, ro.find().get()); assertEquals(expected, ro.get()); } public static <K> void assertReadWriteViewEmpty(K k, ReadWriteEntryView<K, ?> rw) { assertEquals(k, rw.key()); assertFalse(rw.find().isPresent()); } public static <K, V> void assertReadWriteViewEquals(K k, V expected, ReadWriteEntryView<K, V> rw) { assertEquals(k, rw.key()); assertTrue(rw.find().isPresent()); assertEquals(expected, rw.find().get()); assertEquals(expected, rw.get()); try { rw.set(null); fail("Expected IllegalStateException since entry view cannot be modified outside lambda"); } catch (IllegalStateException e) { // Expected } } private FunctionalTestUtils() { // Do not instantiate } }