Esempio n. 1
0
        public void GetOrAdd_WithEmptyDictionary_ReturnsAddedObject()
        {
            LocalCache       cache        = new LocalCache();
            TestStringObject resultString = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasAdded) as TestStringObject;

            Assert.Equal(TestString1, resultString.Value);
            Assert.True(wasAdded);
        }
Esempio n. 2
0
        public void AddOrUpdate_WithEmptyDictionary_ReturnsUpdatedObject()
        {
            FailOnErrors = false;

            LocalCache       cache        = new LocalCache();
            TestStringObject resultString = cache.AddOrUpdate(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasUpdated) as TestStringObject;

            Assert.Equal(TestString1, resultString.Value);
            Assert.True(wasUpdated);
        }
Esempio n. 3
0
        public void Get_WithExistingTypeParameter_ReturnsValue()
        {
            LocalCache       cache          = new LocalCache();
            TestStringObject getOrAddResult = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasAdded) as TestStringObject;

            Assert.Equal(TestString1, getOrAddResult.Value);
            Assert.True(wasAdded);

            TestStringObject getResult = cache.Get(typeof(TestStringObject)) as TestStringObject;

            Assert.Equal(TestString1, getResult.Value);
        }
Esempio n. 4
0
        public void AddOrUpdate_WithRepeatedEntry_ReturnsSecondObject()
        {
            LocalCache       cache         = new LocalCache();
            TestStringObject resultString1 = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasAdded) as TestStringObject;

            Assert.Equal(TestString1, resultString1.Value);
            Assert.True(wasAdded);

            TestStringObject resultString2 = cache.AddOrUpdate(typeof(TestStringObject), () => new TestStringObject(TestString2), out bool wasUpdated) as TestStringObject;

            Assert.Equal(resultString2.Value, TestString2);
            Assert.True(wasUpdated);
        }
Esempio n. 5
0
        public void GetOrAdd_WithRepeatedEntry_ReturnsFirstObject()
        {
            LocalCache       cache         = new LocalCache();
            TestStringObject resultString1 = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasAdded) as TestStringObject;

            Assert.Equal(TestString1, resultString1.Value);
            Assert.True(wasAdded);

            TestStringObject resultString2 = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString2), out wasAdded) as TestStringObject;

            Assert.Equal(TestString1, resultString2.Value);
            Assert.False(wasAdded);
        }
Esempio n. 6
0
        public void GetOrAdd_WithNonEmptyDictionary_ReturnsAddedObject()
        {
            LocalCache        cache     = new LocalCache();
            TestIntegerObject resultInt = cache.GetOrAdd(typeof(TestIntegerObject), () => new TestIntegerObject(TestInteger), out bool wasAdded) as TestIntegerObject;

            Assert.Equal(TestInteger, resultInt.Value);
            Assert.True(wasAdded, "GetOrAdd added an entry to the cache.");

            TestStringObject resultString = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out wasAdded) as TestStringObject;

            Assert.Equal(TestString1, resultString.Value);
            Assert.True(wasAdded, "GetOrAdd added an entry to the cache.");
        }
Esempio n. 7
0
        public void AddOrUpdate_InParallelWithNonEmptyDictionary_ReturnsUpdatedObject()
        {
            FailOnErrors = false;

            LocalCache cache = new LocalCache();

            Parallel.For(0, 10, i =>
            {
                TestIntegerObject resultInt = cache.AddOrUpdate(typeof(TestIntegerObject), () => new TestIntegerObject(TestInteger), out bool wasUpdated) as TestIntegerObject;
                Assert.Equal(TestInteger, resultInt.Value);
                Assert.True(wasUpdated);

                TestStringObject resultString = cache.AddOrUpdate(typeof(TestStringObject), () => new TestStringObject(TestString1), out wasUpdated) as TestStringObject;
                Assert.Equal(TestString1, resultString.Value);
                Assert.True(wasUpdated);
            });
        }
Esempio n. 8
0
        public void GetOrAdd_InParallelWithEmptyDictionary_ReturnsAddedObject()
        {
            LocalCache cache    = new LocalCache();
            int        addCount = 0;

            Parallel.For(0, 10, i =>
            {
                TestStringObject resultString = cache.GetOrAdd(typeof(TestStringObject), () => new TestStringObject(TestString1), out bool wasAdded) as TestStringObject;
                Assert.Equal(TestString1, resultString.Value);
                if (wasAdded)
                {
                    Interlocked.Increment(ref addCount);
                }
            });

            Assert.Equal(addCount, 1);
        }