Skip to content

Commit

Permalink
Fix XXHash for stripe size (#61881)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tornhoof authored Nov 22, 2021
1 parent 8daae66 commit f1edeed
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private static int StaticHash(ReadOnlySpan<byte> source, Span<byte> destination,
int totalLength = source.Length;
State state = new State((uint)seed);

while (source.Length > StripeSize)
while (source.Length >= StripeSize)
{
state.ProcessStripe(source);
source = source.Slice(StripeSize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ private static int StaticHash(ReadOnlySpan<byte> source, Span<byte> destination,
int totalLength = source.Length;
State state = new State((ulong)seed);

while (source.Length > StripeSize)
while (source.Length >= StripeSize)
{
state.ProcessStripe(source);
source = source.Slice(StripeSize);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.007.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -77,6 +79,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"CABC8ABD"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"AD98EBD3")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -90,6 +92,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"65242024"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"29DA7472")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32();
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash32Tests.f00d.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetHashesThis3 = DotNetHashesThis + DotNetHashesThis + DotNetHashesThis;
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string DotNetNCHashing3 = DotNetNCHashing + DotNetNCHashing + DotNetNCHashing;
private const string SixteenBytes = ".NET Hashes This";
private const string SixteenBytes3 = SixteenBytes + SixteenBytes + SixteenBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -77,6 +79,11 @@ public static IEnumerable<object[]> TestCases
$"{DotNetNCHashing} (x3)",
Encoding.ASCII.GetBytes(DotNetNCHashing3),
"5A513E6D"),
// stripe size
new TestCase(
$"{SixteenBytes} (x3)",
Encoding.ASCII.GetBytes(SixteenBytes3),
"B38A9A45")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash32(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.007.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -87,6 +89,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"D6095B93EB10BEDA"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"45116421CF932B1F")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64(Seed);
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -103,6 +105,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"239C7B3A85BD22B3"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"975E3E6FE7E67FBC")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64();
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/System.IO.Hashing/tests/XxHash64Tests.f00d.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public static IEnumerable<object[]> TestCases
private const string DotNetNCHashing = ".NET now has non-crypto hashing";
private const string SixtyThreeBytes = "A sixty-three byte test input requires substantial forethought!";
private const string SixtyThreeBytes3 = SixtyThreeBytes + SixtyThreeBytes + SixtyThreeBytes;
private const string ThirtyTwoBytes = "This string has 32 ASCII bytes..";
private const string ThirtyTwoBytes3 = ThirtyTwoBytes + ThirtyTwoBytes + ThirtyTwoBytes;

protected static IEnumerable<TestCase> TestCaseDefinitions { get; } =
new[]
Expand Down Expand Up @@ -87,6 +89,11 @@ public static IEnumerable<object[]> TestCases
$"{SixtyThreeBytes} (x3)",
Encoding.ASCII.GetBytes(SixtyThreeBytes3),
"6F1C62EB48EA2FEC"),
// stripe size
new TestCase(
$"{ThirtyTwoBytes} (x3)",
Encoding.ASCII.GetBytes(ThirtyTwoBytes3),
"B358EB96B8E3E7AD")
};

protected override NonCryptographicHashAlgorithm CreateInstance() => new XxHash64(Seed);
Expand Down

0 comments on commit f1edeed

Please sign in to comment.