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));
        }