public void CRC_Implementation_Config_IsCloneOfClone()
        {
            var crcConfig3 = Mock.Of <ICRCConfig>();
            var crcConfig2 = Mock.Of <ICRCConfig>(cc => cc.HashSizeInBits == 32 && cc.Clone() == crcConfig3);
            var crcConfig  = Mock.Of <ICRCConfig>(cc => cc.Clone() == crcConfig2);


            var crcHash = new CRC_Implementation(crcConfig);

            Assert.Equal(crcConfig3, crcHash.Config);
        }
        public void CRC_Implementation_HashSizeInBits_MatchesConfig()
        {
            var validHashSizes = Enumerable.Range(1, 64);

            foreach (var hashSize in validHashSizes)
            {
                var crcConfigMock = new Mock <ICRCConfig>();
                {
                    crcConfigMock.SetupGet(cc => cc.HashSizeInBits)
                    .Returns(hashSize);

                    crcConfigMock.Setup(cc => cc.Clone())
                    .Returns(() => crcConfigMock.Object);
                }


                var crc = new CRC_Implementation(crcConfigMock.Object);

                Assert.Equal(hashSize, crc.HashSizeInBits);
            }
        }