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

173 lines
4.9 KiB
Dart

import 'package:base_codecs/base_codecs.dart' as base_codecs;
import 'package:hashlib_codecs/hashlib_codecs.dart';
import 'package:test/test.dart';
import './utils.dart';
void main() {
group('Test base16', () {
test('parameter overrides', () {
var a = toHex([12]);
expect(a, "0c");
a = toHex(
[12],
codec: Base16Codec.upper,
);
expect(a, "0C");
a = toHex(
[12],
codec: Base16Codec.lower,
upper: true,
);
expect(a, "0c");
});
test('encoding <-> decoding', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var r = toHex(b);
expect(fromHex(r), equals(b), reason: 'length $i');
}
});
test('encoding <-> decoding uppercase', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var r = toHex(b, upper: true);
expect(fromHex(r), equals(b), reason: 'length $i');
}
});
group("encoding", () {
test('[] => empty string', () {
expect(toHex([]), "");
});
test('[5] => 05', () {
expect(toHex([5]), "05");
});
test('[12] => 0c', () {
expect(toHex([12]), "0c");
});
test('[16] => 10', () {
expect(toHex([16]), "10");
});
test('[0,0,0] => 000000 ', () {
var inp = [0, 0, 0];
var out = "000000";
expect(toHex(inp), equals(out));
});
test('random', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var hex = b.map((x) => x.toRadixString(16).padLeft(2, '0')).join();
expect(toHex(b), hex, reason: 'length $i');
}
});
group('buffer', () {
var buf = [
244, 11, 21, 63, 222, 56, 63, 111, 57, 64, 22, 56, 32, //
55, 115, 178, 138, 230, 251
];
var lowerHex = "f40b153fde383f6f39401638203773b28ae6fb";
var upperHex = "F40B153FDE383F6F39401638203773B28AE6FB";
test("lower", () {
expect(toHex(buf), lowerHex);
});
test("upper", () {
expect(toHex(buf, upper: true), upperHex);
});
});
});
group("decoding", () {
test('empty string => []', () {
expect(fromHex(""), []);
});
test('5 => [5]', () {
expect(fromHex("5"), [5]);
});
test('c => [12]', () {
expect(fromHex("c"), [12]);
});
test('0c => [12]', () {
expect(fromHex("0c"), [12]);
});
test('00c => [0, 12]', () {
expect(fromHex("00c"), [0, 12]);
});
test('000c => [0, 12]', () {
expect(fromHex("000c"), [0, 12]);
});
test('0000c => [0, 0, 12]', () {
expect(fromHex("0000c"), [0, 0, 12]);
});
test('000000 => [0,0,0]', () {
var inp = [0, 0, 0];
var out = "000000";
expect(fromHex(out), equals(inp));
});
test('random', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var hex = b.map((x) => x.toRadixString(16).padLeft(2, '0')).join();
expect(fromHex(hex), equals(b), reason: 'length $i');
}
});
group('buffer', () {
var buf = [
244, 11, 21, 63, 222, 56, 63, 111, 57, 64, 22, 56, 32, //
55, 115, 178, 138, 230, 251
];
var lowerHex = "f40b153fde383f6f39401638203773b28ae6fb";
var upperHex = "F40B153FDE383F6F39401638203773B28AE6FB";
test("lower", () {
expect(fromHex(lowerHex), equals(buf));
});
test("upper", () {
expect(fromHex(upperHex), equals(buf));
});
});
group('with invalid chars', () {
test('Error', () {
expect(() => fromHex("Error"), throwsFormatException);
});
test('-10', () {
expect(() => fromHex("-10"), throwsFormatException);
});
test('something', () {
expect(() => fromHex("something"), throwsFormatException);
});
});
});
group('compare against package: base_codecs', () {
test('encoding', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var hashlib = toHex(b, upper: true);
var base = base_codecs.base16.encode(b);
expect(base, hashlib, reason: 'length $i');
}
});
test('decoding (lowercase)', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var h = toHex(b);
var hashlib = fromHex(h);
var base = base_codecs.base16.decode(h);
expect(base, hashlib, reason: 'length $i');
}
});
test('decoding (uppercase)', () {
for (int i = 0; i < 100; ++i) {
var b = randomBytes(i);
var h = toHex(b, upper: true);
var hashlib = fromHex(h);
var base = base_codecs.base16.decode(h);
expect(base, hashlib, reason: 'length $i');
}
});
});
});
}