]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/tests/org/simantics/scl/runtime/tests/TestFactActivationQueue.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.runtime / tests / org / simantics / scl / runtime / tests / TestFactActivationQueue.java
diff --git a/bundles/org.simantics.scl.runtime/tests/org/simantics/scl/runtime/tests/TestFactActivationQueue.java b/bundles/org.simantics.scl.runtime/tests/org/simantics/scl/runtime/tests/TestFactActivationQueue.java
new file mode 100644 (file)
index 0000000..aecd8de
--- /dev/null
@@ -0,0 +1,58 @@
+package org.simantics.scl.runtime.tests;\r
+\r
+import java.util.Random;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.simantics.scl.runtime.chr.Fact;\r
+import org.simantics.scl.runtime.chr.FactActivationQueue;\r
+\r
+import gnu.trove.list.array.TIntArrayList;\r
+\r
+public class TestFactActivationQueue {\r
+    public static Random RANDOM = new Random();\r
+    \r
+    private static class MyFact implements Fact {\r
+        TIntArrayList list;\r
+        int priority;\r
+\r
+        public MyFact(TIntArrayList list, int priority) {\r
+            this.list = list;\r
+            this.priority = priority;\r
+        }\r
+\r
+        @Override\r
+        public int activate(Object context, int priority) {\r
+            Assert.assertEquals(this.priority, priority);\r
+            list.add(priority);\r
+            return -1;\r
+        }\r
+\r
+        @Override\r
+        public boolean isAlive() {\r
+            return true;\r
+        }\r
+    }\r
+    \r
+    private void testRandomly(int priorities, int size) {\r
+        FactActivationQueue queue = new FactActivationQueue(priorities);\r
+        TIntArrayList list = new TIntArrayList(size); \r
+        for(int i=0;i<size;++i) {\r
+            int val = RANDOM.nextInt(priorities);\r
+            queue.add(val, new MyFact(list, val));\r
+        }\r
+        queue.activate(null, priorities);\r
+        Assert.assertEquals(size, list.size());\r
+        for(int i=1;i<list.size();++i) {\r
+            int a = list.get(i-1);\r
+            int b = list.get(i);\r
+            Assert.assertTrue(a <= b);\r
+        }\r
+    }\r
+    \r
+    @Test\r
+    public void testRandomly() {\r
+        for(int i=0;i<10000;++i)\r
+            testRandomly(10, 10000);\r
+    }\r
+}\r