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