public async Task BasicMapperTest <TK, TK1, TV, TV1>(
            IKeyValueStore <TK, TV> underlyingStore,
            ITypeMapper <TK1, TK> keyMapper,
            ITypeMapper <TV1, TV> valueMapper,
            IDictionary <TK1, TV1> items)
        {
            // Arrange
            var keyValueMapper = new KeyValueStoreMapper <TK1, TK, TV1, TV>(underlyingStore, keyMapper, valueMapper);

            // Act
            KeyValuePair <TK1, TV1> item = items.First();
            await keyValueMapper.Put(item.Key, item.Value);

            // Assert
            Option <TV1> value = await keyValueMapper.Get(item.Key);

            Assert.True(value.HasValue);
            Option <TV> underlyingValue = await underlyingStore.Get(keyMapper.From(item.Key));

            Assert.True(underlyingValue.HasValue);
            Assert.Equal(underlyingValue.OrDefault(), valueMapper.From(value.OrDefault()));
        }