public void TestEquivalence()
        {
            Fingerprint fp1 = new Fingerprint(65);
            Fingerprint fp2 = new Fingerprint(65);
            Fingerprint fp3 = new Fingerprint(64);
            Fingerprint fp4 = new Fingerprint(66);

            // Reference first
            Assert.True(fp1.IsEquivalent(fp1));
            Assert.True(fp2.IsEquivalent(fp2));
            Assert.True(fp3.IsEquivalent(fp3));
            Assert.True(fp4.IsEquivalent(fp4));

            // Length second

            Assert.True(fp3.IsEquivalent(fp1));
            Assert.False(fp1.IsEquivalent(fp3));

            Assert.False(fp4.IsEquivalent(fp2));
            Assert.True(fp2.IsEquivalent(fp4));

            // Bits third

            Assert.True(fp1.IsEquivalent(fp2));
            Assert.True(fp2.IsEquivalent(fp1));

            fp1.Touch(32);
            Assert.False(fp1.IsEquivalent(fp2));
            Assert.True(fp2.IsEquivalent(fp1));

            fp2.Touch(32);
            Assert.True(fp1.IsEquivalent(fp2));
            Assert.True(fp2.IsEquivalent(fp1));

            fp2.Touch(31);
            Assert.True(fp1.IsEquivalent(fp2));
            Assert.False(fp2.IsEquivalent(fp1));

            fp4.Touch(31);
            fp4.Touch(32);
            fp4.Touch(33);
            Assert.True(fp2.IsEquivalent(fp4));
            Assert.False(fp4.IsEquivalent(fp2));
        }