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