diff options
Diffstat (limited to 'tests.c')
| -rw-r--r-- | tests.c | 49 |
1 files changed, 22 insertions, 27 deletions
| @@ -784,6 +784,27 @@ MU_TEST(test_arena_alignment) { | |||
| 784 | arena_free(&a); | 784 | arena_free(&a); |
| 785 | } | 785 | } |
| 786 | 786 | ||
| 787 | MU_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 |
| 788 | MU_TEST(test_file_io_basic) { | 809 | MU_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 | ||
| 807 | MU_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 | |||
| 826 | MU_TEST(test_file_io_sb) { | 828 | MU_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 | ||
| 852 | MU_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 | |||
| 858 | MU_TEST(test_file_io_read_missing_sb) { | 854 | MU_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 | ||
| 958 | MU_TEST_SUITE(test_suite_files) { | 955 | MU_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 | ||
