1 package org.simantics.scl.runtime.tests;
\r
3 import java.util.Random;
\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
10 import gnu.trove.list.array.TIntArrayList;
\r
12 public class TestFactActivationQueue {
\r
13 public static Random RANDOM = new Random();
\r
15 private static class MyFact implements Fact {
\r
19 public MyFact(TIntArrayList list, int priority) {
\r
21 this.priority = priority;
\r
25 public int activate(Object context, int priority) {
\r
26 Assert.assertEquals(this.priority, priority);
\r
32 public boolean isAlive() {
\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
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
54 public void testRandomly() {
\r
55 for(int i=0;i<10000;++i)
\r
56 testRandomly(10, 10000);
\r