2025-08-03 10:07:35 -04:00
|
|
|
#include <string.h>
|
2026-01-05 08:58:06 -05:00
|
|
|
#include <akerror.h>
|
2026-07-29 18:01:05 -04:00
|
|
|
#include <akgl/error.h>
|
2026-05-07 22:20:10 -04:00
|
|
|
#include <akgl/heap.h>
|
|
|
|
|
#include <akgl/staticstring.h>
|
2025-08-03 10:07:35 -04:00
|
|
|
|
|
|
|
|
void reset_string_heap(void);
|
|
|
|
|
|
2026-05-03 23:57:55 -04:00
|
|
|
akerr_ErrorContext *test_fresh_heap_gives_strings(void)
|
2025-08-03 10:07:35 -04:00
|
|
|
{
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
akgl_String *ptr = NULL;
|
2025-08-03 10:07:35 -04:00
|
|
|
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
for ( int i = 0; i < AKGL_MAX_HEAP_STRING - 1; i++ ) {
|
|
|
|
|
ATTEMPT {
|
|
|
|
|
CATCH(errctx, akgl_heap_next_string(&ptr));
|
|
|
|
|
} CLEANUP {
|
|
|
|
|
reset_string_heap();
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
2025-08-03 10:07:35 -04:00
|
|
|
}
|
|
|
|
|
|
2026-05-03 23:57:55 -04:00
|
|
|
akerr_ErrorContext *test_string_heap_error_when_no_strings_left(void)
|
2025-08-03 10:07:35 -04:00
|
|
|
{
|
2026-05-06 23:18:42 -04:00
|
|
|
akgl_String *ptr;
|
2025-08-03 10:07:35 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
2026-05-06 23:18:42 -04:00
|
|
|
for ( int i = 0; i < AKGL_MAX_HEAP_STRING; i++ ) {
|
2025-08-03 10:07:35 -04:00
|
|
|
HEAP_STRING[i].refcount = 1;
|
|
|
|
|
}
|
2026-05-06 23:18:42 -04:00
|
|
|
for ( int i = 0; i < AKGL_MAX_HEAP_STRING - 1; i++ ) {
|
2025-08-03 10:07:35 -04:00
|
|
|
ATTEMPT {
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_heap_next_string(&ptr));
|
2025-08-03 10:07:35 -04:00
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
2026-05-03 23:57:55 -04:00
|
|
|
} HANDLE(errctx, AKERR_NULLPOINTER) {
|
2025-08-03 10:07:35 -04:00
|
|
|
return 0;
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
}
|
2026-05-03 23:57:55 -04:00
|
|
|
FAIL_RETURN(errctx, AKERR_OUTOFBOUNDS, "Expected AKERR_NULLPOINTER when accessing beyond string heap bounds");
|
2025-08-03 10:07:35 -04:00
|
|
|
SUCCEED_RETURN(errctx);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-03 23:57:55 -04:00
|
|
|
akerr_ErrorContext *test_string_heap_honors_refcount(void)
|
2025-08-03 10:07:35 -04:00
|
|
|
{
|
2026-05-06 23:18:42 -04:00
|
|
|
akgl_String *firstptr = &HEAP_STRING[0];
|
|
|
|
|
akgl_String *secondptr = &HEAP_STRING[1];
|
|
|
|
|
akgl_String *testptr = NULL;
|
2025-08-03 10:07:35 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_heap_next_string(&testptr));
|
2025-08-03 10:07:35 -04:00
|
|
|
if ( testptr != firstptr ) {
|
|
|
|
|
FAIL_RETURN(
|
|
|
|
|
errctx,
|
2026-05-03 23:57:55 -04:00
|
|
|
AKERR_VALUE,
|
2025-08-03 10:07:35 -04:00
|
|
|
"Expected testptr to equal (HEAP_STRING[0] = %p) but got %p",
|
|
|
|
|
firstptr,
|
|
|
|
|
testptr
|
|
|
|
|
);
|
|
|
|
|
}
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_string_initialize(testptr, NULL));
|
2025-08-03 10:07:35 -04:00
|
|
|
if ( testptr->refcount == 0 ) {
|
2026-05-03 23:57:55 -04:00
|
|
|
FAIL_RETURN(errctx, AKERR_VALUE, "Expected string reference count to be nonzero but got 0");
|
2025-08-03 10:07:35 -04:00
|
|
|
}
|
|
|
|
|
if ( testptr != firstptr ) {
|
|
|
|
|
FAIL_RETURN(
|
|
|
|
|
errctx,
|
2026-05-03 23:57:55 -04:00
|
|
|
AKERR_VALUE,
|
2025-08-03 10:07:35 -04:00
|
|
|
"Expected testptr to equal (HEAP_STRING[1] = %p) but got %p",
|
|
|
|
|
secondptr,
|
|
|
|
|
testptr
|
|
|
|
|
);
|
|
|
|
|
}
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_heap_next_string(&testptr));
|
2025-08-03 10:07:35 -04:00
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
SUCCEED_RETURN(errctx);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-03 23:57:55 -04:00
|
|
|
akerr_ErrorContext *test_strcpy_to_all_strings_no_segfault(void)
|
2025-08-03 10:07:35 -04:00
|
|
|
{
|
2026-05-06 23:18:42 -04:00
|
|
|
char copybuf[AKGL_MAX_STRING_LENGTH];
|
|
|
|
|
akgl_String *ptr;
|
|
|
|
|
memset((void *)©buf, 'a', AKGL_MAX_STRING_LENGTH);
|
2025-08-03 10:07:35 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
2026-05-06 23:18:42 -04:00
|
|
|
for ( int i = 0; i < AKGL_MAX_HEAP_STRING - 1; i++ ) {
|
|
|
|
|
CATCH(errctx, akgl_heap_next_string(&ptr));
|
|
|
|
|
strncpy(ptr->data, (char *)©buf, AKGL_MAX_STRING_LENGTH);
|
2025-08-03 10:07:35 -04:00
|
|
|
}
|
|
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
SUCCEED_RETURN(errctx);
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
}
|
2025-08-03 10:07:35 -04:00
|
|
|
|
2026-05-06 23:18:42 -04:00
|
|
|
akerr_ErrorContext *test_akgl_string_initialize(void)
|
2025-08-03 10:07:35 -04:00
|
|
|
{
|
2026-05-06 23:18:42 -04:00
|
|
|
akgl_String *ptr;
|
2025-08-03 10:07:35 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_heap_next_string(&ptr));
|
|
|
|
|
CATCH(errctx, akgl_string_initialize(ptr, NULL));
|
2026-05-03 23:57:55 -04:00
|
|
|
FAIL_NONZERO_BREAK(errctx, ptr->data[0], AKERR_VALUE, "Expected empty zero length string data");
|
2025-08-03 10:07:35 -04:00
|
|
|
|
2026-05-06 23:18:42 -04:00
|
|
|
CATCH(errctx, akgl_heap_release_string(ptr));
|
|
|
|
|
CATCH(errctx, akgl_heap_next_string(&ptr));
|
|
|
|
|
CATCH(errctx, akgl_string_initialize(ptr, "Test value"));
|
2026-05-03 23:57:55 -04:00
|
|
|
FAIL_NONZERO_BREAK(errctx, strcmp((char *)&ptr->data, "Test value"), AKERR_VALUE, "Expected 'Test value', got %s", (char *)&ptr->data);
|
2025-08-03 10:07:35 -04:00
|
|
|
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
CATCH(errctx, akgl_heap_release_string(NULL));
|
2026-07-29 18:01:05 -04:00
|
|
|
FAIL_BREAK(errctx, AKGL_ERR_BEHAVIOR, "Failure to properly handle NULL pointer");
|
2025-08-03 10:07:35 -04:00
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH(errctx, true);
|
|
|
|
|
|
|
|
|
|
SUCCEED_RETURN(errctx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void reset_string_heap(void)
|
|
|
|
|
{
|
2026-05-06 23:18:42 -04:00
|
|
|
for ( int i = 0; i < AKGL_MAX_HEAP_STRING; i++ ) {
|
|
|
|
|
memset(&HEAP_STRING[i], 0x00, sizeof(akgl_String));
|
2025-08-03 10:07:35 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
|
2025-08-03 10:07:35 -04:00
|
|
|
PREPARE_ERROR(errctx);
|
|
|
|
|
ATTEMPT {
|
|
|
|
|
printf("test_fresh_heap_gives_string ....\n");
|
|
|
|
|
test_fresh_heap_gives_strings();
|
|
|
|
|
reset_string_heap();
|
|
|
|
|
printf("test_string_heap_error_when_no_strings_left ...\n");
|
|
|
|
|
test_string_heap_error_when_no_strings_left();
|
|
|
|
|
reset_string_heap();
|
|
|
|
|
printf("test_string_heap_honors_refcount ...\n");
|
|
|
|
|
test_string_heap_honors_refcount();
|
|
|
|
|
reset_string_heap();
|
|
|
|
|
printf("test_strcpy_to_all_strings_no_segfault ...\n");
|
|
|
|
|
test_strcpy_to_all_strings_no_segfault();
|
|
|
|
|
reset_string_heap();
|
2026-05-06 23:18:42 -04:00
|
|
|
printf("test_akgl_string_initialize....\n");
|
|
|
|
|
test_akgl_string_initialize();
|
2025-08-03 10:07:35 -04:00
|
|
|
} CLEANUP {
|
|
|
|
|
} PROCESS(errctx) {
|
|
|
|
|
} FINISH_NORETURN(errctx);
|
Reindent all C sources to the canonical stroustrup style
Mechanical whitespace-only change across src/, include/, tests/, and
util/, applied with scripts/reindent.sh. No behavioral change.
Most files already conformed. The genuine outliers indented at 2 columns
(json_helpers.c, util.c from akgl_rectangle_points onward, assets.c,
staticstring.c, akgl_actor_add_child, util.h, staticstring.h) or used
spaces where the canonical form is a tab (draw.c). cc-mode also re-aligns
line-continuation backslashes in multi-line macros to its default
c-backslash-column, which is required for the tree to be a fixed point of
the indenter.
Verified whitespace-only: `git diff -w` over this change is empty apart
from three trailing blank lines removed at EOF in src/heap.c,
src/registry.c, and tests/tilemap.c. The build produces no new errors and
ctest is unchanged at 13/14, with `character` still the one intentional
failure.
The tree is now a fixed point of `scripts/reindent.sh --check`.
include/akgl/SDL_GameControllerDB.h is generated and excluded.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-30 18:17:37 -04:00
|
|
|
|
2025-08-03 10:07:35 -04:00
|
|
|
return 0;
|
|
|
|
|
}
|