/** * @file header_pool_override.c * @brief Checks that the compile-time pool-size overrides in heap.h actually fire. * * `heap.h` wraps every `AKGL_MAX_HEAP_*` ceiling in an `#ifndef` so a game that * needs more actors can define its own before including it. That mechanism was * dead until 0.5.0: `actor.h`, `sprite.h` and `character.h` defined the same * four unconditionally, and `heap.h` includes all three *above* its own * `#ifndef` block, so whichever landed first won and the guard never fired. The * override was documented, and did nothing. * * The assertion is the compile. Nothing here links against the pools -- it * cannot, because the library was built with the default ceilings and this * translation unit deliberately disagrees with it. That disagreement is the * documented consequence of overriding a ceiling, not something this file is * working around: the arrays are sized at compile time, so the library and * everything linking it have to agree. */ #define AKGL_MAX_HEAP_ACTOR 128 #define AKGL_MAX_HEAP_STRING 512 #include #if AKGL_MAX_HEAP_ACTOR != 128 #error "heap.h overrode a caller's AKGL_MAX_HEAP_ACTOR; the #ifndef guard is dead again" #endif #if AKGL_MAX_HEAP_STRING != 512 #error "heap.h overrode a caller's AKGL_MAX_HEAP_STRING; the #ifndef guard is dead again" #endif /* The derived ceilings have to follow the override rather than a stale literal. */ #if AKGL_MAX_HEAP_SPRITE != (128 * 16) #error "AKGL_MAX_HEAP_SPRITE no longer derives from AKGL_MAX_HEAP_ACTOR" #endif int akgl_header_selftest_pool_override(void); int akgl_header_selftest_pool_override(void) { return 0; }