summaryrefslogtreecommitdiff
path: root/comparray/+test.ha
blob: df257d3a6ffa87da0d8aefb1af1bc8f83a95467f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use bufio;
use fmt;
use math::random;
use os;

@test fn struct_size() void = {
	assert(size(Array) == 3 * size(*opaque));
};

const TEST_SIZES: [_]u8 = [
	CONSTANT, 2, 3, 4, 5, 6, 7, 8, 16, 17, 32, 33, 100, 200, 255,
	DIRECT,
];
const TEST_ARRAYLEN: size = 4096;

@test fn consistency() void = {
	let rng = random::init(42);

	for (let i = 0z; i < len(TEST_SIZES); i += 1) {
		for (let j = i + 1; j < len(TEST_SIZES); j += 1) {
			fmt::printf("{},{} ", TEST_SIZES[i], TEST_SIZES[j])!;

			let array = new(TEST_SIZES[i], TEST_ARRAYLEN);
			defer clear(&array, 0);

			let palette = get_palette(&array);

			for (let k = 0z; k < TEST_SIZES[i]; k += 1) {
				palette[k] = random::next(&rng): u16;
			};

			let unpacked: []u16 = alloc([], TEST_ARRAYLEN);
			defer free(unpacked);

			for (let k = 0z; k < TEST_ARRAYLEN; k += 1) {
				const ref =
					random::u32n(&rng, TEST_SIZES[i]): u8;
				static append(unpacked, palette[ref]);
				set(&array, k, ref);
			};

			grow_palette(&array, TEST_ARRAYLEN, TEST_SIZES[j]);

			for (let k = 0z; k < TEST_ARRAYLEN; k += 1) {
				assert(
					lookup(&array, get(&array, k))
					== unpacked[k]
				);
			};
		};
	};
};