Exemple #1
0
 public void BeforeClass()
 {
     mySliceInt  = BitSlice.Int(4);
     mySliceEnum = BitSlice.Enum <E4>(mySliceInt);
     mySliceBool = BitSlice.Bool(mySliceEnum);
     mySliceE1   = BitSlice.Enum <E1>(mySliceBool);
 }
Exemple #2
0
        public void InterlockedUpdateStressTest()
        {
            const int n = 10000;

            var slice1 = BitSlice.Bool();
            var slice2 = BitSlice.Bool(slice1);

            var state = 0;

            for (var i = 0; i < 500; i++)
            {
                Parallel.Invoke(() =>
                {
                    for (var j = 0; j < n; j++)
                    {
                        Enter(slice1);
                        Release(slice1);
                    }
                }, () =>
                {
                    for (var j = 0; j < n; j++)
                    {
                        Enter(slice2);
                        Release(slice2);
                    }
                });
            }

            void Enter(BoolBitSlice slice)
            {
                Assert.IsFalse(slice[state]);
                slice.InterlockedUpdate(ref state, true);
            }

            void Release(BoolBitSlice slice)
            {
                Assert.IsTrue(slice[state]);
                slice.InterlockedUpdate(ref state, false);
            }
        }