예제 #1
0
 @Test
 public void shouldCurry() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   final Function1<Object, Function1<Object, Function1<Object, Function1<Object, Object>>>>
       curried = f.curried();
   assertThat(curried).isNotNull();
 }
예제 #2
0
 @Test
 public void shouldComposeWithAndThen() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   final Function1<Object, Object> after = o -> null;
   final Function4<Object, Object, Object, Object, Object> composed = f.andThen(after);
   assertThat(composed).isNotNull();
 }
예제 #3
0
 @Test
 public void shouldRecognizeMemoizedFunctions() {
   final Function4<Integer, Integer, Integer, Integer, Integer> f = (i1, i2, i3, i4) -> null;
   final Function4<Integer, Integer, Integer, Integer, Integer> memo = f.memoized();
   assertThat(f.isMemoized()).isFalse();
   assertThat(memo.isMemoized()).isTrue();
 }
예제 #4
0
 @Test
 public void shouldPartiallyApply() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   assertThat(f.apply(null)).isNotNull();
   assertThat(f.apply(null, null)).isNotNull();
   assertThat(f.apply(null, null, null)).isNotNull();
 }
예제 #5
0
 @Test
 public void shouldLiftPartialFunction() {
   assertThat(
           Function4.lift(
               (o1, o2, o3, o4) -> {
                 while (true) ;
               }))
       .isNotNull();
 }
예제 #6
0
 @Test
 public void shouldCreateFromMethodReference() {
   class Type {
     Object methodReference(Object o1, Object o2, Object o3, Object o4) {
       return null;
     }
   }
   final Type type = new Type();
   assertThat(Function4.of(type::methodReference)).isNotNull();
 }
예제 #7
0
 @Test
 public void shouldMemoize() {
   final AtomicInteger integer = new AtomicInteger();
   final Function4<Integer, Integer, Integer, Integer, Integer> f =
       (i1, i2, i3, i4) -> i1 + i2 + i3 + i4 + integer.getAndIncrement();
   final Function4<Integer, Integer, Integer, Integer, Integer> memo = f.memoized();
   // should apply f on first apply()
   final int expected = memo.apply(1, 2, 3, 4);
   // should return memoized value of second apply()
   assertThat(memo.apply(1, 2, 3, 4)).isEqualTo(expected);
   // should calculate new values when called subsequently with different parameters
   assertThat(memo.apply(2, 3, 4, 5)).isEqualTo(2 + 3 + 4 + 5 + 1);
   // should return memoized value of second apply() (for new value)
   assertThat(memo.apply(2, 3, 4, 5)).isEqualTo(2 + 3 + 4 + 5 + 1);
 }
예제 #8
0
  @Test
  public void shouldLiftTryPartialFunction() {
    AtomicInteger integer = new AtomicInteger();
    Function4<Integer, Integer, Integer, Integer, Integer> divByZero =
        (i1, i2, i3, i4) -> 10 / integer.get();
    Function4<Integer, Integer, Integer, Integer, Try<Integer>> divByZeroTry =
        Function4.liftTry(divByZero);

    Try<Integer> res = divByZeroTry.apply(0, 0, 0, 0);
    assertThat(res.isFailure()).isTrue();
    assertThat(res.getCause()).isNotNull();
    assertThat(res.getCause().getMessage()).isEqualToIgnoringCase("/ by zero");

    integer.incrementAndGet();
    res = divByZeroTry.apply(1, 2, 3, 4);
    assertThat(res.isSuccess()).isTrue();
    assertThat(res.get()).isEqualTo(10);
  }
예제 #9
0
  private boolean forEachConstraintRecursively(Function4 block) {
    Queue4 queue = new NoDuplicatesQueue(new NonblockingQueue());
    Iterator4 constrIter = iterateConstraints();
    while (constrIter.moveNext()) {
      queue.add(constrIter.current());
    }
    while (queue.hasNext()) {
      QCon constr = (QCon) queue.next();
      Boolean cancel = (Boolean) block.apply(constr);
      if (cancel.booleanValue()) {
        return true;
      }

      Iterator4 childIter = constr.iterateChildren();
      while (childIter.moveNext()) {
        queue.add(childIter.current());
      }
      Iterator4 joinIter = constr.iterateJoins();
      while (joinIter.moveNext()) {
        queue.add(joinIter.current());
      }
    }
    return false;
  }
예제 #10
0
 @Test
 public void shouldNotMemoizeAlreadyMemoizedFunction() {
   final Function4<Integer, Integer, Integer, Integer, Integer> f = (i1, i2, i3, i4) -> null;
   final Function4<Integer, Integer, Integer, Integer, Integer> memo = f.memoized();
   assertThat(memo.memoized() == memo).isTrue();
 }
예제 #11
0
 @Test
 public void shouldReverse() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   assertThat(f.reversed()).isNotNull();
 }
예제 #12
0
 @Test
 public void shouldMemoizeValueGivenNullArguments() {
   final Function4<Integer, Integer, Integer, Integer, Integer> f = (i1, i2, i3, i4) -> null;
   final Function4<Integer, Integer, Integer, Integer, Integer> memo = f.memoized();
   assertThat(memo.apply(null, null, null, null)).isNull();
 }
예제 #13
0
 @Test
 public void shouldTuple() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   final Function1<Tuple4<Object, Object, Object, Object>, Object> tupled = f.tupled();
   assertThat(tupled).isNotNull();
 }
예제 #14
0
 @Test
 public void shouldCalculatedRecursively() {
   assertThat(recurrent1.apply(11, 11, 11, 11)).isEqualTo(11);
   assertThat(recurrent1.apply(22, 22, 22, 22)).isEqualTo(22);
 }
예제 #15
0
 @Test
 public void shouldConstant() {
   final Function4<Object, Object, Object, Object, Object> f = Function4.constant(6);
   assertThat(f.apply(1, 2, 3, 4)).isEqualTo(6);
 }
예제 #16
0
 @Test
 public void shouldGetArity() {
   final Function4<Object, Object, Object, Object, Object> f = (o1, o2, o3, o4) -> null;
   assertThat(f.arity()).isEqualTo(4);
 }
예제 #17
0
 public Test transmogrify(Function4<Test, Test> fun) {
   return fun.apply(this);
 }