@Test(enabled=true)
public void testNewActivityExecutor() {

    ActivityDef ad = ActivityDef.parseActivityDef("type=diag;alias=test;cycles=1000;");
    Optional<ActivityType> activityType = ActivityType.FINDER.get(ad.getActivityType());
    Input longSupplier = new AtomicInput(ad);
    MotorDispenser<?> cmf = getActivityMotorFactory(
            ad, motorActionDelay(999), longSupplier
    );
    Activity a = new SimpleActivity(ad);
    InputDispenser idisp = new CoreInputDispenser(a);
    ActionDispenser adisp = new CoreActionDispenser(a);
    OutputDispenser tdisp = CoreServices.getOutputDispenser(a).orElse(null);
    MotorDispenser<?> mdisp = new CoreMotorDispenser(a, idisp, adisp, tdisp);
    a.setActionDispenserDelegate(adisp);
    a.setInputDispenserDelegate(idisp);
    a.setMotorDispenserDelegate(mdisp);
    ActivityExecutor ae = new ActivityExecutor(a);
    ad.setThreads(5);
    ae.startActivity();
    int[] speeds = new int[]{1,2000,5,2000,2,2000};
    for(int offset=0; offset<speeds.length; offset+=2) {
        int threadTarget=speeds[offset];
        int threadTime = speeds[offset+1];
        logger.info("Setting thread level to " + threadTarget + " for " +threadTime + " seconds.");
        ad.setThreads(threadTarget);
        try {
            Thread.sleep(threadTime);
        } catch (InterruptedException ignored) {
        }
    }
    ad.setThreads(0);
}