76 lines
2.6 KiB
Dart
76 lines
2.6 KiB
Dart
// Copyright (c) 2023, Sudipto Chandra
|
|
// All rights reserved. Check LICENSE file for details.
|
|
|
|
import 'dart:math';
|
|
|
|
import 'package:hashlib/hashlib.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
final tests = {
|
|
"": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
|
"a": "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8",
|
|
"abc": "a9993e364706816aba3e25717850c26c9cd0d89d",
|
|
"123": "40bd001563085fc35165329ea1ff5c5ecbdbbeef",
|
|
"test": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",
|
|
'message': "6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d",
|
|
"Hello World": "0a4d55a8d778e5022fab701977c5d840bbc486d0",
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":
|
|
"761c457bf73b14d27e9e9265c46f4b4dda11f940",
|
|
"12345678901234567890123456789012345678901234567890123456789012345678901234567890":
|
|
"50abf5706a150990a08b2c5ea40fa0e585554732",
|
|
"The quick brown fox jumps over the lazy dog":
|
|
"2fd4e1c67a2d28fced849ee1bb76e7391b93eb12",
|
|
"The quick brown fox jumps over the lazy cog":
|
|
"de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3",
|
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":
|
|
"84983e441c3bd26ebaae4aa1f95129e5e54670f1",
|
|
List.filled(512, "a").join(): "164557facb73929875168c1e92caf09bb6064564",
|
|
List.filled(128, "a").join(): "ad5b3fdbcb526778c2839d2f151ea753995e26a0",
|
|
List.filled(513, "a").join(): "87ecd7233dbe9d7543a9a199fc671a90e469873d",
|
|
List.filled(511, "a").join(): "b9370eafb7ac772c6c1dc6b88ac9ad466b880ea1",
|
|
List.filled(1000000, "a").join(): "34aa973cd4c4daa4f61eeb2bdbad27316534016f",
|
|
};
|
|
|
|
void main() {
|
|
group('SHA1 test', () {
|
|
test('with empty string', () {
|
|
expect(sha1sum(""), tests[""]);
|
|
});
|
|
|
|
test('with single letter', () {
|
|
expect(sha1sum("a"), tests["a"]);
|
|
});
|
|
|
|
test('with few letters', () {
|
|
expect(sha1sum("abc"), tests["abc"]);
|
|
});
|
|
|
|
test('with longest string', () {
|
|
var last = tests.entries.last;
|
|
expect(sha1sum(last.key), last.value);
|
|
});
|
|
|
|
test('with string of length 511', () {
|
|
var key = tests.keys.firstWhere((x) => x.length == 511);
|
|
var value = tests[key]!;
|
|
expect(sha1sum(key), value);
|
|
});
|
|
|
|
test('with known cases', () {
|
|
tests.forEach((key, value) {
|
|
expect(sha1sum(key), value);
|
|
});
|
|
});
|
|
|
|
test('with stream', () async {
|
|
for (final entry in tests.entries) {
|
|
final stream = Stream.fromIterable(
|
|
List.generate(1 + (entry.key.length >>> 3), (i) => i << 3))
|
|
.map((e) => entry.key.substring(e, min(entry.key.length, e + 8)))
|
|
.map((s) => s.codeUnits);
|
|
final result = await sha1.bind(stream).first;
|
|
expect(result.hex(), entry.value);
|
|
}
|
|
});
|
|
});
|
|
}
|