Example #1
0
        public void RemoveReturnsFalseIfSetDoesNotContainItem()
        {
            var  set    = new ConcurrentCountedSet <string>();
            bool result = set.Remove("foo");

            Assert.IsFalse(result);
        }
Example #2
0
        public void ConcurrentCountedSetInitialisesWithSpecifiedCollection()
        {
            var set = new ConcurrentCountedSet <string>(new[] { "foo", "foo", "bar" });

            Assert.IsNotNull(set);
            Assert.AreEqual(2, set.Count);
        }
Example #3
0
        public void ConcurrentCountedSetClearEmptiesSet()
        {
            var set = new ConcurrentCountedSet <string>(new[] { "foo", "foo", "bar" });

            set.Clear();

            Assert.IsEmpty(set);
        }
Example #4
0
        public void ConcurrentCountedSetTryGetCountReturnsFalseIfItemIsNotPresent()
        {
            var set = new ConcurrentCountedSet <string>();

            bool result = set.TryGetCount("foo", out _);

            Assert.IsFalse(result);
        }
Example #5
0
        public void ConcurrentCountedSetAddsItem()
        {
            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");

            Assert.AreEqual(1, set.Count);
        }
Example #6
0
        public void ConcurrentCountedSetTryGetCountReturnsZeroIfItemIsNotPresent()
        {
            var set = new ConcurrentCountedSet <string>();

            int count;

            Assert.IsFalse(set.TryGetCount("foo", out count));
            Assert.AreEqual(0, count);
        }
Example #7
0
        public void IfItemIsAddedToSetOnceRemoveCompletelyRemovesItem()
        {
            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Remove("foo");

            Assert.IsFalse(set.Contains("foo"));
        }
Example #8
0
        public void IfItemIsAddedToSetOnceAssociatedCountIsOne()
        {
            int count = 0;
            var set   = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.TryGetCount("foo", out count);

            Assert.AreEqual(1, count);
        }
Example #9
0
        public void IfItemIsAddedToSetMultipleTimesRemoveDoesNotCompletelyRemoveItem()
        {
            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Add("foo");
            set.Remove("foo");

            Assert.IsTrue(set.Contains("foo"));
        }
Example #10
0
        public void ConcurrentCountedSetSupportsLookupByKey()
        {
            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Add("foo");

            int count = set["foo"];

            Assert.AreEqual(2, count);
        }
Example #11
0
        public void AtomicBooleanGetAndSetReturnsOriginalValueMultiThreaded()
        {
            const int expected = 1000;

            ConcurrentCountedSet <bool> values = new ConcurrentCountedSet <bool>();

            var b = new AtomicBoolean(true);

            System.Threading.Tasks.Parallel.For(0, 1000, i => values.Add(b.GetAndSet(i % 2 == 0)));

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #12
0
        public void AtomicBooleanCompareAndSetReturnsExpectedValuesForFailedMatchesMultiThreaded()
        {
            const int expected = 1000;

            var b = new AtomicBoolean(true);

            var values = new ConcurrentCountedSet <bool>();

            System.Threading.Tasks.Parallel.For(0, 1000, i => values.Add(b.CompareAndSet(i % 2 != 0, false)));

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #13
0
        public void AtomicObjectCompareAndSetReturnsExpectedValuesForFailedMatchesMultiThreaded()
        {
            const int expected = 1000;

            var o = new AtomicObject <string>("foo");

            var values = new ConcurrentCountedSet <bool>();

            System.Threading.Tasks.Parallel.For(0, 1000, i => values.Add(o.CompareAndSet(i % 2 == 0 ? "bar" : "foo", "bar")));

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #14
0
        public void AtomicObjectGetAndSetReturnsOriginalValueMultiThreaded()
        {
            const int expected = 1000;

            ConcurrentCountedSet <string> values = new ConcurrentCountedSet <string>();

            var o = new AtomicObject <string>("foo");

            System.Threading.Tasks.Parallel.For(0, 1000, i => values.Add(o.GetAndSet(i % 2 == 0 ? "bar" : "foo")));

            Assert.AreEqual(expected, values["foo"] + values["bar"]);
        }
Example #15
0
        public void ConcurrentCountedSetSupportsNonGenericIteration()
        {
            var set = new ConcurrentCountedSet <string>(new[] { "foo", "foo", "foo", "bar", "bar" });

            Assert.DoesNotThrow(() =>
            {
                System.Collections.IEnumerator enumerator = (set as System.Collections.IEnumerable).GetEnumerator();
                while (enumerator.MoveNext())
                {
                    //ignore empty block
                }
            });
        }
Example #16
0
        public void ConcurrentCountedSetSupportsGenericIteration()
        {
            var set = new ConcurrentCountedSet <string>(new[] { "foo", "foo", "foo", "bar", "bar" });

            Assert.DoesNotThrow(() =>
            {
                IEnumerator <string> enumerator = set.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    //ignore empty block
                }
            });
        }
Example #17
0
        public void ConcurrentCountedSetSupportsNonGenericIterationForExpectedNumberOfElements()
        {
            const int expected = 2;
            int       count    = 0;

            var set = new ConcurrentCountedSet <string>(new[] { "foo", "foo", "foo", "bar", "bar" });

            System.Collections.IEnumerator enumerator = (set as System.Collections.IEnumerable).GetEnumerator();
            while (enumerator.MoveNext())
            {
                count++;
            }
            Assert.AreEqual(expected, count);
        }
Example #18
0
        public void AtomicObjectGetAndSetReturnsOriginalValue()
        {
            const int expected = 1000;

            ConcurrentCountedSet <string> values = new ConcurrentCountedSet <string>();

            var o = new AtomicObject <string>("foo");

            for (int i = 0; i < 1000; i++)
            {
                values.Add(o.GetAndSet(i % 2 == 0 ? "bar" : "foo"));
            }

            Assert.AreEqual(expected, values["foo"] + values["bar"]);
        }
Example #19
0
        public void AtomicObjectCompareAndSetReturnsExpectedValuesForFailedMatches()
        {
            const int expected = 1000;

            var o = new AtomicObject <string>("foo");

            var values = new ConcurrentCountedSet <bool>();

            for (int i = 0; i < 1000; i++)
            {
                values.Add(o.CompareAndSet(i % 2 == 0 ? "bar" : "foo", "bar"));
            }

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #20
0
        public void AtomicBooleanCompareAndSetReturnsExpectedValuesForFailedMatches()
        {
            const int expected = 1000;

            var b = new AtomicBoolean(true);

            var values = new ConcurrentCountedSet <bool>();

            for (int i = 0; i < 1000; i++)
            {
                values.Add(b.CompareAndSet(i % 2 != 0, false));
            }

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #21
0
        public void AtomicBooleanGetAndSetReturnsOriginalValue()
        {
            const int expected = 1000;

            ConcurrentCountedSet <bool> values = new ConcurrentCountedSet <bool>();

            var b = new AtomicBoolean();

            for (int i = 0; i < 1000; i++)
            {
                values.Add(b.GetAndSet(i % 2 == 0));
            }

            Assert.AreEqual(expected, values[true] + values[false]);
        }
Example #22
0
        public void ConcurrentCountedSetRemovesItemOnceCountReducedToZeroMultiThreaded()
        {
            var set = new ConcurrentCountedSet <string>();

            for (int i = 0; i < 1000; i++)
            {
                set.Add("bar");
            }

            System.Threading.Tasks.Parallel.For(0, 1000, i =>
            {
                set.Remove("bar");
            });

            Assert.IsFalse(set.Contains("bar"));
        }
Example #23
0
        public void IfItemIsAddedToSetMultipleTimesRemoveReducesCountByOne()
        {
            int firstCount;
            int secondCount;
            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Add("foo");

            set.TryGetCount("foo", out firstCount);

            set.Remove("foo");

            set.TryGetCount("foo", out secondCount);

            Assert.AreEqual(2, firstCount);
            Assert.AreEqual(1, secondCount);
        }
Example #24
0
        public void ConcurrentCountedSetMaintainsDistinctCountForDifferentItems()
        {
            int fooCount;
            int barCount;

            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Add("foo");
            set.Add("foo");
            set.Add("bar");
            set.Add("bar");

            set.TryGetCount("foo", out fooCount);
            set.TryGetCount("bar", out barCount);

            Assert.AreEqual(3, fooCount);
            Assert.AreEqual(2, barCount);
        }
Example #25
0
        public void ConcurrentCountedSetMaintainsDistinctCountForDifferentItemsInLoop()
        {
            var set = new ConcurrentCountedSet <string>();

            for (int i = 0; i < 1000; i++)
            {
                if (i % 2 == 0)
                {
                    set.Add("foo");
                }
                else
                {
                    set.Add("bar");
                }
            }

            Assert.AreEqual(500, set["foo"]);
            Assert.AreEqual(500, set["bar"]);
        }
Example #26
0
        public void ConcurrentCountedSetMaintainsDistinctCountForDifferentItemsInLoopMultiThreaded()
        {
            var set = new ConcurrentCountedSet <string>();

            System.Threading.Tasks.Parallel.For(0, 1000, i =>
            {
                if (i % 2 == 0)
                {
                    set.Add("foo");
                }
                else
                {
                    set.Add("bar");
                }
            });

            Assert.AreEqual(500, set["foo"]);
            Assert.AreEqual(500, set["bar"]);
        }
Example #27
0
        public void ConcurrentCountedSetDoesNotRemoveItemIfCountIsGreaterThanZeroMultiThreaded()
        {
            const int expected = 1;

            var set = new ConcurrentCountedSet <string>();

            for (int i = 0; i < 1000; i++)
            {
                set.Add("bar");
            }

            System.Threading.Tasks.Parallel.For(0, 999, i =>
            {
                set.Remove("bar");
            });

            int currentCount;

            Assert.IsTrue(set.TryGetCount("bar", out currentCount));
            Assert.AreEqual(expected, currentCount);
        }
Example #28
0
        public void ConcurrentCountedSetDoesNotRemoveItemIfCountIsGreaterThanZero()
        {
            const int expected = 1;

            var set = new ConcurrentCountedSet <string>();

            for (int i = 0; i < 1000; i++)
            {
                set.Add("bar");
            }

            for (int i = 0; i < 999; i++)
            {
                set.Remove("bar");
            }

            int currentCount;

            Assert.IsTrue(set.TryGetCount("bar", out currentCount));
            Assert.AreEqual(expected, currentCount);
        }
Example #29
0
        public void ConcurrentCountedSetRemovesItemOnceCountReducedToZero()
        {
            int removeCount = 0;

            var set = new ConcurrentCountedSet <string>();

            for (int i = 0; i < 1000; i++)
            {
                set.Add("bar");
            }

            for (int i = 0; i < 1000; i++)
            {
                if (set.Remove("bar"))
                {
                    removeCount = Interlocked.Increment(ref removeCount);
                }
            }

            Assert.AreEqual(1000, removeCount);
            Assert.IsFalse(set.Contains("bar"));
        }
Example #30
0
        public void IfItemIsAddedToSetMutlipleTimesItMustBeRemovedAnEqualNumberOfTimes()
        {
            bool firstCheck;
            bool secondCheck;
            bool thirdCheck;

            var set = new ConcurrentCountedSet <string>();

            set.Add("foo");
            set.Add("foo");
            set.Add("foo");

            set.Remove("foo");
            firstCheck = set.Contains("foo");
            set.Remove("foo");
            secondCheck = set.Contains("foo");
            set.Remove("foo");
            thirdCheck = set.Contains("foo");

            Assert.IsTrue(firstCheck);
            Assert.IsTrue(secondCheck);
            Assert.IsFalse(thirdCheck);
        }