DString_tests.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <cmocka.h>
  4. #include "scufcont.h"
  5. #include "DString.h"
  6. void test_SCDString_alloc(void** state) {
  7. (void) state;
  8. const char* c_str = "Hello";
  9. const size_t c_str_len = strlen(c_str);
  10. SCDString dstr;
  11. assert_true(SCDString_alloc(&dstr, c_str, c_str_len) == SCUFCONT_SUCCESS);
  12. assert_memory_equal(dstr.data, c_str, c_str_len + 1);
  13. assert_true(dstr.len == c_str_len);
  14. assert_true(dstr.capacity == c_str_len + 1);
  15. free(dstr.data);
  16. }
  17. void test_SCDString_free(void** state) {
  18. (void) state;
  19. SCDString dstr;
  20. assert_true(SCDString_alloc(&dstr, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  21. SCDString_free(&dstr);
  22. assert_null(dstr.data);
  23. assert_true(dstr.len == 0);
  24. assert_true(dstr.capacity == 0);
  25. }
  26. void test_SCDString_equal(void** state) {
  27. (void) state;
  28. SCDString s1;
  29. assert_true(SCDString_alloc(&s1, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  30. SCDString s2;
  31. assert_true(SCDString_alloc(&s2, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  32. assert_true(SCDString_equal(&s1, &s2));
  33. SCDString_free(&s1);
  34. SCDString_free(&s2);
  35. assert_true(SCDString_alloc(&s1, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  36. assert_true(SCDString_alloc(&s2, "Hell0", strlen("Hell0")) == SCUFCONT_SUCCESS);
  37. assert_false(SCDString_equal(&s1, &s2));
  38. SCDString_free(&s1);
  39. SCDString_free(&s2);
  40. assert_true(SCDString_alloc(&s1, "Hello World", strlen("Hello World")) == SCUFCONT_SUCCESS);
  41. assert_true(SCDString_alloc(&s2, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  42. assert_false(SCDString_equal(&s1, &s2));
  43. SCDString_free(&s1);
  44. SCDString_free(&s2);
  45. }
  46. void test_SCDString_equal_c_str(void** state) {
  47. (void) state;
  48. SCDString s1;
  49. assert_true(SCDString_alloc(&s1,"Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  50. char* s2 = "Hello";
  51. assert_true(SCDString_equal_c_str(&s1, s2));
  52. SCDString_free(&s1);
  53. assert_true(SCDString_alloc(&s1, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  54. s2 = "Hell0";
  55. assert_false(SCDString_equal_c_str(&s1, s2));
  56. SCDString_free(&s1);
  57. assert_true(SCDString_alloc(&s1, "Hello World", strlen("Hello World")) == SCUFCONT_SUCCESS);
  58. s2 = "Hello";
  59. assert_false(SCDString_equal_c_str(&s1, s2));
  60. SCDString_free(&s1);
  61. }
  62. void test_SCDString_equal_next_chars_c_str(void** state) {
  63. (void) state;
  64. SCDString dstr;
  65. assert_true(SCDString_alloc(&dstr, "Hello", strlen("Hello")) == SCUFCONT_SUCCESS);
  66. char* str = "ll";
  67. size_t str_len = strlen(str);
  68. assert_true(SCDString_equal_next_chars_c_str(&dstr, str, str_len, 2));
  69. assert_false(SCDString_equal_next_chars_c_str(&dstr, str, str_len, 1));
  70. SCDString_free(&dstr);
  71. }
  72. void test_SCDString_concat_c_str(void** state) {
  73. (void) state;
  74. const char* dstr_c_str = "Hello";
  75. const char* c_str = " World";
  76. const size_t combined_length = strlen(dstr_c_str) + strlen(c_str);
  77. SCDString dstr;
  78. assert_true(SCDString_alloc(&dstr, dstr_c_str, strlen("Hello")) == SCUFCONT_SUCCESS);
  79. SCDString_concat_c_str(&dstr, c_str, strlen(c_str));
  80. assert_memory_equal(dstr.data, (void*) "Hello World\0", strlen("Hello World") + 1);
  81. assert_true(dstr.len == combined_length);
  82. assert_true(dstr.capacity == combined_length + 1);
  83. SCDString_free(&dstr);
  84. }
  85. void test_SCDString_c_str(void** state) {
  86. (void) state;
  87. const char* c_str = "Hello";
  88. SCDString dstr;
  89. assert_true(SCDString_alloc(&dstr, c_str, strlen(c_str)) == SCUFCONT_SUCCESS);
  90. assert_string_equal(c_str, SCDString_c_str(&dstr));
  91. SCDString_concat_c_str(&dstr, " World", strlen(" World"));
  92. assert_string_equal("Hello World", SCDString_c_str(&dstr));
  93. }
  94. void test_SCDString_split(void** state) {
  95. (void) state;
  96. SCDString dstr;
  97. assert_true(SCDString_alloc(&dstr, "Hello World", strlen("Hello World")) == SCUFCONT_SUCCESS);
  98. size_t arr_len = 0;
  99. SCDString* arr = NULL;
  100. ScufContResult res = SCDString_split(&dstr, " ", &arr, &arr_len);
  101. assert_true(res == SCUFCONT_SUCCESS);
  102. assert_true(arr_len == 2);
  103. assert_string_equal(SCDString_c_str(arr), "Hello");
  104. assert_string_equal(SCDString_c_str(arr + 1), "World");
  105. SCDString_free(&dstr);
  106. SCDString_split_arr_free(&arr, arr_len);
  107. assert_true(arr == NULL);
  108. assert_true(SCDString_alloc(&dstr, " Hello World", strlen(" Hello World")) == SCUFCONT_SUCCESS);
  109. arr_len = 0;
  110. res = SCDString_split(&dstr, " ", &arr, &arr_len);
  111. assert_true(arr_len == 3);
  112. assert_string_equal(SCDString_c_str(arr), "");
  113. assert_string_equal(SCDString_c_str(arr + 1), "Hello");
  114. assert_string_equal(SCDString_c_str(arr + 2), "World");
  115. SCDString_free(&dstr);
  116. SCDString_split_arr_free(&arr, arr_len);
  117. assert_true(arr == NULL);
  118. }
  119. int DString_tests_run(void) {
  120. const struct CMUnitTest tests[] = {
  121. cmocka_unit_test(test_SCDString_alloc),
  122. cmocka_unit_test(test_SCDString_free),
  123. cmocka_unit_test(test_SCDString_equal),
  124. cmocka_unit_test(test_SCDString_equal_c_str),
  125. cmocka_unit_test(test_SCDString_equal_next_chars_c_str),
  126. cmocka_unit_test(test_SCDString_concat_c_str),
  127. cmocka_unit_test(test_SCDString_c_str),
  128. cmocka_unit_test(test_SCDString_split),
  129. };
  130. return cmocka_run_group_tests_name("DString", tests, NULL, NULL);
  131. }