]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/tests/org/simantics/scl/runtime/tests/TestFactActivationQueue.java
Merge "Re-enabled Acorn transaction cancellation support for testing"
[simantics/platform.git] / bundles / org.simantics.scl.runtime / tests / org / simantics / scl / runtime / tests / TestFactActivationQueue.java
1 package org.simantics.scl.runtime.tests;\r
2 \r
3 import java.util.Random;\r
4 \r
5 import org.junit.Assert;\r
6 import org.junit.Test;\r
7 import org.simantics.scl.runtime.chr.Fact;\r
8 import org.simantics.scl.runtime.chr.FactActivationQueue;\r
9 \r
10 import gnu.trove.list.array.TIntArrayList;\r
11 \r
12 public class TestFactActivationQueue {\r
13     public static Random RANDOM = new Random();\r
14     \r
15     private static class MyFact implements Fact {\r
16         TIntArrayList list;\r
17         int priority;\r
18 \r
19         public MyFact(TIntArrayList list, int priority) {\r
20             this.list = list;\r
21             this.priority = priority;\r
22         }\r
23 \r
24         @Override\r
25         public int activate(Object context, int priority) {\r
26             Assert.assertEquals(this.priority, priority);\r
27             list.add(priority);\r
28             return -1;\r
29         }\r
30 \r
31         @Override\r
32         public boolean isAlive() {\r
33             return true;\r
34         }\r
35     }\r
36     \r
37     private void testRandomly(int priorities, int size) {\r
38         FactActivationQueue queue = new FactActivationQueue(priorities);\r
39         TIntArrayList list = new TIntArrayList(size); \r
40         for(int i=0;i<size;++i) {\r
41             int val = RANDOM.nextInt(priorities);\r
42             queue.add(val, new MyFact(list, val));\r
43         }\r
44         queue.activate(null, priorities);\r
45         Assert.assertEquals(size, list.size());\r
46         for(int i=1;i<list.size();++i) {\r
47             int a = list.get(i-1);\r
48             int b = list.get(i);\r
49             Assert.assertTrue(a <= b);\r
50         }\r
51     }\r
52     \r
53     @Test\r
54     public void testRandomly() {\r
55         for(int i=0;i<10000;++i)\r
56             testRandomly(10, 10000);\r
57     }\r
58 }\r