aboutsummaryrefslogtreecommitdiff
path: root/tests/core/container/test_core_xar.odin
blob: a58b369df89f64490f181af27fe581e08c27d447 (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
package test_core_container

import "core:container/xar"
import "core:testing"

Value :: struct {
	v: int,
	p: ^int,
}

@test
test_xar_pointer_stability :: proc(t: ^testing.T) {
	x: xar.Array(int, 4)
	defer xar.destroy(&x)

	values: [dynamic]Value
	defer delete(values)

	N :: 512
	for i in 1..=N {
		v := i * 10 + 1
		xar.push_back(&x, v)
		ptr := xar.get_ptr(&x, i - 1)
		append(&values, Value{v = v, p = ptr})
	}

	assert(xar.len(x) == N)
	assert(xar.cap(x) >= N)

	for value, i in values {
		ptr := xar.get_ptr(&x, i)
		assert(ptr == value.p)
		assert(ptr^ == value.v)
	}

	xar.clear(&x)
	assert(xar.len(x) == 0)
	assert(xar.cap(x) >= N)
}