-package org.simantics.scl.runtime.tests;
-
-import java.util.Random;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.simantics.scl.runtime.chr.Fact;
-import org.simantics.scl.runtime.chr.FactActivationQueue;
-
-import gnu.trove.list.array.TIntArrayList;
-
-public class TestFactActivationQueue {
- public static Random RANDOM = new Random();
-
- private static class MyFact implements Fact {
- TIntArrayList list;
- int priority;
-
- public MyFact(TIntArrayList list, int priority) {
- this.list = list;
- this.priority = priority;
- }
-
- @Override
- public int activate(Object context, int priority) {
- Assert.assertEquals(this.priority, priority);
- list.add(priority);
- return -1;
- }
-
- @Override
- public boolean isAlive() {
- return true;
- }
- }
-
- private void testRandomly(int priorities, int size) {
- FactActivationQueue queue = new FactActivationQueue(priorities);
- TIntArrayList list = new TIntArrayList(size);
- for(int i=0;i<size;++i) {
- int val = RANDOM.nextInt(priorities);
- queue.add(val, new MyFact(list, val));
- }
- queue.activate(null, priorities);
- Assert.assertEquals(size, list.size());
- for(int i=1;i<list.size();++i) {
- int a = list.get(i-1);
- int b = list.get(i);
- Assert.assertTrue(a <= b);
- }
- }
-
- @Test
- public void testRandomly() {
- for(int i=0;i<10000;++i)
- testRandomly(10, 10000);
- }
-}