hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

+test.ha (2265B)


      1 // SPDX-License-Identifier: MPL-2.0
      2 // (c) Hare authors <https://harelang.org>
      3 
      4 use encoding::hex;
      5 use fmt;
      6 use hash;
      7 use strings;
      8 use test;
      9 
     10 @test fn sha1() void = {
     11 	let sha = sha1();
     12 	const vectors = [
     13 		("", "da39a3ee5e6b4b0d3255bfef95601890afd80709"),
     14 		("abc", "a9993e364706816aba3e25717850c26c9cd0d89d"),
     15 		("hello world", "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"),
     16 		("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "84983e441c3bd26ebaae4aa1f95129e5e54670f1"),
     17 		("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", "a49b2446a02c645bf419f995b67091253a04a259"),
     18 		// From Pro Git Chapter 10.2
     19 		// https://git-scm.com/book/en/v2/Git-Internals-Git-Objects#_object_storage
     20 		// output of: echo -n 'what is up, doc?' | git hash-object --stdin
     21 		("blob 16\0what is up, doc?", "bd9dbf5aae1a3862dd1526723246b20206e5fc37"),
     22 		("Hare is a cool language", "947feae3d0d65cc083c8f3e87858206e36aae908"),
     23 		("'UNIX was not designed to stop its users from doing stupid things, as that would also stop them from doing clever things' - Doug Gwyn", "05c8dd2605161bdd0b5d70f1f225f4dd69a01e3b"),
     24 		("'Life is too short to run proprietary software' - Bdale Garbee", "91ad4bdc2fbe2b731cbe8bf2958099391c7af3b8"),
     25 		("'The central enemy of reliability is complexity.' - Geer et al", "4b6eb2aa55ef59cc59be6d181c64141e7c1e5eab"),
     26 	];
     27 
     28 	for (let i = 0z; i < len(vectors); i += 1) {
     29 		const vector = vectors[i];
     30 		hash::reset(&sha);
     31 		hash::write(&sha, strings::toutf8(vector.0));
     32 
     33 		let sum: [SZ]u8 = [0...];
     34 		hash::sum(&sha, sum);
     35 
     36 		let shahex = hex::encodestr(sum);
     37 		defer free(shahex);
     38 		if (shahex != vector.1) {
     39 			fmt::errorfln("Vector {}: {} != {}", i, shahex, vector.1)!;
     40 			abort();
     41 		};
     42 	};
     43 };
     44 
     45 @test fn sha1_1gb() void = {
     46 	test::require("slow");
     47 
     48 	const input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno";
     49 	const expected = "7789f0c9ef7bfc40d93311143dfbe69e2017f592";
     50 
     51 	let sha = sha1();
     52 
     53 	for (let i = 0z; i < 16777216; i += 1)
     54 		hash::write(&sha, strings::toutf8(input));
     55 
     56 	let sum: [SZ]u8 = [0...];
     57 	hash::sum(&sha, sum);
     58 
     59 	let shahex = hex::encodestr(sum);
     60 
     61 	if (shahex != expected) {
     62 		fmt::errorfln("1GB vector: {} != {}", shahex, expected)!;
     63 		abort();
     64 	};
     65 };