Lindenii Project Forge
Login

hare-ds

Data structures for Hare
Commit info
ID
8a3ab1c3d948a4a9004828bed2be74c673e5a836
Author
Runxi Yu <me@runxiyu.org>
Author date
Wed, 17 Sep 2025 04:07:52 +0800
Committer
Runxi Yu <me@runxiyu.org>
Committer date
Wed, 17 Sep 2025 04:07:52 +0800
Actions
Add test for swiss
use ds::map;
use errors;

fn testhash(_params: nullable *opaque, key: []u8) size = {
	let val: u64 = 0;
	let limit = if (len(key) < 8z) len(key) else 8z;
	for (let i = 0z; i < limit; i += 1) {
		val |= (key[i]: u64) << (8u64 * (i: u64));
	};
	return (val: size);
};

@test fn invalid() void = {
	match (new(0, &testhash, null)) {
	case errors::invalid => void;
	case *map => abort("swiss: accepted n_groups=0");
	case nomem => abort("swiss: nomem for n_groups=0");
	};
};

@test fn test() void = {
	const groups: [3]size = [1z, 17z, 128z];

	for (let gi = 0z; gi < len(groups); gi += 1) {
		let m = match (new(groups[gi], &testhash, null)) {
		case let p: *map => yield p;
		case errors::invalid => abort("swiss: invalid parameters");
		case nomem => abort("swiss: nomem");
		};
		defer finish(m);
		map::stress_test(m, 20000);
	};
};