95 lines
2.8 KiB
Dart
95 lines
2.8 KiB
Dart
// Copyright (c) 2023, Sudipto Chandra
|
|
// All rights reserved. Check LICENSE file for details.
|
|
|
|
import 'dart:convert';
|
|
|
|
import 'package:hashlib/hashlib.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
/// CRC-64 code for "123456789"
|
|
var known = {
|
|
CRC64Params.iso: '46a5a9388a5beffe',
|
|
CRC64Params.ecma: '6c40df5f0b497347',
|
|
CRC64Params.goIso: 'b90956c775a41001',
|
|
CRC64Params.ms: '75d4b74f024eceea',
|
|
CRC64Params.we: '62ec59e3f1a4f00a',
|
|
CRC64Params.jones: 'caa717168609f281',
|
|
CRC64Params.goEcma: '995dc9bbdf1939fa',
|
|
CRC64Params.xz: '995dc9bbdf1939fa',
|
|
CRC64Params.redis: 'e9c6d914c4b8d9ca',
|
|
CRC64Params.nvme: 'ae8b14860a799888',
|
|
};
|
|
|
|
void main() {
|
|
group('CRC-64 test', () {
|
|
test("name", () {
|
|
expect(crc64.name, 'CRC-64/ISO-HDLC');
|
|
});
|
|
test("name for defined polynomial", () {
|
|
expect(CRC64(CRC64Params.ecma).name, 'CRC-64/ECMA-182');
|
|
});
|
|
test("name for custom polynomial", () {
|
|
expect(CRC64(CRC64Params(0x1919)).name, 'CRC-64/1919');
|
|
});
|
|
|
|
test('code with an empty string', () {
|
|
expect(crc64code(""), 0);
|
|
});
|
|
test('with a string', () {
|
|
expect(crc64.string("Wikipedia").hex(), "352d6c9d31566506");
|
|
});
|
|
test('code with a string', () {
|
|
expect(crc64code("Wikipedia"), (0x352d6c9d << 32) | 0x31566506);
|
|
}, tags: ['vm-only']);
|
|
test('hex output', () {
|
|
expect(crc64sum("Wikipedia"), "352d6c9d31566506");
|
|
});
|
|
|
|
test('createSink produces same result for same input', () {
|
|
final sink1 = crc64.createSink();
|
|
sink1.add(utf8.encode("TestString"));
|
|
final result1 = sink1.digest().hex();
|
|
|
|
final sink2 = crc64.createSink();
|
|
sink2.add(utf8.encode("TestString"));
|
|
final result2 = sink2.digest().hex();
|
|
|
|
expect(result1, equals(result2));
|
|
});
|
|
|
|
test('sink test', () {
|
|
final sink = crc64.createSink();
|
|
expect(sink.closed, isFalse);
|
|
sink.add([10, 20]);
|
|
expect(sink.closed, isFalse);
|
|
sink.close();
|
|
expect(sink.closed, isTrue);
|
|
expect(() => sink.add([10]), throwsStateError);
|
|
sink.reset();
|
|
expect(sink.closed, isFalse);
|
|
sink.add([10, 20, 30]);
|
|
expect(sink.digest().length, 8);
|
|
expect(sink.closed, isTrue);
|
|
});
|
|
|
|
test('CRC64Params.hex', () {
|
|
var params = CRC64Params.hex(
|
|
poly: '42F0E1EBA9EA3693',
|
|
seed: 'FFFFFFFFFFFFFFFF',
|
|
xorOut: 'FFFFFFFFFFFFFFFF',
|
|
);
|
|
expect(params.high, 0x42F0E1EB);
|
|
expect(params.low, 0xA9EA3693);
|
|
expect(params.seedHigh, 0xFFFFFFFF);
|
|
expect(params.seedLow, 0xFFFFFFFF);
|
|
expect(params.xorOutHigh, 0xFFFFFFFF);
|
|
expect(params.xorOutLow, 0xFFFFFFFF);
|
|
});
|
|
|
|
for (var e in known.entries) {
|
|
test('check "${e.key.name}"', () {
|
|
expect(crc64sum("123456789", params: e.key), e.value);
|
|
});
|
|
}
|
|
});
|
|
}
|