public void Getter_ResultIsReturned()
        {
            var krw = new KeyedReaderWriter<object, object>(k => 42, (k, v) => false, null);
            var result = krw.Get(null);

            Assert.IsTrue(42 == (int)result);
        }
        public void Setter_IsCalled()
        {
            bool executed = false;
            var krw = new KeyedReaderWriter<object, object>(k => null, (k, v) => { executed = true; return false; }, null);

            krw.Set(null, null);
            Assert.IsTrue(executed);
        }
        public void Setter_ValueIsUsed()
        {
            object result = null;

            var krw = new KeyedReaderWriter<object, object>(k => null, (k, v) => { result = v; return true; }, null);
            krw.Set(null, 42);

            Assert.IsTrue(42 == (int)result);
        }
        public void Setter_ResultIsReturned()
        {
            bool returnValue = false;

            var krw = new KeyedReaderWriter<object, object>(k => null, (k, v) => returnValue, null);
            Assert.IsFalse(krw.Set(null, null));

            returnValue = true;
            Assert.IsTrue(krw.Set(null, null));
        }
        public void FromKeyedReaderWriter_UsesReaderWriter()
        {
            int result = 0;
            var krw = new KeyedReaderWriter<int, int>(x => x * 2, (i, v) => { result = i * v; return true; }, null);

            var indexer = Indexer.FromKeyedReaderWriter(krw);

            Assert.AreEqual(2, indexer[1]);
            Assert.AreEqual(4, indexer[2]);
            Assert.AreEqual(6, indexer[3]);

            indexer[2] = 4;
            Assert.AreEqual(8, result);

            indexer[3] = 3;
            Assert.AreEqual(9, result);
        }
        public void FromKeyedReaderWriter_UsesKnownIndexes()
        {
            var krw = new KeyedReaderWriter<int, int>(x => x, (i, v) => true, () => new[]{1,2,3,4,5});
            var indexer = Indexer.FromKeyedReaderWriter(krw);

            Assert.IsTrue(indexer.SequenceEqual(new[] { 1, 2, 3, 4, 5 }));
        }