예제 #1
0
 private static void AssertCollectionContainsExactlyUnordered(CopyOnWriteCollection <int> collection, IEnumerable <int> expectedItems)
 {
     foreach (var item in expectedItems)
     {
         Assert.True(collection.TryRemove(item));
     }
     Assert.Equal(0, collection.Count);
 }
예제 #2
0
        public void TryRemoveShouldReturnTrueForKnownItem()
        {
            var knownItems = Enumerable.Range(0, 5).ToArray();
            var collection = new CopyOnWriteCollection <int>();

            collection.AddRange(knownItems);

            Assert.True(collection.TryRemove(knownItems[2]));
        }
예제 #3
0
        public void TryRemoveShouldReturnFalseForUnknownItem()
        {
            const int unknownItem = -1;
            var       knownItems  = Enumerable.Range(0, 5).ToArray();
            var       collection  = new CopyOnWriteCollection <int>();

            collection.AddRange(knownItems);

            Assert.False(collection.TryRemove(unknownItem));
        }
예제 #4
0
        public void TryRemoveOfLastItemShouldEmptyTheArray()
        {
            var       collection = new CopyOnWriteCollection <int>();
            const int lastItem   = 3;

            collection.AddRange(new[] { lastItem });

            collection.TryRemove(lastItem);

            Assert.Equal(new int[0], collection.Snapshot);
        }
예제 #5
0
        public void TryRemoveShouldDecrementCountForKnownItem()
        {
            var knownItems = Enumerable.Range(0, 5).ToArray();
            var collection = new CopyOnWriteCollection <int>();

            collection.AddRange(knownItems);

            collection.TryRemove(knownItems[2]);

            Assert.Equal(knownItems.Length - 1, collection.Count);
        }
예제 #6
0
        public void TryRemoveShouldRemoveKnownItem()
        {
            var knownItems = Enumerable.Range(0, 5).ToArray();
            var collection = new CopyOnWriteCollection <int>();

            collection.AddRange(knownItems);

            collection.TryRemove(knownItems[2]);

            Assert.DoesNotContain(knownItems[2], collection.Snapshot);
        }
예제 #7
0
        public void TryRemoveShouldNotChangeCountForUnknownItem()
        {
            const int unknownItem = -1;
            var       knownItems  = Enumerable.Range(0, 5).ToArray();
            var       collection  = new CopyOnWriteCollection <int>();

            collection.AddRange(knownItems);

            collection.TryRemove(unknownItem);

            Assert.Equal(knownItems.Length, collection.Count);
        }
예제 #8
0
        public void TryRemoveShouldAllowParallelCalls()
        {
            const int nrOfParallelOperations = 100;
            var       items      = Enumerable.Range(0, nrOfParallelOperations).ToArray();
            var       collection = new CopyOnWriteCollection <int>();

            collection.AddRange(items);
            var tryRemoveActions = new Action[nrOfParallelOperations];

            for (var i = 0; i < nrOfParallelOperations; i++)
            {
                var item = i;
                tryRemoveActions[i] = () => collection.TryRemove(item);
            }

            Parallel.Invoke(tryRemoveActions);

            Assert.Equal(0, collection.Count);
        }