1 package org.simantics.simulation.sequences.tests;
3 import gnu.trove.map.hash.TObjectDoubleHashMap;
5 import org.simantics.databoard.Bindings;
6 import org.simantics.databoard.adapter.AdaptException;
7 import org.simantics.databoard.binding.Binding;
8 import org.simantics.scl.runtime.function.Function1;
9 import org.simantics.scl.runtime.tuple.Tuple0;
10 import org.simantics.simulation.sequences.action.AbstractActionContext;
12 public class DummyActionContext extends AbstractActionContext {
14 TObjectDoubleHashMap<String> variables = new TObjectDoubleHashMap<String>();
17 public Object get(String variableName, Binding binding) {
19 return Bindings.adapt(variables.get(variableName), Bindings.DOUBLE, binding);
20 } catch (AdaptException e) {
21 throw new IllegalArgumentException("Invalid binding " + binding.toString() + " for a double value", e);
26 public void set(String variableName, Object value, Binding binding) {
28 variables.put(variableName, (Double)Bindings.adapt(value, binding, Bindings.DOUBLE));
29 } catch (AdaptException e) {
30 throw new IllegalArgumentException("Invalid binding " + binding.toString() + " for a double value", e);
34 public static void testDriveAction(Function1<Tuple0, Object> action) {
35 DummyActionContext actionContext = new DummyActionContext();
36 actionContext.scheduleNextStep(action);
39 while(!actionContext.isStopped()) {
40 double maxNextTime = actionContext.handleStep(curTime);
41 curTime = Math.min(curTime+0.1, maxNextTime);