]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulation.sequences/tests/org/simantics/simulation/sequences/tests/DummyActionContext.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.simulation.sequences / tests / org / simantics / simulation / sequences / tests / DummyActionContext.java
diff --git a/bundles/org.simantics.simulation.sequences/tests/org/simantics/simulation/sequences/tests/DummyActionContext.java b/bundles/org.simantics.simulation.sequences/tests/org/simantics/simulation/sequences/tests/DummyActionContext.java
new file mode 100644 (file)
index 0000000..75fb676
--- /dev/null
@@ -0,0 +1,45 @@
+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