twonly-app-dependencies/hashlib/test/crc16_test.dart
2025-12-07 16:10:41 +01:00

103 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-16 code for "123456789"
var known = {
CRC16Params.ibm: 0xBB3D,
CRC16Params.ccitt: 0x2189,
CRC16Params.arinc: 0xEBA4,
CRC16Params.cms: 0xAEE7,
CRC16Params.dds110: 0x9ECF,
CRC16Params.maximDow: 0x44C2,
CRC16Params.modbus: 0x4B37,
CRC16Params.umts: 0xFEE8,
CRC16Params.usb: 0xB4C8,
CRC16Params.genibus: 0xD64E,
CRC16Params.gsm: 0xCE3C,
CRC16Params.ibm3740: 0x29B1,
CRC16Params.ccittFalse: 0x29B1,
CRC16Params.ibmSdlc: 0x906E,
CRC16Params.x25: 0x906E,
CRC16Params.iso: 0xBF05,
CRC16Params.mcrf4xx: 0x6F91,
CRC16Params.riello: 0x63D0,
CRC16Params.augCcitt: 0xE5CC,
CRC16Params.spiFujitsu: 0xE5CC,
CRC16Params.tms37157: 0x26B1,
CRC16Params.xmodem: 0x31C3,
CRC16Params.cdma2000: 0x4C06,
CRC16Params.dectR: 0x007E,
CRC16Params.dectX: 0x007F,
CRC16Params.dnp: 0xEA82,
CRC16Params.en13757: 0xC2B7,
CRC16Params.lj1200: 0xBDF4,
CRC16Params.nrsc5: 0xA066,
CRC16Params.m17: 0x772B,
CRC16Params.opensafetyA: 0x5D38,
CRC16Params.opensafetyB: 0x20FE,
CRC16Params.profibus: 0xA819,
CRC16Params.t10Dif: 0xD0DB,
CRC16Params.teledisk: 0x0FB3,
};
void main() {
group('CRC test', () {
test("name", () {
expect(crc16.name, 'CRC-16/ARC');
});
test("name for defined polynomial", () {
expect(CRC16(CRC16Params.arinc).name, 'CRC-16/ARINC');
});
test("name for custom polynomial", () {
expect(CRC16(CRC16Params(0x1919)).name, 'CRC-16/1919');
});
test('code with an empty string', () {
expect(crc16code(""), 0);
});
test('with a string', () {
expect(crc16.string("Wikipedia").hex(), "ee3e");
});
test('code with a string', () {
expect(crc16.code("Wikipedia", utf8), 0xee3e);
});
test('createSink produces same result for same input', () {
final sink1 = crc16.createSink();
sink1.add(utf8.encode("TestString"));
final result1 = sink1.digest().hex();
final sink2 = crc16.createSink();
sink2.add(utf8.encode("TestString"));
final result2 = sink2.digest().hex();
expect(result1, equals(result2));
});
test('sink test', () {
final sink = crc16.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, 2);
expect(sink.closed, isTrue);
});
for (var e in known.entries) {
test('check "${e.key.name}"', () {
expect(crc16code("123456789", params: e.key), e.value);
});
}
});
}