예제 #1
0
        public void TestsNativeCachePutAndGet()
        {
            var cache = new NativeCache <string>(3);

            Assert.AreEqual(3, cache.size);
            foreach (var slot in cache.slots)
            {
                Assert.IsNull(slot);
            }
            foreach (var hit in cache.hits)
            {
                Assert.AreEqual(0, hit);
            }

            cache.Put("1", "one");
            foreach (var hit in cache.hits)
            {
                Assert.AreEqual(0, hit);
            }
            for (int i = 0; i < cache.size; i++)
            {
                if (i == 1)
                {
                    Assert.AreEqual("1", cache.slots[1]);
                    Assert.AreEqual("one", cache.values[1]);
                }
                else
                {
                    Assert.AreEqual(null, cache.slots[i]);
                    Assert.AreEqual(null, cache.values[i]);
                }
            }
            cache.Put("2", "two");
            foreach (var hit in cache.hits)
            {
                Assert.AreEqual(0, hit);
            }
            for (int i = 0; i < cache.size; i++)
            {
                if (i == 1)
                {
                    Assert.AreEqual("1", cache.slots[1]);
                    Assert.AreEqual("one", cache.values[1]);
                }
                else if (i == 2)
                {
                    Assert.AreEqual("2", cache.slots[2]);
                    Assert.AreEqual("two", cache.values[2]);
                }
                else
                {
                    Assert.IsNull(cache.slots[i]);
                    Assert.IsNull(cache.values[i]);
                }
            }
            cache.Put("3", "three");
            foreach (var hit in cache.hits)
            {
                Assert.AreEqual(0, hit);
            }
            for (int i = 0; i < cache.size; i++)
            {
                if (i == 0)
                {
                    Assert.AreEqual("3", cache.slots[0]);
                    Assert.AreEqual("three", cache.values[0]);
                }
                else if (i == 1)
                {
                    Assert.AreEqual("1", cache.slots[1]);
                    Assert.AreEqual("one", cache.values[1]);
                }
                else if (i == 2)
                {
                    Assert.AreEqual("2", cache.slots[2]);
                    Assert.AreEqual("two", cache.values[2]);
                }
                else
                {
                    Assert.IsNull(cache.slots[i]);
                    Assert.IsNull(cache.values[i]);
                }
            }

            var one = cache.Get("1");

            Assert.AreEqual("one", one);
            var two = cache.Get("2");

            Assert.AreEqual("two", two);
            var three = cache.Get("3");

            Assert.AreEqual("three", three);
            foreach (var hit in cache.hits)
            {
                Assert.AreEqual(1, hit);
            }
            two = cache.Get("2");
            Assert.AreEqual("two", two);
            three = cache.Get("3");
            Assert.AreEqual("three", three);
            three = cache.Get("3");
            Assert.AreEqual("three", three);

            Assert.AreEqual(3, cache.hits[0]);
            Assert.AreEqual(1, cache.hits[1]);
            Assert.AreEqual(2, cache.hits[2]);

            cache.Put("5", "five");
            Assert.AreEqual(2, cache.HashFun("5"));
            for (int i = 0; i < cache.size; i++)
            {
                if (i == 0)
                {
                    Assert.AreEqual("3", cache.slots[0]);
                    Assert.AreEqual("three", cache.values[0]);
                }
                else if (i == 1)
                {
                    Assert.AreEqual("5", cache.slots[1]);
                    Assert.AreEqual("five", cache.values[1]);
                }
                else if (i == 2)
                {
                    Assert.AreEqual("2", cache.slots[2]);
                    Assert.AreEqual("two", cache.values[2]);
                }
                else
                {
                    Assert.IsNull(cache.slots[i]);
                    Assert.IsNull(cache.values[i]);
                }
            }

            Assert.AreEqual(3, cache.hits[0]);
            Assert.AreEqual(0, cache.hits[1]);
            Assert.AreEqual(2, cache.hits[2]);

            cache.Put("6", "six");
            Assert.AreEqual(0, cache.HashFun("6"));
            for (int i = 0; i < cache.size; i++)
            {
                if (i == 0)
                {
                    Assert.AreEqual("3", cache.slots[0]);
                    Assert.AreEqual("three", cache.values[0]);
                }
                else if (i == 1)
                {
                    Assert.AreEqual("6", cache.slots[1]);
                    Assert.AreEqual("six", cache.values[1]);
                }
                else if (i == 2)
                {
                    Assert.AreEqual("2", cache.slots[2]);
                    Assert.AreEqual("two", cache.values[2]);
                }
                else
                {
                    Assert.IsNull(cache.slots[i]);
                    Assert.IsNull(cache.values[i]);
                }
            }

            Assert.AreEqual(3, cache.hits[0]);
            Assert.AreEqual(0, cache.hits[1]);
            Assert.AreEqual(2, cache.hits[2]);
        }