public void AffineHash_Hash_Distributes_Byte_Array()
        {
            Random               random = AffineHashTests.Random();
            AffineHash           target = new AffineHash(random);
            IEnumerable <byte[]> values = AffineHashTests.RandomByteArrays(random, 101, 10000);

            AffineHashTests.AssertHashDistribution(target, values);
        }
        public void AffineHash_Hash_Distributes_UInt64()
        {
            Random              random = AffineHashTests.Random();
            AffineHash          target = new AffineHash(random);
            IEnumerable <ulong> values = AffineHashTests.RandomByteArrays(random, sizeof(ulong), 10000)
                                         .Select(b => BitConverter.ToUInt64(b, 0));

            AffineHashTests.AssertHashDistribution(target, values);
        }
        public void AffineHash_Hash_Distributes_Single()
        {
            Random              random = AffineHashTests.Random();
            AffineHash          target = new AffineHash(random);
            IEnumerable <float> values = AffineHashTests.RandomByteArrays(random, sizeof(float), 10000)
                                         .Select(b => BitConverter.ToSingle(b, 0));

            AffineHashTests.AssertHashDistribution(target, values);
        }
        public void AffineHash_Hash_Distributes_Guid()
        {
            Random             random = AffineHashTests.Random();
            AffineHash         target = new AffineHash(random);
            IEnumerable <Guid> values = AffineHashTests.RandomByteArrays(random, 16, 10000)
                                        .Select(b => new Guid(b));

            AffineHashTests.AssertHashDistribution(target, values);
        }
        public void AffineHash_Hash_Distributes_DateTimeOffset()
        {
            Random     random = AffineHashTests.Random();
            AffineHash target = new AffineHash(random);
            IEnumerable <DateTimeOffset> values = AffineHashTests.RandomByteArrays(random, sizeof(ulong), 10000)
                                                  .Select(b => new DateTimeOffset((long)(BitConverter.ToUInt64(b, 0) % (ulong)DateTime.MaxValue.Ticks), TimeSpan.FromMinutes(random.Next(-840, 840))));

            AffineHashTests.AssertHashDistribution(target, values);
        }
        /// <summary>
        /// Generates random character arrays for test data.
        /// </summary>
        /// <param name="random">The random number generator to use.</param>
        /// <param name="length">The length of each character array.</param>
        /// <param name="count">The total number of character arrays to generate.</param>
        /// <returns>A list of random character arrays.</returns>
        private static IEnumerable <char[]> RandomCharArrays(Random random, int length, int count)
        {
            char[] buffer = new char[length];
            foreach (byte[] bytes in AffineHashTests.RandomByteArrays(random, length * sizeof(char), count))
            {
                int o = 0;
                for (int i = 0; i < buffer.Length; i++)
                {
                    buffer[i] = BitConverter.ToChar(bytes, o);
                    o        += sizeof(char);
                }

                yield return(buffer);
            }
        }