mirror of
https://github.com/GerbilSoft/zlib-ng.git
synced 2025-06-18 19:45:37 -04:00
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
/* test_aligned_alloc.cc - Test zng_alloc_aligned and zng_free_aligned */
|
|
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
|
|
extern "C" {
|
|
# include "zbuild.h"
|
|
# include "zutil.h"
|
|
}
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "test_shared.h"
|
|
|
|
void *zng_calloc_unaligned(void *opaque, unsigned items, unsigned size) {
|
|
uint8_t *pointer = (uint8_t *)calloc(1, (items * size) + 2);
|
|
Z_UNUSED(opaque);
|
|
if (pointer == NULL)
|
|
return pointer;
|
|
/* Store whether or not our allocation is aligned */
|
|
*pointer = ((uint64_t)(intptr_t)pointer + 1) % 2 == 0;
|
|
pointer++;
|
|
if (*pointer) {
|
|
/* Return pointer that is off by one */
|
|
pointer++;
|
|
}
|
|
return (void *)pointer;
|
|
}
|
|
|
|
void zng_cfree_unaligned(void *opaque, void *ptr) {
|
|
uint8_t *pointer = (uint8_t *)ptr;
|
|
Z_UNUSED(opaque);
|
|
pointer--;
|
|
/* Get whether or not our original memory pointer was aligned */
|
|
if (*pointer) {
|
|
/* Return original aligned pointer to free() */
|
|
pointer--;
|
|
}
|
|
free(pointer);
|
|
}
|
|
|
|
TEST(zalloc, aligned_64) {
|
|
void *return_ptr = PREFIX3(alloc_aligned)(zng_calloc_unaligned, 0, 1, 100, 64);
|
|
ASSERT_TRUE(return_ptr != NULL);
|
|
EXPECT_EQ((intptr_t)return_ptr % 64, 0);
|
|
PREFIX3(free_aligned)(zng_cfree_unaligned, 0, return_ptr);
|
|
}
|