package org.simantics.simulation.sequences.tests; import gnu.trove.map.hash.TObjectDoubleHashMap; import org.simantics.databoard.Bindings; import org.simantics.databoard.adapter.AdaptException; import org.simantics.databoard.binding.Binding; import org.simantics.scl.runtime.function.Function1; import org.simantics.scl.runtime.tuple.Tuple0; import org.simantics.simulation.sequences.action.AbstractActionContext; public class DummyActionContext extends AbstractActionContext { TObjectDoubleHashMap variables = new TObjectDoubleHashMap(); @Override public Object get(String variableName, Binding binding) { try { return Bindings.adapt(variables.get(variableName), Bindings.DOUBLE, binding); } catch (AdaptException e) { throw new IllegalArgumentException("Invalid binding " + binding.toString() + " for a double value", e); } } @Override public void set(String variableName, Object value, Binding binding) { try { variables.put(variableName, (Double)Bindings.adapt(value, binding, Bindings.DOUBLE)); } catch (AdaptException e) { throw new IllegalArgumentException("Invalid binding " + binding.toString() + " for a double value", e); } } public static void testDriveAction(Function1 action) { DummyActionContext actionContext = new DummyActionContext(); actionContext.scheduleNextStep(action); double curTime = 0.0; while(!actionContext.isStopped()) { double maxNextTime = actionContext.handleStep(curTime); curTime = Math.min(curTime+0.1, maxNextTime); } } }