]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.simulation.sequences.tests;\r
2 \r
3 import gnu.trove.map.hash.TObjectDoubleHashMap;\r
4 \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
11 \r
12 public class DummyActionContext extends AbstractActionContext {\r
13 \r
14     TObjectDoubleHashMap<String> variables = new TObjectDoubleHashMap<String>(); \r
15     \r
16     @Override\r
17     public Object get(String variableName, Binding binding) {\r
18         try {\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
22                 }\r
23     }\r
24 \r
25     @Override\r
26     public void set(String variableName, Object value, Binding binding) {\r
27         try {\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
31                 }\r
32     }\r
33     \r
34     public static void testDriveAction(Function1<Tuple0, Object> action) {\r
35         DummyActionContext actionContext = new DummyActionContext();\r
36         actionContext.scheduleNextStep(action);\r
37         \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
42         }\r
43     }\r
44 \r
45 }\r