public void TryRemove(int i) { var thing = new ConcurrentIndexed <int, string>(); Assert.True(thing.TryAdd(i, "world")); Assert.Single(thing); Assert.True(thing.TryRemove(i, out var value)); Assert.Empty(thing); Assert.Equal("world", value); Assert.True(thing.TryAdd(i, "world")); Assert.Single(thing); }
public void AddAndRemove() { var random = new Random(); for (int i = 0; i < 10000; i++) { const int V = 1000; var check = new int[V]; var thing = new ConcurrentIndexed <int, string>(); int count = 0; Parallel.Invoke(new int[10000].Select <int, Action>(_ => () => { var value = random.Next(1000); if (random.Next(2) == 1) { if (thing.TryAdd(value, value.ToString())) { Interlocked.Increment(ref check[value]); Interlocked.Increment(ref count); } } else { if (thing.TryRemove(value, out var _)) { Interlocked.Decrement(ref check[value]); Interlocked.Decrement(ref count); } } }).ToArray()); Assert.Equal(count, thing.Count); for (int j = 0; j < V; j++) { Assert.Equal(check[j] > 0, thing.ContainsKey(j)); } foreach (var item in thing) { Assert.True(check[item.Key] > 0); } } }