Files
AR-Menu/Library/PackageCache/com.unity.sharp-zip-lib@6b61f82b0cb3/Tests/Runtime/Src/Checksum/ChecksumTests.cs
2025-11-30 08:35:03 +02:00

188 lines
6.6 KiB
C#

using Unity.SharpZipLib.Checksum;
using NUnit.Framework;
using System;
using System.Diagnostics;
namespace Unity.SharpZipLib.Tests.Checksum
{
[TestFixture]
[Category("Checksum")]
internal class ChecksumTests
{
private readonly
// Represents ASCII string of "123456789"
byte[] check = { 49, 50, 51, 52, 53, 54, 55, 56, 57 };
// Represents string "123456789123456789123456789123456789"
private readonly byte[] longCheck = {
49, 50, 51, 52, 53, 54, 55, 56, 57,
49, 50, 51, 52, 53, 54, 55, 56, 57,
49, 50, 51, 52, 53, 54, 55, 56, 57,
49, 50, 51, 52, 53, 54, 55, 56, 57
};
[Test]
public void Adler_32()
{
var underTestAdler32 = new Adler32();
Assert.AreEqual(0x00000001, underTestAdler32.Value);
underTestAdler32.Update(check);
Assert.AreEqual(0x091E01DE, underTestAdler32.Value);
underTestAdler32.Reset();
Assert.AreEqual(0x00000001, underTestAdler32.Value);
exceptionTesting(underTestAdler32);
}
const long BufferSize = 256 * 1024 * 1024;
[Test]
public void Adler_32_Performance()
{
var rand = new Random(1);
var buffer = new byte[BufferSize];
rand.NextBytes(buffer);
var adler = new Adler32();
Assert.AreEqual(0x00000001, adler.Value);
var sw = new Stopwatch();
sw.Start();
adler.Update(buffer);
sw.Stop();
Console.WriteLine($"Adler32 Hashing of 256 MiB: {sw.Elapsed.TotalSeconds:f4} second(s)");
adler.Update(check);
Assert.AreEqual(0xD4897DA3, adler.Value);
exceptionTesting(adler);
}
[Test]
public void CRC_32_BZip2()
{
var underTestBZip2Crc = new BZip2Crc();
Assert.AreEqual(0x0, underTestBZip2Crc.Value);
underTestBZip2Crc.Update(check);
Assert.AreEqual(0xFC891918, underTestBZip2Crc.Value);
underTestBZip2Crc.Reset();
Assert.AreEqual(0x0, underTestBZip2Crc.Value);
exceptionTesting(underTestBZip2Crc);
}
[Test]
public void CRC_32_BZip2_Long()
{
var underTestCrc32 = new BZip2Crc();
underTestCrc32.Update(longCheck);
Assert.AreEqual(0xEE53D2B2, underTestCrc32.Value);
}
[Test]
public void CRC_32_BZip2_Unaligned()
{
// Extract "456" and CRC
var underTestCrc32 = new BZip2Crc();
underTestCrc32.Update(new ArraySegment<byte>(check, 3, 3));
Assert.AreEqual(0x001D0511, underTestCrc32.Value);
}
[Test]
public void CRC_32_BZip2_Long_Unaligned()
{
// Extract "789123456789123456" and CRC
var underTestCrc32 = new BZip2Crc();
underTestCrc32.Update(new ArraySegment<byte>(longCheck, 15, 18));
Assert.AreEqual(0x025846E0, underTestCrc32.Value);
}
[Test]
public void CRC_32()
{
var underTestCrc32 = new Crc32();
Assert.AreEqual(0x0, underTestCrc32.Value);
underTestCrc32.Update(check);
Assert.AreEqual(0xCBF43926, underTestCrc32.Value);
underTestCrc32.Reset();
Assert.AreEqual(0x0, underTestCrc32.Value);
exceptionTesting(underTestCrc32);
}
[Test]
public void CRC_32_Long()
{
var underTestCrc32 = new Crc32();
underTestCrc32.Update(longCheck);
Assert.AreEqual(0x3E29169C, underTestCrc32.Value);
}
[Test]
public void CRC_32_Unaligned()
{
// Extract "456" and CRC
var underTestCrc32 = new Crc32();
underTestCrc32.Update(new ArraySegment<byte>(check, 3, 3));
Assert.AreEqual(0xB1A8C371, underTestCrc32.Value);
}
[Test]
public void CRC_32_Long_Unaligned()
{
// Extract "789123456789123456" and CRC
var underTestCrc32 = new Crc32();
underTestCrc32.Update(new ArraySegment<byte>(longCheck, 15, 18));
Assert.AreEqual(0x31CA9A2E, underTestCrc32.Value);
}
private void exceptionTesting(IChecksum crcUnderTest)
{
bool exception = false;
try
{
crcUnderTest.Update(null);
}
catch (ArgumentNullException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing a null buffer should cause an ArgumentNullException");
// reset exception
exception = false;
try
{
crcUnderTest.Update(new ArraySegment<byte>(null, 0, 0));
}
catch (ArgumentNullException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing a null buffer should cause an ArgumentNullException");
// reset exception
exception = false;
try
{
crcUnderTest.Update(new ArraySegment<byte>(check, -1, 9));
}
catch (ArgumentOutOfRangeException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing a negative offset should cause an ArgumentOutOfRangeException");
// reset exception
exception = false;
try
{
crcUnderTest.Update(new ArraySegment<byte>(check, 10, 0));
}
catch (ArgumentException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing an offset greater than buffer.Length should cause an ArgumentException");
// reset exception
exception = false;
try
{
crcUnderTest.Update(new ArraySegment<byte>(check, 0, -1));
}
catch (ArgumentOutOfRangeException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing a negative count should cause an ArgumentOutOfRangeException");
// reset exception
exception = false;
try
{
crcUnderTest.Update(new ArraySegment<byte>(check, 0, 10));
}
catch (ArgumentException)
{
exception = true;
}
Assert.IsTrue(exception, "Passing a count + offset greater than buffer.Length should cause an ArgumentException");
}
}
}