public void InvertedLookupReactiveEntityCollection_ArgumentChecks()
        {
            var inner = new ReactiveEntityCollection <string, string>(StringComparer.Ordinal);

            AssertEx.ThrowsException <ArgumentNullException>(() => _ = new InvertedLookupReactiveEntityCollection <string, string>(default(IReactiveEntityCollection <string, string>), StringComparer.Ordinal), ex => Assert.AreEqual("collection", ex.ParamName));
            AssertEx.ThrowsException <ArgumentNullException>(() => _ = new InvertedLookupReactiveEntityCollection <string, string>(inner, null), ex => Assert.AreEqual("valueComparer", ex.ParamName));
        }
Beispiel #2
0
        public void ReactiveEntityCollection_RemoveDuringClone()
        {
            var collection = new ReactiveEntityCollection <int, int>(EqualityComparer <int> .Default);
            var count      = 100;
            var repeat     = 1000;

            for (var i = 0; i < count; ++i)
            {
                Assert.IsTrue(collection.TryAdd(i, i * i));
            }

            var rand = new Random();

            for (var i = 0; i < repeat; ++i)
            {
                var cloned = default(ReadOnlyReactiveEntityCollection <int, int>);
                var target = rand.Next(count);

                var t1 = Task.Run(() =>
                {
                    cloned = collection.Clone();
                });

                var t2 = Task.Run(() =>
                {
                    collection.TryRemove(target, out var unused);
                });

                Task.WaitAll(t1, t2);

                foreach (var key in cloned.RemovedKeys)
                {
                    Assert.IsFalse(cloned.Entries.TryGetValue(key, out var unused));
                }
            }
        }