public void two_arg_factory_result_is_created_only_once()
        {
            Foo.InstantiationCount = 0;
            CachingFactory<int, int, Foo> fooFactory = new CachingFactory<int, int, Foo>(
                (num1, num2) => new Foo(num1)
            );

            var foo1 = fooFactory.Get(1, 2);
            for (int i = 0; i < 10; i++)
                foo1 = fooFactory.Get(1,2);
            Assert.AreEqual(Foo.InstantiationCount, 1);

            var foo2 = fooFactory.Get(3, 4);
            for (int i = 0; i < 10; i++)
                foo1 = fooFactory.Get(3, 4);
            Assert.AreEqual(Foo.InstantiationCount, 2);

            fooFactory.Evict(1, 2);
            foo1 = fooFactory.Get(1, 2);
            Assert.AreEqual(Foo.InstantiationCount, 3);
        }
        public void result_is_created_only_once()
        {
            Foo.InstantiationCount = 0;
            CachingFactory<int, Foo> fooFactory = new CachingFactory<int, Foo>(
                (num) => new Foo(num)
            );

            var foo1 = fooFactory[1];
            for (int i = 0; i < 10; i++)
                foo1 = fooFactory[1];
            Assert.AreEqual(Foo.InstantiationCount, 1);

            var foo2 = fooFactory[2];
            for (int i = 0; i < 10; i++)
                foo1 = fooFactory[2];
            Assert.AreEqual(Foo.InstantiationCount, 2);

            fooFactory.Evict(1);
            foo1 = fooFactory[1];
            Assert.AreEqual(Foo.InstantiationCount, 3);
        }