Esempio n. 1
0
        public void GeneralStaticExit()
        {
            int key     = 5;
            var LockDic = new ConcurrentDictionary <int, bool>();
            IEnumerable <TestClass> Objects = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 10);
            bool WasChanged = false;

            Action <TestClass> DecreaseAction = new Action <TestClass>(o => { });
            Action <TestClass> IncreaseAction = new Action <TestClass>(o => { });


            //check for release lock
            LockDic[key] = true;
            GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key);

            Assert.IsFalse(LockDic[key]);

            //check for set "WasChanged"
            WasChanged = false;
            GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key);

            Assert.IsTrue(WasChanged);


            //check for do action
            Objects.AsParallel().ForAll(o => { o.Number = 1; o.Word = "Hello"; });
            DecreaseAction = o => o.Number = 2;
            IncreaseAction = o => o.Word = "Word";

            GeneralTransition <TestClass> .StaticExit(Objects, DecreaseAction, IncreaseAction, ref WasChanged, LockDic, key);

            Assert.IsTrue(Objects.All(o => o.Word == "Word" && o.Number == 2));
        }
Esempio n. 2
0
        public void WasChangedGeneralTransitionTest()
        {
            //test1
            IEnumerable <TestClass> Objects = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 2);

            Objects.AsParallel().ForAll(o => { o.Number = 2; o.Word = "ccc"; });

            GeneralLocker gLocker = new GeneralLocker();

            GeneralTransition <TestClass> genTrans = new GeneralTransition <TestClass>(o => true, o => o.Number == 2 && o.Word == "ccc", o => { }, o => { o.Number = 3; o.Word = "ddd"; },
                                                                                       ExecutionMode.Synch, 0, gLocker, 0, Objects.ToList());

            genTrans.Do();


            Assert.IsTrue(gLocker.WasChanged);
        }
Esempio n. 3
0
        public void GeneralStaticEntranceTest()
        {
            int key      = 5;
            var LockDic  = new ConcurrentDictionary <int, bool>();
            var TimerDic = new ConcurrentDictionary <int, Timer>();
            Predicate <TestClass>   SolvePredicate = o => false;
            IEnumerable <TestClass> Objects        = ParallelEnumerable.Repeat <TestClass>(new TestClass(), 10);

            //check without locking
            //(without timer)

            LockDic[key] = false;

            SolvePredicate = o => false;
            bool answerFalse = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);
            Assert.IsFalse(LockDic[key]);

            SolvePredicate = o => true;
            bool answerTrue = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(LockDic[key]);


            //(with timer)
            LockDic[key]  = false;
            TimerDic[key] = new Timer(new TimeSpan(0, 0, 0, 0));

            SolvePredicate = o => false;
            answerFalse    = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            SolvePredicate = o => true;
            answerTrue     = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(LockDic[key]);


            //check for locking
            LockDic[key]   = true;
            SolvePredicate = o => true;
            TimerDic[key]  = new Timer(new TimeSpan(0, 0, 0, 0));
            answerFalse    = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            //check for timer
            LockDic[key]   = false;
            SolvePredicate = o => true;

            TimerDic[key] = new Timer(new TimeSpan(0, 0, 0, 0, 1000));
            TimerDic[key].Start();
            System.Threading.Thread.Sleep(500);
            answerFalse = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsFalse(answerFalse);

            TimerDic[key].Reset();
            int count_before = TimerDic[key].ElapsedTime;

            System.Threading.Thread.Sleep(1500);
            answerTrue = GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(answerTrue);
            Assert.IsTrue(TimerDic[key].ElapsedTime < 500);

            //check for start timer
            LockDic[key]   = false;
            SolvePredicate = o => true;
            TimerDic[key]  = new Timer(new TimeSpan(0, 0, 0, 0, 1000));
            GeneralTransition <TestClass> .StaticEntrance(Objects, SolvePredicate, LockDic, TimerDic, key);

            Assert.IsTrue(TimerDic[key].IsRun);
        }
Esempio n. 4
0
        public void WasChangedGeneralTransitionTest()
        {
            //test1
            IEnumerable<TestClass> Objects = ParallelEnumerable.Repeat<TestClass>(new TestClass(), 2);

            Objects.AsParallel().ForAll(o => { o.Number = 2; o.Word = "ccc"; });

            GeneralLocker gLocker = new GeneralLocker();

            GeneralTransition<TestClass> genTrans = new GeneralTransition<TestClass>(o => true, o => o.Number == 2 && o.Word == "ccc", o => { }, o => { o.Number = 3; o.Word = "ddd"; },
                ExecutionMode.Synch, 0, gLocker, 0, Objects.ToList());

            genTrans.Do();

            Assert.IsTrue(gLocker.WasChanged);
        }