aboutsummaryrefslogtreecommitdiff
path: root/tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests.c')
-rw-r--r--tests.c49
1 files changed, 22 insertions, 27 deletions
diff --git a/tests.c b/tests.c
index e865e18..32da92f 100644
--- a/tests.c
+++ b/tests.c
@@ -784,6 +784,27 @@ MU_TEST(test_arena_alignment) {
784 arena_free(&a); 784 arena_free(&a);
785} 785}
786 786
787MU_TEST(test_arena_safety) {
788 Arena a = arena_make();
789
790 // Test 1: Integer overflow in allocation should be caught by safe_alloc
791 // Requesting 2 items of size (SIZE_MAX/2 + 1) should fail
792 // This tests ns_safe_malloc directly or via macro if we exposed it,
793 // but arena_alloc calls ensure/grow which calls ALLOC(char, size).
794 // To test ALLOC overflow: ALLOC(char, SIZE_MAX) is just 1*SIZE_MAX.
795 // We need a way to trigger safe_alloc failure.
796
797 // Let's test the underlying safe allocator directly since we exposed it in nonstd.h
798 void *p = safe_malloc(SIZE_MAX / 2 + 100, 2);
799 mu_check(p == NULL);
800
801 // Test 2: Ensure normal allocations still work
802 void *p2 = arena_alloc(&a, 100);
803 mu_check(p2 != NULL);
804
805 arena_free(&a);
806}
807
787// File I/O tests 808// File I/O tests
788MU_TEST(test_file_io_basic) { 809MU_TEST(test_file_io_basic) {
789 const char *filename = "test_io_basic.txt"; 810 const char *filename = "test_io_basic.txt";
@@ -804,25 +825,6 @@ MU_TEST(test_file_io_basic) {
804 remove(filename); 825 remove(filename);
805} 826}
806 827
807MU_TEST(test_file_io_sv) {
808 const char *filename = "test_io_sv.txt";
809 stringv sv = sv_from_cstr("Hello from sv!");
810
811 // Write
812 mu_check(write_file_sv(filename, sv));
813
814 // Read
815 stringv read_sv = read_entire_file_sv(filename);
816 mu_check(read_sv.data != NULL);
817 mu_assert_int_eq(sv.length, read_sv.length);
818 mu_check(sv_equals(sv, read_sv));
819
820 // The data returned by read_entire_file_sv is malloc'd and needs freeing
821 // We cast away const to free it since we know it was allocated
822 free((char *)read_sv.data);
823 remove(filename);
824}
825
826MU_TEST(test_file_io_sb) { 828MU_TEST(test_file_io_sb) {
827 const char *filename = "test_io_sb.txt"; 829 const char *filename = "test_io_sb.txt";
828 stringb sb; 830 stringb sb;
@@ -849,12 +851,6 @@ MU_TEST(test_file_io_read_missing) {
849 mu_check(content == NULL); 851 mu_check(content == NULL);
850} 852}
851 853
852MU_TEST(test_file_io_read_missing_sv) {
853 stringv sv = read_entire_file_sv("non_existent_file.txt");
854 mu_check(sv.data == NULL);
855 mu_assert_int_eq(0, sv.length);
856}
857
858MU_TEST(test_file_io_read_missing_sb) { 854MU_TEST(test_file_io_read_missing_sb) {
859 stringb sb = read_entire_file_sb("non_existent_file.txt"); 855 stringb sb = read_entire_file_sb("non_existent_file.txt");
860 mu_check(sb.data == NULL); 856 mu_check(sb.data == NULL);
@@ -953,15 +949,14 @@ MU_TEST_SUITE(test_suite_arena) {
953 RUN_TEST_WITH_NAME(test_arena_basic); 949 RUN_TEST_WITH_NAME(test_arena_basic);
954 RUN_TEST_WITH_NAME(test_arena_growth); 950 RUN_TEST_WITH_NAME(test_arena_growth);
955 RUN_TEST_WITH_NAME(test_arena_alignment); 951 RUN_TEST_WITH_NAME(test_arena_alignment);
952 RUN_TEST_WITH_NAME(test_arena_safety);
956} 953}
957 954
958MU_TEST_SUITE(test_suite_files) { 955MU_TEST_SUITE(test_suite_files) {
959 printf("\n[File I/O Tests]\n"); 956 printf("\n[File I/O Tests]\n");
960 RUN_TEST_WITH_NAME(test_file_io_basic); 957 RUN_TEST_WITH_NAME(test_file_io_basic);
961 RUN_TEST_WITH_NAME(test_file_io_sv);
962 RUN_TEST_WITH_NAME(test_file_io_sb); 958 RUN_TEST_WITH_NAME(test_file_io_sb);
963 RUN_TEST_WITH_NAME(test_file_io_read_missing); 959 RUN_TEST_WITH_NAME(test_file_io_read_missing);
964 RUN_TEST_WITH_NAME(test_file_io_read_missing_sv);
965 RUN_TEST_WITH_NAME(test_file_io_read_missing_sb); 960 RUN_TEST_WITH_NAME(test_file_io_read_missing_sb);
966} 961}
967 962