Mercurial > vec
view test/test_align.h @ 29:e59c91d050c0
*: add aligned malloc stuff :)
author | Paper <paper@tflc.us> |
---|---|
date | Thu, 24 Apr 2025 17:12:05 -0400 |
parents | 41dd962abdd1 |
children | 641d8c79b1da |
line wrap: on
line source
static int test_align(void) { int ret = 0; int i; #define RUN_TEST(sign, csign, bits, size) \ do { \ /* allocate the aligned array */ \ V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr); \ \ /* fill the values */ \ for (i = 0; i < size; i++) \ vec_arr[i] = i; \ \ /* try to load it */ \ v##sign##int##bits##x##size vec = v##sign##int##bits##x##size##_load_aligned(vec_arr); \ \ /* now allocate an output array */ \ V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr_out); \ \ /* try storing it */ \ v##sign##int##bits##x##size##_store_aligned(vec, vec_arr_out); \ \ /* mark success or failure */ \ ret |= !!memcmp(vec_arr, vec_arr_out, size * sizeof(*vec_arr)); \ \ ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr); \ ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr_out); \ } while (0); #define RUN_TESTS(bits, size) \ RUN_TEST( , , bits, size) \ RUN_TEST(u, U, bits, size) RUN_TESTS(8, 2) RUN_TESTS(8, 4) RUN_TESTS(16, 2) RUN_TESTS(8, 8) RUN_TESTS(16, 4) RUN_TESTS(32, 2) RUN_TESTS(8, 16) RUN_TESTS(16, 8) RUN_TESTS(32, 4) RUN_TESTS(64, 2) RUN_TESTS(8, 32) RUN_TESTS(16, 16) RUN_TESTS(32, 8) RUN_TESTS(64, 4) RUN_TESTS(8, 64) RUN_TESTS(16, 32) RUN_TESTS(32, 16) RUN_TESTS(64, 8) #undef RUN_TESTS #undef RUN_TEST for (i = 0; i < 50; i++) { void *q = vec_malloc(i); ret |= !!((uintptr_t)q & 63); /* try a bigger size */ q = vec_realloc(q, i + 10); ret |= !!((uintptr_t)q & 63); /* now a smaller one */ q = vec_realloc(q, i - 10); ret |= !!((uintptr_t)q & 63); vec_free(q); } return ret; }