aboutsummaryrefslogtreecommitdiff
path: root/lib/mlibc/tests/posix/posix_memalign.c
blob: 34652b93bef71d0290c7dd15c6729d64db3feef0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdlib.h>
#include <assert.h>
#include <stdint.h>
#include <errno.h>

int main() {
	void *p = NULL;

	// align must be a power of two
	assert(posix_memalign(&p, 3, 1) == EINVAL && p == NULL);

	// align must be a multiple of sizeof(void *)
	assert(posix_memalign(&p, sizeof(void *) / 2, 8) == EINVAL && p == NULL);

	assert(posix_memalign(&p, sizeof(void *), sizeof(void *)) == 0 && p != NULL && (uintptr_t)p % sizeof(void *) == 0);
	free(p);
	assert(posix_memalign(&p, 256, 1) == 0 && p != NULL && (uintptr_t)p % 256 == 0);
	free(p);
	assert(posix_memalign(&p, 256, 256) == 0 && p != NULL && (uintptr_t)p % 256 == 0);
	free(p);
}