public void Create_Regularly_ShouldHaveHighEntropyInLow5Bytes() { var results = new List <ulong>(); for (var i = 0; i < 100; i++) { results.Add(RandomSequence6.Create()); } var sumValuesPerByte = new int[5]; Span <byte> bytes = stackalloc byte[8]; foreach (var result in results) { BinaryPrimitives.WriteUInt64BigEndian(bytes, result); for (var i = 0; i < sumValuesPerByte.Length; i++) { sumValuesPerByte[i] += bytes[8 - sumValuesPerByte.Length + i]; } } var averageValuesPerByte = new int[sumValuesPerByte.Length]; for (var i = 0; i < sumValuesPerByte.Length; i++) { averageValuesPerByte[i] = sumValuesPerByte[i] / results.Count; } // Each byte should have an average value close to 127 foreach (var value in averageValuesPerByte) { Assert.True(value >= 102 && value <= 152); } // The average of the averages should be very close to 127 var totalAverage = averageValuesPerByte.Average(); Assert.True(totalAverage >= 120 && totalAverage <= 134); }
public void Create_Regularly_ShouldLeaveHigh16BitsZero() { var result = RandomSequence6.Create(); Assert.Equal(0UL, result >> (64 - 16)); }
public void Create_Regularly_ShouldBeNonzero() { var result = RandomSequence6.Create(); Assert.NotEqual(0UL, result); }