public void Test_IsKey_WhenKeyExists()
        {
            var cache = new NativeCache <int>(3);

            cache.Put("a", 1);
            cache.Put("b", 2);
            cache.Put("c", 3);

            cache.Get("a");
            cache.Get("a");
            cache.Get("a");
            cache.Get("b");
            cache.Get("b");
            cache.Get("c");
            cache.Put("d", 4);

            Assert.AreEqual(true, cache.IsKey("a"));
            Assert.AreEqual(true, cache.IsKey("b"));
            Assert.AreEqual(true, cache.IsKey("d"));
            Assert.AreEqual(false, cache.IsKey("c"));
            CollectionAssert.AreEqual(new int[] { 0, 3, 2 }, cache.hits);
            Assert.AreEqual(1, cache.Get("a"));
            Assert.AreEqual(2, cache.Get("b"));
            Assert.AreEqual(4, cache.Get("d"));
        }
        public void TestPutGetCount_9()
        {
            NativeCache <int> cache = new NativeCache <int>(8);

            cache.Put("6", 3);

            int[]    v     = cache.values;
            string[] s     = cache.slots;
            int[]    h     = cache.hits;
            int      index = 0;

            for (int i = 0; i < 8; i++)
            {
                if (cache.values[i] != 0)
                {
                    index = i;
                }
            }

            Assert.AreEqual(3, cache.values[index]);
            Assert.AreEqual(true, cache.slots[index] != null);
            Assert.AreEqual(0, cache.hits[index]);
            Assert.AreEqual(3, cache.Get("6"));
            Assert.AreEqual(1, cache.hits[index]);
        }
示例#3
0
        public void TestDifferentCaches()
        {
            Cache cache1 = new NativeCache(/*"cache1"*/);
            Cache cache2 = new NativeCache(/*"cache2"*/);

            cache1.Add("A", 5);
            Assert.AreEqual(cache2.Get <int>("A"), 5);
        }
示例#4
0
        public void TestCachingRemoveSilent()
        {
            Cache cache = new NativeCache();

            cache.Add("key1", 123456);
            cache.Remove("key1");
            Assert.AreEqual(cache.Get <int>("key1", 0), 0);
        }
示例#5
0
        public void TestCachingRemove()
        {
            Cache cache = new NativeCache();

            cache.Add("key1", 123456);

            cache.Remove("key1");
            cache.Get <int>("key1");
        }
示例#6
0
        public void TestCachingExpiration()
        {
            Cache cache = new NativeCache();

            cache.Add("entry", 123, TimeSpan.FromTicks(1));

            Thread.Sleep(TimeSpan.FromSeconds(1));

            cache.Get <int>("entry");
        }
        public void Test_IsKey_WithNoSuchKey()
        {
            var cache = new NativeCache <int>(3);

            cache.Put("b", 2);

            var result = cache.IsKey("a");

            Assert.AreEqual(false, result);
        }
示例#8
0
 private Context(ILogger logger, MemoryCache memoryCache,
                 DiskCache diskCache, NativeCache nativeCache,
                 Dictionary <Type, Type> awaiters, Dictionary <Type, Type> mappers)
 {
     Logger       = logger;
     MemoryCache  = memoryCache;
     DiskCache    = diskCache;
     NativeCache  = nativeCache;
     awaiterTypes = awaiters;
     mapperTypes  = mappers;
 }
示例#9
0
            public void Destroy()
            {
                memoryCache = null;

                diskCache?.Dispose();
                diskCache = null;

                nativeCache?.Dispose();
                nativeCache = null;

                Instance = null;
            }
示例#10
0
        public void TestComplexObject()
        {
            Cache cache = new NativeCache();

            ComplexObject obj = new ComplexObject(5, 7);

            cache.Add("object", obj);

            ComplexObject obj2 = cache.Get <ComplexObject>("object");

            Assert.AreEqual(obj.Foo(), obj2.Foo());
        }
示例#11
0
        public void TestCachingPurge()
        {
            Cache cache = new NativeCache();

            cache.Add("key1", 123456);
            cache.Add("key2", 678910);

            cache.Purge();


            Assert.Catch <CacheEntryNotFoundException>(() => cache.Get <int>("key1"));
            Assert.Catch <CacheEntryNotFoundException>(() => cache.Get <int>("key2"));
        }
        public void TestPutGetCount_7()
        {
            NativeCache <int> cache = new NativeCache <int>(4);

            cache.Put("3", 2);

            for (int i = 0; i < 4; i++)
            {
                if (cache.values[i] != 0)
                {
                    Assert.AreEqual(2, cache.values[i]);
                    Assert.AreEqual("3", cache.slots[i]);
                }
            }
        }
        public void TestPutGetCount_2()
        {
            // Создание и заполнение кэша целочисленными значениями.
            // 4 значения с ключами от 0 до 3 включительно.
            // Все значения равные 1.
            //
            NativeCache <int> cache = new NativeCache <int>(4);

            for (int i = 0; i < cache.size; i++)
            {
                cache.Put("" + i, 1);
            }


            // Проверка на наличие элементов спомощью метода Get().
            //  Таким образом активируя счетчик запросов.
            //
            Assert.AreEqual(true, cache.Get("2") == 1);
            Assert.AreEqual(true, cache.Get("0") == 1);
            Assert.AreEqual(true, cache.Get("1") == 1);


            // Замещение одного элемента другим(новые ключ и значение).
            //  Обнуление счетчика запроса по замещаемому ключу.
            //
            // Проверка на наличие ключей и их значений.
            //  Ключ "2" подвергается меньшему количеству запросов для его дальнейшего замещения.
            //
            //
            cache.Put("new", 11);
            Assert.AreEqual(true, cache.Get("2") == 1);
            Assert.AreEqual(true, cache.Get("0") == 1);
            Assert.AreEqual(true, cache.Get("1") == 1);
            Assert.AreEqual(true, cache.Get("1") == 1);
            Assert.AreEqual(true, cache.Get("0") == 1);
            Assert.AreEqual(true, cache.Get("new") == 11);
            Assert.AreEqual(true, cache.Get("new") == 11);
            Assert.AreEqual(true, cache.Get("new") == 11);

            cache.Put("new2", 12);

            Assert.AreEqual(true, cache.Get("new") == 11);
            Assert.AreEqual(true, cache.Get("new2") == 12);
            Assert.AreEqual(true, cache.Get("0") == 1);
            Assert.AreEqual(true, cache.Get("1") == 1);
        }
示例#14
0
            public Builder(Context context)
            {
                logger      = context.Logger;
                memoryCache = context.MemoryCache;
                diskCache   = context.DiskCache;
                nativeCache = context.NativeCache;

                foreach (var p in context.awaiterTypes)
                {
                    awaiterTypes[p.Key] = p.Value;
                }

                foreach (var p in context.mapperTypes)
                {
                    mapperTypes[p.Key] = p.Value;
                }
            }
        public void TestPutGetCount_3()
        {
            NativeCache <int> cache = new NativeCache <int>(4);

            for (int i = 0; i < cache.size; i++)
            {
                cache.Put("" + i, 1);
            }

            Assert.AreEqual(1, cache.Get("0"));
            Assert.AreEqual(1, cache.Get("1"));
            Assert.AreEqual(1, cache.Get("3"));

            cache.Put("new", 11);
            Assert.AreEqual(11, cache.Get("new"));
            Assert.AreEqual(1, cache.Get("0"));
            Assert.AreEqual(1, cache.Get("1"));
            Assert.AreEqual(1, cache.Get("3"));
            Assert.AreEqual(0, cache.Get("2"));
        }
示例#16
0
        public void TestZeroKeyRewrite()
        {
            var c = new NativeCache <string>(5);

            c.Put("0", "0");
            c.Put("1", "1");
            c.Put("2", "2");
            c.Put("3", "3");
            c.Put("4", "4");

            c.Get("1");
            c.Get("2");
            c.Get("3");
            c.Get("4");

            c.Put("5", "5");

            Assert.IsTrue(c.IsKey("5"));
            Assert.IsTrue(c.Get("5").Equals("5"));
            Assert.IsTrue(!c.IsKey("0"));
        }
        public void TestPutGetCount_1()
        {
            NativeCache <int> cache = new NativeCache <int>(16);

            for (int i = 0; i < cache.size; i++)
            {
                cache.Put("" + i, 1);
            }


            Assert.AreEqual(1, cache.Get("0"));
            Assert.AreEqual(1, cache.Get("1"));
            Assert.AreEqual(1, cache.Get("2"));
            Assert.AreEqual(1, cache.Get("3"));
            Assert.AreEqual(1, cache.Get("4"));
            Assert.AreEqual(1, cache.Get("5"));
            Assert.AreEqual(1, cache.Get("7"));
            Assert.AreEqual(1, cache.Get("8"));
            Assert.AreEqual(1, cache.Get("9"));
            Assert.AreEqual(1, cache.Get("10"));
            Assert.AreEqual(1, cache.Get("11"));
            Assert.AreEqual(1, cache.Get("12"));
            Assert.AreEqual(1, cache.Get("13"));
            Assert.AreEqual(1, cache.Get("14"));
            Assert.AreEqual(1, cache.Get("15"));

            cache.Put("new", 11);

            for (int i = 0; i < cache.size; i++)
            {
                if (i == 6)
                {
                    Assert.AreEqual(true, cache.Get("new") == 11);
                }
                else
                {
                    Assert.AreEqual(true, cache.Get("" + i) == 1);
                }
            }
        }
示例#18
0
        public void TestCachingAddGet()
        {
            Cache cache = new NativeCache();

            cache.Add("key1", 123456);
            cache.Add("key2", "Hallo Welt");
            cache.Add("key3", 123.456);

            Assert.IsTrue(cache.Contains("key1"));
            Assert.IsTrue(cache.Contains("key2"));
            Assert.IsTrue(cache.Contains("key3"));
            Assert.IsFalse(cache.Contains("non-existing"));
            Assert.AreEqual(cache.Get <int>("key1"), 123456);
            Assert.AreEqual(cache.Get <string>("key2"), "Hallo Welt");
            Assert.AreEqual(cache.Get <double>("key3"), 123.456);
            Assert.AreEqual(cache.Get <int>("non-existing", -1), -1);

            int val;

            Assert.IsTrue(cache.TryGet("key1", out val));
            Assert.AreEqual(val, 123456);
        }
        public void TestPutGetCount_6()
        {
            NativeCache <int> cache = new NativeCache <int>(4);

            for (int i = 0; i < cache.size; i++)
            {
                cache.Put("" + i, 0);
            }

            for (int i = 0; i < 6; i++)
            {
                cache.Get("0");
            }

            for (int i = 0; i < 6; i++)
            {
                cache.Get("1");
            }

            for (int i = 0; i < 6; i++)
            {
                cache.Get("2");
            }

            for (int i = 0; i < 5; i++)
            {
                cache.Get("3");
            }

            cache.Put("3a", 2);

            Assert.AreEqual(0, cache.Get("3"));

            Assert.AreEqual(0, cache.Get("0"));
            Assert.AreEqual(0, cache.Get("1"));
            Assert.AreEqual(0, cache.Get("2"));
            Assert.AreEqual(2, cache.Get("3a"));
        }
示例#20
0
 public void TestCreateCache()
 {
     Cache cache = new NativeCache();
 }
        public void TestPutGetCount_10()
        {
            NativeCache <int> cache = new NativeCache <int>(6);

            cache.Put("1", 1);
            cache.Put("2", 1);
            cache.Put("3", 1);
            cache.Put("4", 1);
            cache.Put("5", 1);
            cache.Put("6", 1);


            // Выполнение запросов 1-6 раз (Значение с ключом "1" - 1 раз, значение с ключом "6" - 6 раз)
            // Пара значение-ключ "1" = 1 будут иметь меньшее число запросов и подлежит вытеснению.
            //
            cache.Get("1");
            cache.Get("2");
            cache.Get("2");
            cache.Get("3");
            cache.Get("3");
            cache.Get("3");
            cache.Get("4");
            cache.Get("4");
            cache.Get("4");
            cache.Get("4");
            cache.Get("5");
            cache.Get("5");
            cache.Get("5");
            cache.Get("5");
            cache.Get("5");
            cache.Get("6");
            cache.Get("6");
            cache.Get("6");
            cache.Get("6");
            cache.Get("6");
            cache.Get("6");


            // Добаление ключ-значение "11" - 2.
            // Происходит вытеснение менее востребованной пары "1" - 1.
            //
            //
            cache.Put("11", 2);
            Assert.AreEqual(0, cache.Get("1"));
            cache.Get("11");
            cache.Get("11");
            cache.Get("11");

            // Добаление ключ-значение "12" - 2.
            // Происходит вытеснение менее востребованной пары "2" - 1.
            //
            //
            cache.Put("12", 2);
            Assert.AreEqual(0, cache.Get("2"));
            cache.Get("12");
            cache.Get("12");
            cache.Get("12");


            Assert.AreEqual(2, cache.Get("11"));
            Assert.AreEqual(2, cache.Get("12"));
            Assert.AreEqual(1, cache.Get("3"));
            Assert.AreEqual(1, cache.Get("4"));
            Assert.AreEqual(1, cache.Get("5"));
            Assert.AreEqual(1, cache.Get("6"));
        }
示例#22
0
 public Builder WithNativeCache(NativeCache nativeCacheArg)
 {
     nativeCache = nativeCacheArg;
     return(this);
 }
示例#23
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]);
        }