summaryrefslogtreecommitdiff
path: root/lib/std/test/bytealloc.myr
blob: e6d87d60402159edc62848bda8708a0b29af4b60 (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 std

const main = {
	var a : byte#[1000]

	for sz in [10, 100, 1000, 10000, 10000]
		std.put("sz: {}\n", sz)
		for cnt in [1, 10, 100]
			std.put("cnt: {}\n", cnt)
			/* alloc forwards, dealloc forwards */
			for var i = 0; i < cnt; i++
				a[i] = std.bytealloc(sz)
			;;
			for var i = 0; i < cnt; i++
				std.bytefree(a[i], sz)
			;;

			/* alloc forwards, dealloc backwards */
			for var i = 0; i < cnt; i++
				a[i] = std.bytealloc(sz)
			;;
			for var i = cnt; i > 0; i--
				std.bytefree(a[i - 1], sz)
			;;

			/* alloc forwards, dealloc randomly */
			for var i = 0; i < cnt; i++
				a[i] = std.bytealloc(sz)
			;;
			shuffle(a[:cnt])
			for var i = cnt; i > 0; i--
				std.bytefree(a[i - 1], sz)
			;;
		;;
	;;
}

const shuffle = {a
	var t
	var rng
	var j

	/* we want determinism for benchmarking */
	rng = std.mksrng(123)
	for var i = 0; i < a.len - 1; i++
		j = std.rngrand(rng, i, a.len)
		t = a[j]
		a[j] = a[i]
		a[i] = t
	;;
}