diff --git a/tests/src/string/main.c b/tests/src/string/main.c index 4eb7e31..8b90e66 100644 --- a/tests/src/string/main.c +++ b/tests/src/string/main.c @@ -3,59 +3,65 @@ #include "plug.h" +static void string_print_compare(const vtype_string* s0, const vtype_string* s1) { + int c = string_compare(s0, s1); + char* m; + if (c == 0) m = "=="; + else m = (c < 0) ? "<" : ">"; -static vtype_string string_random(unsigned int n) { - vtype_string x; - - if (random_boolean()) { - x.buffer = random_utf8_cstring(n); - } else x.buffer = random_ascii_cstring(n); - - return x; + puts("\e[36mStrings comparsion:\e[m\n"); + printf("\e[33m\"%s\"\e[m \e[31m%s\e[m \e[33m\"%s\"\e[m\n", s0->buffer, m, s1->buffer); } -static void string_concat_random(vtype_string* x, unsigned int n) { - char* v; +static void string_print_case_compare(const vtype_string* s0, const vtype_string* s1) { + int c = string_case_compare(s0, s1); + char* m; + if (c == 0) m = "=="; + else m = (c < 0) ? "<" : ">"; - if (random_boolean()) { - v = random_utf8_cstring(n); - } else v = random_ascii_cstring(n); - - string_concat(x, v); - free(v); + puts("\e[36mStrings case insensitive comparsion:\e[m\n"); + printf("\e[33m\"%s\"\e[m \e[31m%s\e[m \e[33m\"%s\"\e[m\n", s0->buffer, m, s1->buffer); } -static void string_info(vtype_string* x) { - printf("\e[36mString consists of \e[m\e[32m%lu\e[m\e[36m utf8 chars (\e[m\e[32m%lu bytes\e[m\e[36m)\e[m\n", string_size(x), string_nmemb(x)); -} - -static void string_print(const vtype_string* x, const char* prefix) { - if (!prefix) puts("\e[36mString content:\e[m\n"); - else printf("\e[36mString %s content:\e[m\n\n", prefix); - printf("\e[33m%s\e[m\n", x->buffer); - put_separator(); -} - - int main(int argc, char** argv) { test_init(argc, argv); - vtype_string x; + vtype_string x, y; - x = string_random(31); + x = string_random(30); string_print(&x, "(part 1)"); string_concat(&x, '\n'); - string_concat_random(&x, 31); + string_concat_random(&x, 30); { - void* hack = string_at(&x, 32); + char* repl = random_utf8_cstring(30); + void* hack = string_at(&x, 31); string_print((void*)&hack, "(part 2)"); + string_print((void*)&repl, "(part 2 replaced)"); + string_replace(&x, hack, repl, -1); + free(repl); } string_info(&x); string_print(&x, "concatenated"); + do { + string_replace_random(&x, 12); + } while (string_size(&x) == string_nmemb(&x)); + y = string_copy(&x); + + string_to_lower(&x); + string_to_upper(&y); + + string_print_compare(&x, &y); + string_print_case_compare(&x, &y); + + string_reverse(&y); + string_capitalize(&y); + + string_print(&y, "reversed & capitalized"); string_free(&x); + string_free(&y); } diff --git a/tests/src/string/plug.h b/tests/src/string/plug.h index c144b5e..d0fc750 100644 --- a/tests/src/string/plug.h +++ b/tests/src/string/plug.h @@ -47,3 +47,47 @@ static char* random_utf8_cstring(size_t size) { *p = 0; return v; } + +static void string_info(vtype_string* x) { + printf("\e[36mString consists of \e[m\e[32m%lu\e[m\e[36m utf8 chars (\e[m\e[32m%lu bytes\e[m\e[36m)\e[m\n", string_size(x), string_nmemb(x)); +} + +static void string_print(const vtype_string* x, const char* prefix) { + if (!prefix) puts("\e[36mString content:\e[m\n"); + else printf("\e[36mString %s content:\e[m\n\n", prefix); + printf("\e[33m\"%s\"\e[m\n", x->buffer); + put_separator(); +} + +static vtype_string string_random(unsigned int n) { + vtype_string x; + + if (random_boolean()) { + x.buffer = random_utf8_cstring(n); + } else x.buffer = random_ascii_cstring(n); + + return x; +} + +static void string_concat_random(vtype_string* x, unsigned int n) { + char* v; + + if (random_boolean()) { + v = random_utf8_cstring(n); + } else v = random_ascii_cstring(n); + + string_concat(x, v); + free(v); +} + +static void string_replace_random(vtype_string* x, unsigned int n) { + char* v; + + if (random_boolean()) { + v = random_utf8_cstring(n); + } else v = random_ascii_cstring(n); + + string_replace(x, x, v, -1); + + free(v); +} diff --git a/tests/src/string/trim.c b/tests/src/string/trim.c new file mode 100644 index 0000000..a320ce8 --- /dev/null +++ b/tests/src/string/trim.c @@ -0,0 +1,20 @@ +/* This software is licensed by the MIT License, see LICENSE file */ +/* Copyright © 2022 Gregory Lirent */ + +#include "plug.h" + +int main(int argc, char** argv) { + test_init(argc, argv); + vtype_string x; + + x = string_random(12); + + string_align_center(&x, 30, 0); + + string_print(&x, 0); + + string_trim(&x, 0); + string_print(&x, 0); + + string_free(&x); +}