import XCTest import Foundation @testable import ForgeOffload final class HashingTests: XCTestCase { // xxHash64 official spec vectors (seed 0). func testXXHash64SpecVectors() { XCTAssertEqual(XXHash64.hash(Data()), 0xEF46_DB37_51D8_E999) XCTAssertEqual(XXHash64.hash(Data([0x9E])), 0x4FCE_394C_C88952D8) // "Nobody inspects the spammish repetition" — widely published vector. let spam = Data("Nobody inspects the spammish repetition".utf8) XCTAssertEqual(XXHash64.hash(spam), 0xFBCE_A83C_8A378BF1) } // Known ASCII vector. func testXXHash64Ascii() { XCTAssertEqual(XXHash64.hash(Data("xxhash".utf8)), 0x32DD_38952C_4BC720) } // Streaming hash == whole-buffer hash for multi-MB input crossing block sizes. func testStreamingMatchesWhole() { var data = Data() var seed: UInt64 = 0x12345678 for _ in 0..<(3 * 1024 * 1024 / 8) { seed = seed &* 6364136223846793005 &+ 1442695040888963407 withUnsafeBytes(of: seed) { data.append(contentsOf: $0) } } let whole = XXHash64.hash(data) var streamer = XXHash64() // Uneven chunk sizes to exercise buffering. var offset = 0 let chunks = [1, 31, 32, 33, 4096, 1_000_000] var i = 0 while offset < data.count { let size = min(chunks[i % chunks.count], data.count - offset) streamer.update(data.subdata(in: offset..