Package org.grainednoise.deferred

Source Code of org.grainednoise.deferred.BasicTest

package org.grainednoise.deferred;

import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.grainednoise.deferred.combinators.Functions;
import org.grainednoise.deferred.combinators.Parallel;
import org.grainednoise.deferred.combinators.Sequential;
import org.grainednoise.deferred.core.Tuple;
import org.grainednoise.deferred.core.Tuple.Tuple2;
import org.grainednoise.deferred.core.Waiter;
import org.grainednoise.deferred.functions.Dfunc0;
import org.grainednoise.deferred.functions.FastFunc0;
import org.grainednoise.deferred.functions.SlowFunc0;
import org.grainednoise.deferred.functions.SlowFunc1;
import org.grainednoise.deferred.util.SimpleDeferredExecutor;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class BasicTest {
 
  private static final SlowFunc0<Integer> FUNC_5_SLOW = new SlowFunc0<Integer>() {

    @Override
    protected Integer calculate() {
      return 5;
    }
  };

  private static final FastFunc0<Integer> FUNC_5_FAST = new FastFunc0<Integer>() {
   
    @Override
    protected Integer calculate() {
      return 5;
    }
  };
 
  private static final SlowFunc0<Integer> FUNC_7_SLOW = new SlowFunc0<Integer>() {
   
    @Override
    protected Integer calculate() {
      return 7;
    }
  };
 
  private static final FastFunc0<Integer> FUNC_7_FAST = new FastFunc0<Integer>() {
   
    @Override
    protected Integer calculate() {
      return 7;
    }
  };
 
  private static final SlowFunc1<Integer, Integer> FUNC_DOUBLE_SLOW = new SlowFunc1<Integer, Integer>() {
   
    @Override
    protected Integer calculate(Integer param) {
      return param * 2;
    }
  };
 
 
  private Executor coreExecutor;
  private SimpleDeferredExecutor executor;

  @Before
  public void setup() {
    coreExecutor = new ThreadPoolExecutor(5, 5, 20, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(20));
    executor = new SimpleDeferredExecutor(coreExecutor);
   
  }
 
  @Test
  public void simpleWait() {
    Integer result = executor.executeAndWait(Functions.withDummyParameter(FUNC_5_SLOW), null);
    assertEquals(5, result.intValue());
  }

  @Test
  public void simpleDeferred() {
    Waiter<Integer> waiter = executor.executeAsync(Functions.withDummyParameter(FUNC_5_SLOW), null);
    assertEquals(5, waiter.waitForValue().intValue());
  }

  @Test
  public void simpleDeferredChained() {
    Dfunc0<Integer> chained = Sequential.chain(FUNC_5_SLOW, FUNC_DOUBLE_SLOW);
   
    Waiter<Integer> waiter = executor.executeAsync(Functions.withDummyParameter(chained), null);
    assertEquals(10, waiter.waitForValue().intValue());
  }
 
  @Test
  public void simpleDeferredParallel() {
    Dfunc0<Tuple2<Integer, Integer>> parallel = Parallel.parallel(FUNC_5_SLOW, FUNC_7_SLOW);
    Waiter<Tuple2<Integer, Integer>> waiter = executor.executeAsync(Functions.withDummyParameter(parallel), null);
    assertEquals(Tuple.of(5, 7), waiter.waitForValue());

    parallel = Parallel.parallel(FUNC_5_SLOW, FUNC_7_FAST);
    waiter = executor.executeAsync(Functions.withDummyParameter(parallel), null);
    assertEquals(Tuple.of(5, 7), waiter.waitForValue());

    parallel = Parallel.parallel(FUNC_5_FAST, FUNC_7_SLOW);
    waiter = executor.executeAsync(Functions.withDummyParameter(parallel), null);
    assertEquals(Tuple.of(5, 7), waiter.waitForValue());

    parallel = Parallel.parallel(FUNC_5_FAST, FUNC_7_FAST);
    waiter = executor.executeAsync(Functions.withDummyParameter(parallel), null);
    assertEquals(Tuple.of(5, 7), waiter.waitForValue());
  }
}
TOP

Related Classes of org.grainednoise.deferred.BasicTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.