public void PublicFetchOrCreateItemPassesArgument()
        {
            // Arrange
            ReaderWriterCacheHelper <int, string> helper = new ReaderWriterCacheHelper <int, string>();
            Dictionary <int, string> cache = helper.PublicCache;

            // Act
            string item = helper.PublicFetchOrCreateItem(42, (string argument) => argument, "new");

            // Assert
            Assert.Equal("new", cache[42]);
            Assert.Equal("new", item);
        }
Ejemplo n.º 2
0
        public void PublicFetchOrCreateItemCreatesItemIfNotAlreadyInCache()
        {
            // Arrange
            ReaderWriterCacheHelper <int, string> helper = new ReaderWriterCacheHelper <int, string>();
            Dictionary <int, string> cache = helper.PublicCache;

            // Act
            string item = helper.PublicFetchOrCreateItem(42, () => "new");

            // Assert
            Assert.Equal("new", cache[42]);
            Assert.Equal("new", item);
        }
Ejemplo n.º 3
0
        public void PublicFetchOrCreateItemReturnsExistingItemIfFound()
        {
            // Arrange
            ReaderWriterCacheHelper <int, string> helper = new ReaderWriterCacheHelper <int, string>();
            Dictionary <int, string> cache = helper.PublicCache;

            helper.PublicCache[42] = "original";

            // Act
            string item = helper.PublicFetchOrCreateItem(42, () => "new");

            // Assert
            Assert.Equal("original", cache[42]);
            Assert.Equal("original", item);
        }
Ejemplo n.º 4
0
        public void PublicFetchOrCreateItemReturnsFirstItemIfTwoThreadsUpdateCacheSimultaneously()
        {
            // Arrange
            ReaderWriterCacheHelper <int, string> helper = new ReaderWriterCacheHelper <int, string>();
            Dictionary <int, string> cache   = helper.PublicCache;
            Func <string>            creator = delegate() {
                // fake a second thread coming along when we weren't looking
                string firstItem = helper.PublicFetchOrCreateItem(42, () => "original");

                Assert.AreEqual("original", cache[42], "Cache should have been updated.");
                Assert.AreEqual("original", firstItem);
                return("new");
            };

            // Act
            string secondItem = helper.PublicFetchOrCreateItem(42, creator);

            // Assert
            Assert.AreEqual("original", cache[42], "Cache should not have been updated by outer thread.");
            Assert.AreEqual("original", secondItem);
        }