blob: 2c6431f311b611a02e1039bd27d904ca046668c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Text;
using VNLib.Hashing.Checksums;
namespace VNLib.Hashing.Tests
{
[TestClass()]
public class Fnv1aTests
{
const string KnownDataInputUtf81 = "Hello world, this is a test of the FNV1a algorithm";
const string KnownData64ChecksumHex1 = "033b9d1635f1c2ad";
const string KnownDataInputUtf82 = "Hello world, this is another, slightly different test of the FNV1a algorithm!";
const string KnownData64ChecksumHex2 = "a802c807e941c5d3";
[TestMethod()]
public void Fnv1a64Known1()
{
TestKnownData(KnownDataInputUtf81, KnownData64ChecksumHex1);
TestKnownData(KnownDataInputUtf82, KnownData64ChecksumHex2);
}
static void TestKnownData(string input, string knownChecksumHex)
{
byte[] knownInput = Encoding.UTF8.GetBytes(input);
ulong knownChecksum = Convert.ToUInt64(knownChecksumHex, 16);
ulong checksum = FNV1a.Compute64(knownInput);
Assert.AreEqual(knownChecksum, checksum);
//Split input into 2 parts
byte[] part1 = knownInput[..(knownInput.Length / 2)];
byte[] part2 = knownInput[(knownInput.Length / 2)..];
//Compute checksum of part1
ulong checksum1 = FNV1a.Compute64(part1);
ulong outputChecksum = FNV1a.Update64(checksum1, part2);
Assert.AreNotEqual(checksum1, outputChecksum);
Assert.AreEqual(knownChecksum, outputChecksum);
}
}
}
|