summaryrefslogtreecommitdiff
path: root/test/pkmem.c
blob: 252428d2da3af91d375511c18a42d49565fb85a7 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

#define PK_IMPL_MEM

#include "../pkmem.h"

#define PK_IMPL_FUNCINSTR
#include "../pkfuncinstr.h"

#include <stdio.h>
#include <string.h>

struct mem_test {
	struct pk_membucket *bkt1;
	struct pk_membucket *bkt2;
} mt;

void spinup() {
	mt.bkt1 = pk_bucket_create("bkt1", 1024, false);
	mt.bkt2 = pk_bucket_create("bkt2", 1024, false);
}

void spinup_w_instr() {
	pk_funcinstr_init();
	spinup();
}

void teardown() {
	pk_bucket_destroy(mt.bkt1);
	pk_bucket_destroy(mt.bkt2);
	pk_funcinstr_teardown();
}

int main(int argc, char *argv[])
{
	(void)argc;
	(void)argv;

	// pk_new_base
	{
		spinup_w_instr();
		char *some_dang_string = (char*)pk_new_base(64, alignof(char*));
		fprintf(stdout, "some_dang_string: %s: %p\n", some_dang_string, (void *)some_dang_string);
		pk_delete_base(some_dang_string, 64);
		teardown();
	}

	/* template
	{
		spinup();
		teardown();
	}
	*/

	// zero-length alloc
	{
		spinup_w_instr();
		char *zero_length_string;
		char *three_length_string;

		zero_length_string = pk_new_bkt(0, 0, mt.bkt1);
		three_length_string = pk_new_bkt(3, 0, mt.bkt1);
		three_length_string[0] = '1';
		three_length_string[1] = '2';

		if (zero_length_string != NULL) exit(1);
		if (strlen(three_length_string) != 2) exit(1);
		if (mt.bkt1->allocs != 1) exit(1);
		if (mt.bkt1->head != 3) exit(1);
		if (mt.bkt1->lastEmptyBlockIndex != 0) exit(1);

		PK_LOGV_INF("%s: %s\n", __FILE__, "handles zero-length alloc");
		teardown();
	}

	return 0;
}