@Override public NonEmptyList<T> append(T value) { return of(head, tail.append(value)); }
default NonEmptyList<E> orElseInvalid(E alt){ return fold(t->t,a->NonEmptyList.of(alt)); } default Validated<E,T> orElseUseAccumulating(Supplier<Validated<E, T>> alt) {
default NonEmptyList<T> nonEmptyList(T alt){ return NonEmptyList.of(fold(s->s,()->alt)); } default NonEmptyList<T> nonEmptyListGet(Supplier<T> alt){
@Override public NonEmptyList<T> appendAll(Iterable<? extends T> value) { return of(head,tail.appendAll(value)); }
@Override public NonEmptyList<T> reverse() { return of(head).prependAll(tail); }
public <R> NonEmptyList<R> map(Function<? super T, ? extends R> fn) { return NonEmptyList.of(fn.apply(head),tail.map(fn)); }
default NonEmptyList<T> nonEmptyListGet(Supplier<T> alt){ return NonEmptyList.of(orElseGet(alt)); }
public static <E,T> Validated<E,T> invalid(E e){ return new Invalid<>(Either.left(NonEmptyList.of(e))); } public static <E,T> Validated<E,T> invalid(NonEmptyList<E> nel){
@Test public void reduceTest() { assertThat(NonEmptyList.of(1, 2, 3, 4) .reduce(Semigroups.intSum),equalTo(10)); } @Test
@Test public void nonEmptyList(){ assertThat(none.nonEmptyList(10),equalTo(NonEmptyList.of(10))); assertThat(none.nonEmptyListGet(()->10),equalTo(NonEmptyList.of(10))); assertThat(eager.nonEmptyList(5),equalTo(NonEmptyList.of(10))); assertThat(eager.nonEmptyListGet(()->5),equalTo(NonEmptyList.of(10))); }
@Test public void testSleeping() throws MalformedURLException { Processor proc = new Processor(); SleepingURLDataFileMetadata slowUrl = new SleepingURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); long start = System.currentTimeMillis(); Either<Error, Vector<String>> x = proc.processUsersFiles(user, NonEmptyList.of(slowUrl)); System.out.println(System.currentTimeMillis() + " Blocked? "); System.out.println(System.currentTimeMillis() + " No... "); long blocked = System.currentTimeMillis(); System.out.println(x + "Completed at " + System.currentTimeMillis()); long completed = System.currentTimeMillis(); assertThat(blocked-start,lessThan(500l)); assertThat(completed-start,greaterThan(500l)); assertThat(x,equalTo(Either.right(Vector.of("success")))); }
@Test public void testFailure() throws MalformedURLException { for(int i=0;i<100;i++) { System.out.println("*********** " + i); URLDataFileMetadata failingURL = new URLDataFileMetadata(10l, "url", new URL("http://oath23232.com")); Processor proc = new Processor(); Either<Error, Vector<String>> x = proc.processUsersFiles(user, NonEmptyList.of(failingURL)); System.out.println(x); assertThat(x, equalTo(Either.left(Error.LOADING_FAILED))); } } @Test
@Test public void testSleepingFilterSwap() throws MalformedURLException { Processor proc = new Processor(); SleepingURLDataFileMetadata slowUrl = new SleepingURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); long start = System.currentTimeMillis(); Option<Error> x = proc.processUsersFiles(user, NonEmptyList.of(slowUrl)) .swap().filter(i -> true); System.out.println(System.currentTimeMillis() + " Blocked? "); System.out.println(System.currentTimeMillis() + " No... "); long blocked = System.currentTimeMillis(); System.out.println(x + "Completed at " + System.currentTimeMillis()); long completed = System.currentTimeMillis(); assertThat(blocked-start,lessThan(500l)); assertThat(completed-start,greaterThan(500l)); assertThat(x,equalTo(Option.none())); } @Test
@Test public void testSleepingFilterSwap5() throws MalformedURLException { Processor proc = new Processor(); SleepingURLDataFileMetadata slowUrl = new SleepingURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); long start = System.currentTimeMillis(); Maybe<Throwable> x = LazyEither5.fromPublisher(proc.processUsersFiles(user, NonEmptyList.of(slowUrl))) .swap1().filter(i -> true); System.out.println(System.currentTimeMillis() + " Blocked? "); System.out.println(System.currentTimeMillis() + " No... "); long blocked = System.currentTimeMillis(); System.out.println(x + "Completed at " + System.currentTimeMillis()); long completed = System.currentTimeMillis(); assertThat(blocked-start,lessThan(500l)); assertThat(completed-start,greaterThan(500l)); assertThat(x,equalTo(Option.none())); }
@Test public void testSuccess() throws MalformedURLException { Processor proc = new Processor(); SuccessURLDataFileMetadata url = new SuccessURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); Either<Error, Vector<String>> x = proc.processUsersFiles(user, NonEmptyList.of(url)); System.out.println(x); assertThat(x,equalTo(Either.right(Vector.of("contents here")))); } @Test
@Test public void testSleepingFilterSwap3() throws MalformedURLException { Processor proc = new Processor(); SleepingURLDataFileMetadata slowUrl = new SleepingURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); long start = System.currentTimeMillis(); Maybe<Throwable> x = LazyEither3.fromPublisher(proc.processUsersFiles(user, NonEmptyList.of(slowUrl))) .swap1().filter(i -> true); System.out.println(System.currentTimeMillis() + " Blocked? "); System.out.println(System.currentTimeMillis() + " No... "); long blocked = System.currentTimeMillis(); System.out.println(x + "Completed at " + System.currentTimeMillis()); long completed = System.currentTimeMillis(); assertThat(blocked-start,lessThan(500l)); assertThat(completed-start,greaterThan(500l)); assertThat(x,equalTo(Option.none())); } @Test
@Test public void testSleepingFilterSwap4() throws MalformedURLException { Processor proc = new Processor(); SleepingURLDataFileMetadata slowUrl = new SleepingURLDataFileMetadata(10l, "url", new URL("https://www.rte.ie/")); long start = System.currentTimeMillis(); Maybe<Throwable> x = LazyEither4.fromPublisher(proc.processUsersFiles(user, NonEmptyList.of(slowUrl))) .swap1().filter(i -> true); System.out.println(System.currentTimeMillis() + " Blocked? "); System.out.println(System.currentTimeMillis() + " No... "); long blocked = System.currentTimeMillis(); System.out.println(x + "Completed at " + System.currentTimeMillis()); long completed = System.currentTimeMillis(); assertThat(blocked-start,lessThan(500l)); assertThat(completed-start,greaterThan(500l)); assertThat(x,equalTo(Option.none())); } @Test
@Test public void combine(){ assertThat(valid.combine((a,b)->a+b,Validated.valid(100)).orElse(-1),equalTo(110)); assertThat(valid.combine((a,b)->a+b,invalid).orElseInvalid("boo!"),equalTo(NonEmptyList.of("failed"))); assertThat(invalid.combine((a,b)->a+b,Validated.valid(100)).orElseInvalid("boo!"),equalTo(NonEmptyList.of("failed"))); assertThat(invalid.combine((a,b)->a+b,Validated.invalid("boo!")).orElseInvalid("oops!"),equalTo(NonEmptyList.of("failed","boo!"))); assertThat(async.combine((a,b)->a+b,Validated.valid(100)).orElse(-1),equalTo(110)); }