Ejemplo n.º 1
0
        public void TestDequeueByInsertion()
        {
            var test = new LurchTableTest <int, string>(LurchTableOrder.Insertion);

            Assert.AreEqual(LurchTableOrder.Insertion, test.Ordering);
            var sample = GetSample();

            Array.Reverse(sample);
            foreach (var item in sample)
            {
                test.Add(item.Key, item.Value);
            }

            KeyValuePair <int, string> value;

            foreach (var item in sample)
            {
                Assert.IsTrue(test.Peek(out value));
                Assert.AreEqual(item.Key, value.Key);
                Assert.AreEqual(item.Value, value.Value);
                value = test.Dequeue();
                Assert.AreEqual(item.Key, value.Key);
                Assert.AreEqual(item.Value, value.Value);
            }

            Assert.IsFalse(test.Peek(out value));
            Assert.IsFalse(test.TryDequeue(out value));
        }
Ejemplo n.º 2
0
        public void TestAddRemoveByKey()
        {
            LurchTableTest <int, string> test = new LurchTableTest <int, string>();

            for (int i = 0; i < 10; i++)
            {
                test.Add(i, i.ToString());
            }

            for (int i = 0; i < 10; i++)
            {
                Assert.IsTrue(test.ContainsKey(i));
            }

            string cmp;

            for (int i = 0; i < 10; i++)
            {
                Assert.IsTrue(test.TryGetValue(i, out cmp) && cmp == i.ToString());
            }

            for (int i = 0; i < 10; i++)
            {
                Assert.IsTrue(test.Remove(i));
            }
        }
Ejemplo n.º 3
0
        public void TestTryRoutines()
        {
            var data = new LurchTableTest <int, string>();

            Assert.IsTrue(data.TryAdd(1, "a"));
            Assert.IsFalse(data.TryAdd(1, "a"));

            Assert.IsTrue(data.TryUpdate(1, "a"));
            Assert.IsTrue(data.TryUpdate(1, "c"));
            Assert.IsTrue(data.TryUpdate(1, "d", "c"));
            Assert.IsFalse(data.TryUpdate(1, "f", "c"));
            Assert.AreEqual("d", data[1]);
            Assert.IsTrue(data.TryUpdate(1, "a", data[1]));
            Assert.AreEqual("a", data[1]);
            Assert.IsFalse(data.TryUpdate(2, "b"));

            string val;

            Assert.IsTrue(data.TryRemove(1, out val) && val == "a");
            Assert.IsFalse(data.TryRemove(2, out val));
            Assert.AreNotEqual(val, "a");

            Assert.IsFalse(data.TryUpdate(1, (k, x) => x.ToUpper()));
            data[1] = "a";
            data[1] = "b";
            Assert.IsTrue(data.TryUpdate(1, (k, x) => x.ToUpper()));
            Assert.AreEqual("B", data[1]);
        }
Ejemplo n.º 4
0
        public void TestAtomicInterfaces()
        {
            var data = new LurchTableTest <int, string>();

            data[1] = "a";

            AddUpdateValue update = new AddUpdateValue();

            Assert.IsFalse(data.AddOrUpdate(1, ref update));
            Assert.AreEqual("a", update.OldValue);
            Assert.IsFalse(data.AddOrUpdate(2, ref update));
            Assert.IsNull(update.OldValue);
            Assert.IsFalse(data.TryRemove(1, ref update));
            Assert.AreEqual("a", update.OldValue);

            Assert.AreEqual(1, data.Count);
            Assert.AreEqual("a", data[1]);

            update.Value = "b";
            Assert.IsTrue(data.AddOrUpdate(1, ref update));
            Assert.AreEqual("a", update.OldValue);
            Assert.IsTrue(data.AddOrUpdate(2, ref update));
            Assert.IsNull(update.OldValue);

            Assert.AreEqual(2, data.Count);
            Assert.AreEqual("b", data[1]);
            Assert.AreEqual("b", data[2]);

            Assert.IsTrue(data.TryRemove(1, ref update));
            Assert.AreEqual("b", update.OldValue);
            Assert.IsTrue(data.TryRemove(2, ref update));
            Assert.AreEqual("b", update.OldValue);
            Assert.AreEqual(0, data.Count);
        }
Ejemplo n.º 5
0
        public void TestAtomicAddOrUpdate()
        {
            var data = new LurchTableTest <int, string>();

            int[] counter = new int[] { -1 };

            for (int i = 0; i < 100; i++)
            {
                data.AddOrUpdate(i, (k) => (++counter[0]).ToString(), (k, v) => { throw new InvalidOperationException(); });
            }

            for (int i = 0; i < 100; i++)
            {
                Assert.AreEqual((i & 1) == 1, data.TryRemove(i, (k, v) => (int.Parse(v) & 1) == 1));
            }

            for (int i = 0; i < 100; i++)
            {
                data.AddOrUpdate(i, (k) => (++counter[0]).ToString(), (k, v) => (++counter[0]).ToString());
            }

            Assert.AreEqual(100, data.Count);
            Assert.AreEqual(200, counter[0] + 1);

            for (int i = 0; i < 100; i++)
            {
                Assert.IsTrue(data.TryRemove(i, (k, v) => int.Parse(v) - 100 == i));
            }

            Assert.AreEqual(0, data.Count);
        }
Ejemplo n.º 6
0
        public void TestDequeueByModified()
        {
            var test = new LurchTableTest <int, string>(LurchTableOrder.Modified);

            Assert.AreEqual(LurchTableOrder.Modified, test.Ordering);
            var sample = GetSample();

            foreach (var item in sample)
            {
                test.Add(item.Key, item.Value);
            }

            Array.Reverse(sample);
            for (int i = 0; i < sample.Length; i++)
            {
                var item = new KeyValuePair <int, string>(sample[i].Key, sample[i].Value + "-2");
                test[item.Key] = item.Value;
                sample[i]      = item;
            }

            KeyValuePair <int, string> value;

            foreach (var item in sample)
            {
                Assert.IsTrue(test.Peek(out value));
                Assert.AreEqual(item.Key, value.Key);
                Assert.AreEqual(item.Value, value.Value);
                value = test.Dequeue();
                Assert.AreEqual(item.Key, value.Key);
                Assert.AreEqual(item.Value, value.Value);
            }

            Assert.IsFalse(test.Peek(out value));
            Assert.IsFalse(test.TryDequeue(out value));
        }
Ejemplo n.º 7
0
        public void TestDisposed()
        {
            IConcurrentDictionary <int, string> test = new LurchTableTest <int, string>(new IntComparer());

            test.Dispose();
            test.Add(1, "");
        }
Ejemplo n.º 8
0
        public void TestInitialize()
        {
            LurchTableTest <string, string> test = new LurchTableTest <string, string>(StringComparer.Ordinal);

            test["a"] = "b";
            Assert.AreEqual(1, test.Count);
            test.Initialize();
            Assert.AreEqual(0, test.Count);
        }
Ejemplo n.º 9
0
        public void TestValues()
        {
            LurchTableTest <string, string> test = new LurchTableTest <string, string>();

            test["a"] = "b";
            string all = String.Join("", new List <string>(test.Values).ToArray());

            Assert.AreEqual("b", all);
        }
Ejemplo n.º 10
0
        public void TestKeys()
        {
            LurchTableTest <string, string> test = new LurchTableTest <string, string>(new StringComparerNoCase());

            test["a"] = "b";
            string all = String.Join("", new List <string>(test.Keys).ToArray());

            Assert.AreEqual("a", all);
        }
Ejemplo n.º 11
0
        public void TestGetOrAdd()
        {
            var data = new LurchTableTest <int, string>();

            Assert.AreEqual("a", data.GetOrAdd(1, "a"));
            Assert.AreEqual("a", data.GetOrAdd(1, "b"));

            Assert.AreEqual("b", data.GetOrAdd(2, k => "b"));
            Assert.AreEqual("b", data.GetOrAdd(2, k => "c"));
        }
Ejemplo n.º 12
0
        public void TestNewAddOrUpdate()
        {
            var data = new LurchTableTest <int, string>();

            Assert.AreEqual("a", data.AddOrUpdate(1, "a", (k, v) => k.ToString()));
            Assert.AreEqual("1", data.AddOrUpdate(1, "a", (k, v) => k.ToString()));

            Assert.AreEqual("b", data.AddOrUpdate(2, k => "b", (k, v) => k.ToString()));
            Assert.AreEqual("2", data.AddOrUpdate(2, k => "b", (k, v) => k.ToString()));
        }
Ejemplo n.º 13
0
        public void TestDisposed()
        {
            IDictionary <int, string> test = new LurchTableTest <int, string>();
            var disposable = test as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
            Assert.Throws <ObjectDisposedException>(() => { test.Add(1, ""); });
        }
Ejemplo n.º 14
0
        public void TestComparer()
        {
            var test = new LurchTableTest <string, string>(StringComparer.OrdinalIgnoreCase);

            test["a"] = "b";
            Assert.IsTrue(test.ContainsKey("A"));

            test      = new LurchTableTest <string, string>(StringComparer.OrdinalIgnoreCase);
            test["a"] = "b";
            Assert.IsTrue(test.ContainsKey("A"));
        }
Ejemplo n.º 15
0
        public void TestDisposed()
        {
            IDictionary <int, string> test = new LurchTableTest <int, string>();
            var disposable = test as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
            test.Add(1, "");
        }
Ejemplo n.º 16
0
        public void TestAtomicAdd()
        {
            var data = new LurchTableTest <int, string>();

            int[] counter = new int[] { -1 };
            for (int i = 0; i < 100; i++)
            {
                Assert.IsTrue(data.TryAdd(i, (k) => (++counter[0]).ToString()));
            }
            Assert.AreEqual(100, data.Count);
            Assert.AreEqual(100, counter[0] + 1);

            //Inserts of existing keys will not call method
            Assert.IsFalse(data.TryAdd(50, (k) => { throw new InvalidOperationException(); }));
            Assert.AreEqual(100, data.Count);
        }