public void FNV1_Implementation_HashSizeInBits_MatchesConfig()
        {
            var validHashSizes = Enumerable.Range(1, 1024).Select(i => i * 32);

            foreach (var hashSize in validHashSizes)
            {
                var fnvConfigMock = new Mock <IFNVConfig>();
                {
                    fnvConfigMock.SetupGet(fc => fc.HashSizeInBits)
                    .Returns(hashSize);

                    fnvConfigMock.SetupGet(fc => fc.Prime)
                    .Returns(BigInteger.One);

                    fnvConfigMock.SetupGet(fc => fc.Offset)
                    .Returns(BigInteger.One);

                    fnvConfigMock.Setup(fc => fc.Clone())
                    .Returns(() => fnvConfigMock.Object);
                }


                var fnv1 = new FNV1_Implementation(fnvConfigMock.Object);

                Assert.Equal(hashSize, fnv1.HashSizeInBits);
            }
        }
        public void FNV1_Implementation_Config_IsCloneOfClone()
        {
            var fnvConfig3 = Mock.Of <IFNVConfig>();
            var fnvConfig2 = Mock.Of <IFNVConfig>(fc => fc.HashSizeInBits == 32 && fc.Prime == BigInteger.One && fc.Offset == BigInteger.One && fc.Clone() == fnvConfig3);
            var fnvConfig  = Mock.Of <IFNVConfig>(fc => fc.Clone() == fnvConfig2);


            var fnv1Hash = new FNV1_Implementation(fnvConfig);

            Assert.Equal(fnvConfig3, fnv1Hash.Config);
        }