示例#1
0
        public void ClearAllEntries()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);

            cache.TryAdd("Foo", Task.FromResult("Bar"));
            cache.TryAdd("Bar", Task.FromResult("Baz"));

            // act
            cache.Clear();

            // assert
            Assert.Equal(0, cache.Usage);
        }
示例#2
0
        public void ClearAllEntries()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);

            cache.TryAdd("Foo", Task.FromResult("Bar"));
            cache.TryAdd("Bar", Task.FromResult("Baz"));

            // act
            cache.Clear();

            // assert
            Assert.Equal(0, cache.Usage);
        }
        public void TryAddTwice()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = new TaskCacheKey("a", "Foo");
            var expected  = Task.FromResult("Bar");
            var another   = Task.FromResult("Baz");

            // act
            var addedFirst  = cache.TryAdd(key, expected);
            var addedSecond = cache.TryAdd(key, another);

            // assert
            Task <string> resolved = cache.GetOrAddTask(key, () => Task.FromResult("Quox"));

            Assert.True(addedFirst);
            Assert.False(addedSecond);
            Assert.Same(expected, resolved);
        }
示例#4
0
        public void TryAddTwice()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = "Foo";
            var expected  = "Bar";
            var another   = "Baz";

            // act
            var addedFirst  = cache.TryAdd(key, expected);
            var addedSecond = cache.TryAdd(key, another);

            // assert
            var exists = cache.TryGetValue(key, out object actual);

            Assert.True(addedFirst);
            Assert.False(addedSecond);
            Assert.True(exists);
            Assert.Equal(expected, (string)actual);
        }
        public void TryAddValueNull()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = new TaskCacheKey("a", "Foo");

            // act
            void Verify() => cache.TryAdd(key, default(Task <string>) !);

            // assert
            Assert.Throws <ArgumentNullException>("value", Verify);
        }
示例#6
0
        public void TryAddValueNull()
        {
            // arrange
            var    cacheSize = 10;
            var    cache     = new TaskCache(cacheSize);
            var    key       = "Foo";
            string value     = null;

            // act
            Action verify = () => cache.TryAdd(key, value);

            // assert
            Assert.Throws <ArgumentNullException>("value", verify);
        }
示例#7
0
        public void TryAddNoException()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = "Foo";
            var value     = "Bar";

            // act
            Action verify = () => cache.TryAdd(key, value);

            // assert
            Assert.Null(Record.Exception(verify));
        }
示例#8
0
        public async Task TryAddTwice()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            var key      = "Foo";
            var expected = Task.FromResult("Bar");
            var another  = Task.FromResult("Baz");

            // act
            var addedFirst  = cache.TryAdd(key, expected);
            var addedSecond = cache.TryAdd(key, another);

            // assert
            var exists = cache.TryGetValue(key, out Task <string> actual);

            Assert.True(addedFirst);
            Assert.False(addedSecond);
            Assert.True(exists);
            Assert.Equal(await expected.ConfigureAwait(false),
                         await actual.ConfigureAwait(false));
        }
示例#9
0
        public void TryAddNoException()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            var key   = "Foo";
            var value = Task.FromResult("Bar");

            // act
            Action verify = () => cache.TryAdd(key, value);

            // assert
            Assert.Null(Record.Exception(verify));
        }
示例#10
0
        public void TryAddKeyNull()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            string key   = null;
            var    value = Task.FromResult("Foo");

            // act
            Action verify = () => cache.TryAdd(key, value);

            // assert
            Assert.Throws <ArgumentNullException>("key", verify);
        }
示例#11
0
        public void TryAddValueNull()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            var           key   = "Foo";
            Task <string> value = null;

            // act
            Action verify = () => cache.TryAdd(key, value);

            // assert
            Assert.Throws <ArgumentNullException>("value", verify);
        }
示例#12
0
        public void TryAddNewCacheEntryWithFactory()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = new TaskCacheKey("a", "Foo");
            var expected  = Task.FromResult("Bar");

            // act
            var added = cache.TryAdd(key, () => expected);

            // assert
            Task <string> resolved = cache.GetOrAddTask(key, () => Task.FromResult("Baz"));

            Assert.True(added);
            Assert.Same(expected, resolved);
        }
示例#13
0
        public void Usage(string[] values, int expectedUsage)
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);

            foreach (var value in values)
            {
                cache.TryAdd($"Key:{value}", value);
            }

            // act
            var result = cache.Usage;

            // assert
            Assert.Equal(expectedUsage, result);
        }
示例#14
0
        public void TryGetValueResultByInteger()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = 1;
            var expected  = "Bar";

            cache.TryAdd(key, expected);

            // act
            var result = cache.TryGetValue(key, out object actual);

            // assert
            Assert.True(result);
            Assert.Equal(expected, (string)actual);
        }
示例#15
0
        public void VerifyExpirationTrue()
        {
            // arrange
            var cacheSize         = 10;
            var slidingExpiration = TimeSpan.FromMilliseconds(500);
            var cache             = new TaskCache <string, string>(cacheSize,
                                                                   slidingExpiration);
            var key = "Foo";

            cache.TryAdd(key, Task.FromResult("Bar"));

            // act
            var exists = cache.TryGetValue(key, out Task <string> actual);

            // assert
            Assert.True(exists);
        }
示例#16
0
        public void TryAddNewCacheEntry()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = "Foo";
            var expected  = "Bar";

            // act
            var added = cache.TryAdd(key, expected);

            // assert
            var exists = cache.TryGetValue(key, out object actual);

            Assert.True(added);
            Assert.True(exists);
            Assert.Equal(expected, (string)actual);
        }
示例#17
0
        public async Task VerifyExpirationFalse()
        {
            // arrange
            var cacheSize         = 10;
            var slidingExpiration = TimeSpan.FromMilliseconds(100);
            var cache             = new TaskCache <string, string>(cacheSize,
                                                                   slidingExpiration);
            var key = "Foo";

            cache.TryAdd(key, Task.FromResult("Bar"));
            await Task.Delay(300).ConfigureAwait(false);

            // act
            var exists = cache.TryGetValue(key, out Task <string> actual);

            // assert
            Assert.False(exists);
        }
示例#18
0
        public void RemoveEntry()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = "Foo";

            cache.TryAdd(key, "Bar");

            // act
            cache.Remove(key);

            // assert
            var exists = cache.TryGetValue(key, out object actual);

            Assert.False(exists);
            Assert.Null(actual);
        }
示例#19
0
        public void RemoveEntry()
        {
            // arrange
            var cacheSize = 10;
            var cache     = new TaskCache(cacheSize);
            var key       = new TaskCacheKey("a", "Foo");
            var value     = Task.FromResult("Bar");

            cache.TryAdd(key, value);

            // act
            cache.TryRemove(key);

            // assert
            Task <string> retrieved = cache.GetOrAddTask(key, () => Task.FromResult("Baz"));

            Assert.NotSame(value, retrieved);
        }
示例#20
0
        public void Usage(string[] values, int expectedUsage)
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);

            foreach (var value in values)
            {
                cache.TryAdd($"Key:{value}", Task.FromResult(value));
            }

            // act
            var result = cache.Usage;

            // assert
            Assert.Equal(expectedUsage, result);
        }
示例#21
0
        public async Task TryGetValueResult()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            var key      = "Foo";
            var expected = Task.FromResult("Bar");

            cache.TryAdd(key, expected);

            // act
            var result = cache.TryGetValue(key, out Task <string> actual);

            // assert
            Assert.True(result);
            Assert.Equal(await expected.ConfigureAwait(false),
                         await actual.ConfigureAwait(false));
        }
示例#22
0
        public void RemoveEntry()
        {
            // arrange
            var      cacheSize         = 10;
            TimeSpan slidingExpiration = TimeSpan.Zero;
            var      cache             = new TaskCache <string, string>(cacheSize,
                                                                        slidingExpiration);
            var key = "Foo";

            cache.TryAdd(key, Task.FromResult("Bar"));

            // act
            cache.Remove(key);

            // assert
            var exists = cache.TryGetValue(key, out Task <string> actual);

            Assert.False(exists);
            Assert.Null(actual);
        }