1 #include "first.h" 2 3 #undef NDEBUG 4 #include <assert.h> 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 #include "buffer.h" 9 10 static void run_buffer_path_simplify(buffer *psrc, buffer *pdest, const char *in, size_t in_len, const char *out, size_t out_len) { 11 buffer_copy_string_len(psrc, in, in_len); 12 13 buffer_path_simplify(pdest, psrc); 14 15 if (!buffer_is_equal_string(pdest, out, out_len)) { 16 fprintf(stderr, 17 "%s.%d: buffer_path_simplify('%s') failed: expected '%s', got '%s'\n", 18 __FILE__, 19 __LINE__, 20 in, 21 out, 22 pdest->ptr ? pdest->ptr : ""); 23 fflush(stderr); 24 abort(); 25 } else { 26 #if 0 27 fprintf(stdout, 28 "%s.%d: buffer_path_simplify('%s') succeeded: got '%s'\n", 29 __FILE__, 30 __LINE__, 31 in, 32 out); 33 #endif 34 35 if (psrc != pdest) buffer_copy_buffer(psrc, pdest); 36 buffer_path_simplify(pdest, psrc); 37 38 if (!buffer_is_equal_string(pdest, out, out_len)) { 39 fprintf(stderr, 40 "%s.%d: buffer_path_simplify('%s') failed - not idempotent: expected '%s', got '%s'\n", 41 __FILE__, 42 __LINE__, 43 out, 44 out, 45 pdest->ptr ? pdest->ptr : ""); 46 fflush(stderr); 47 abort(); 48 } 49 } 50 } 51 52 static void test_buffer_path_simplify_with(buffer *psrc, buffer *pdest) { 53 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(""), CONST_STR_LEN("")); 54 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(" "), CONST_STR_LEN("/")); 55 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/"), CONST_STR_LEN("/")); 56 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("//"), CONST_STR_LEN("/")); 57 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc"), CONST_STR_LEN("/abc")); 58 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc//"), CONST_STR_LEN("/abc/")); 59 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/./xyz"), CONST_STR_LEN("/abc/xyz")); 60 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/.//xyz"), CONST_STR_LEN("/abc/xyz")); 61 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/../xyz"), CONST_STR_LEN("/xyz")); 62 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/./xyz"), CONST_STR_LEN("/abc/xyz")); 63 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc//./xyz"), CONST_STR_LEN("/abc/xyz")); 64 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/../xyz"), CONST_STR_LEN("/xyz")); 65 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/../xyz/."), CONST_STR_LEN("/xyz/")); 66 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/../xyz/."), CONST_STR_LEN("/xyz/")); 67 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("abc/./xyz/.."), CONST_STR_LEN("/abc/")); 68 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/abc/./xyz/.."), CONST_STR_LEN("/abc/")); 69 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("./xyz/.."), CONST_STR_LEN("/")); 70 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".//xyz/.."), CONST_STR_LEN("/")); 71 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/./xyz/.."), CONST_STR_LEN("/")); 72 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN(".././xyz/.."), CONST_STR_LEN("/")); 73 run_buffer_path_simplify(psrc, pdest, CONST_STR_LEN("/.././xyz/.."), CONST_STR_LEN("/")); 74 } 75 76 static void test_buffer_path_simplify(void) { 77 buffer *psrc = buffer_init(); 78 buffer *pdest = buffer_init(); 79 80 /* test with using the same buffer and with using different buffers */ 81 test_buffer_path_simplify_with(psrc, psrc); 82 test_buffer_path_simplify_with(pdest, psrc); 83 84 buffer_free(psrc); 85 buffer_free(pdest); 86 } 87 88 static void test_buffer_to_lower_upper(void) { 89 buffer *psrc = buffer_init(); 90 91 buffer_copy_string_len(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz")); 92 buffer_to_lower(psrc); 93 assert(buffer_is_equal_string(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz"))); 94 buffer_to_upper(psrc); 95 assert(buffer_is_equal_string(psrc, CONST_STR_LEN("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"))); 96 buffer_to_upper(psrc); 97 assert(buffer_is_equal_string(psrc, CONST_STR_LEN("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"))); 98 buffer_to_lower(psrc); 99 assert(buffer_is_equal_string(psrc, CONST_STR_LEN("0123456789abcdefghijklmnopqrstuvwxyz"))); 100 101 buffer_free(psrc); 102 } 103 104 static void test_buffer_string_space(void) { 105 buffer *b = buffer_init(); 106 size_t space; 107 108 space = buffer_string_space(b); 109 assert(0 == space); 110 buffer_copy_string_len(b, CONST_STR_LEN("")); 111 space = buffer_string_space(b); 112 assert(space > 0); 113 assert(space + buffer_string_length(b) == b->size - 1); 114 buffer_commit(b, b->size - 1); 115 assert(b->used == b->size); 116 space = buffer_string_space(b); 117 assert(0 == space); 118 119 buffer_free(b); 120 } 121 122 int main() { 123 test_buffer_path_simplify(); 124 test_buffer_to_lower_upper(); 125 test_buffer_string_space(); 126 127 return 0; 128 } 129