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