main.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include "cmocka.h"
  4. #include "DynString.h"
  5. void test_DynString_alloc(void** state) {
  6. const char* c_str = "Hello";
  7. const size_t c_str_len = strlen(c_str);
  8. DynString dstr = DynString_alloc(c_str, c_str_len);
  9. assert_memory_equal(dstr.data, c_str, c_str_len + 1);
  10. assert_true(dstr.len == c_str_len);
  11. assert_true(dstr.capacity == c_str_len);
  12. free(dstr.data);
  13. }
  14. void test_DynString_free(void** state) {
  15. DynString dstr = DynString_alloc("Hello", strlen("Hello"));
  16. DynString_free(&dstr);
  17. assert_null(dstr.data);
  18. assert_true(dstr.len == 0);
  19. assert_true(dstr.capacity == 0);
  20. }
  21. void test_DynString_equal(void** state) {
  22. DynString s1 = DynString_alloc("Hello", strlen("Hello"));
  23. DynString s2 = DynString_alloc("Hello", strlen("Hello"));
  24. assert_true(DynString_equal(&s1, &s2));
  25. DynString_free(&s1);
  26. DynString_free(&s2);
  27. s1 = DynString_alloc("Hello", strlen("Hello"));
  28. s2 = DynString_alloc("Hell0", strlen("Hell0"));
  29. assert_false(DynString_equal(&s1, &s2));
  30. DynString_free(&s1);
  31. DynString_free(&s2);
  32. s1 = DynString_alloc("Hello World", strlen("Hello World"));
  33. s2 = DynString_alloc("Hello", strlen("Hello"));
  34. assert_false(DynString_equal(&s1, &s2));
  35. DynString_free(&s1);
  36. DynString_free(&s2);
  37. }
  38. void test_DynString_equal_c_str(void** state) {
  39. DynString s1 = DynString_alloc("Hello", strlen("Hello"));
  40. char* s2 = "Hello";
  41. assert_true(DynString_equal_c_str(&s1, s2));
  42. DynString_free(&s1);
  43. s1 = DynString_alloc("Hello", strlen("Hello"));
  44. s2 = "Hell0";
  45. assert_false(DynString_equal_c_str(&s1, s2));
  46. DynString_free(&s1);
  47. s1 = DynString_alloc("Hello World", strlen("Hello World"));
  48. s2 = "Hello";
  49. assert_false(DynString_equal_c_str(&s1, s2));
  50. DynString_free(&s1);
  51. }
  52. void test_DynString_equal_next_chars_c_str(void** state) {
  53. DynString dstr = DynString_alloc("Hello", strlen("Hello"));
  54. char* str = "ll";
  55. size_t str_len = strlen(str);
  56. assert_true(DynString_equal_next_chars_c_str(&dstr, str, str_len, 2));
  57. assert_false(DynString_equal_next_chars_c_str(&dstr, str, str_len, 1));
  58. DynString_free(&dstr);
  59. }
  60. void test_DynString_reserve(void** state) {
  61. char* str = "aa";
  62. size_t str_len = strlen(str);
  63. DynString dstr = DynString_alloc(str, str_len);
  64. assert_true(dstr.len == str_len);
  65. assert_true(dstr.capacity == str_len + 1);
  66. assert_memory_equal(dstr.data, (void*) str, str_len + 1);
  67. }
  68. void test_DynString_concat_c_str(void** state) {
  69. const char* dstr_c_str = "Hello";
  70. const char* c_str = " World";
  71. const size_t combined_length = strlen(dstr_c_str) + strlen(c_str);
  72. DynString dstr = DynString_alloc(dstr_c_str, strlen("Hello"));
  73. DynString_concat_c_str(&dstr, c_str, strlen(c_str));
  74. assert_memory_equal(dstr.data, (void*) "Hello World\0", strlen("Hello World") + 1);
  75. assert_true(dstr.len == combined_length);
  76. assert_true(dstr.capacity == combined_length + 1);
  77. DynString_free(&dstr);
  78. }
  79. void test_DynString_c_str(void** state) {
  80. const char* c_str = "Hello";
  81. DynString dstr = DynString_alloc(c_str, strlen(c_str));
  82. assert_string_equal(c_str, DynString_c_str(&dstr));
  83. DynString_concat_c_str(&dstr, " World", strlen(" World"));
  84. assert_string_equal("Hello World", DynString_c_str(&dstr));
  85. }
  86. void test_DynString_split(void** state) {
  87. DynString dstr = DynString_alloc("Hello World", strlen("Hello World"));
  88. size_t arr_len = 0;
  89. DynString* arr = DynString_split(&dstr, " ", &arr_len);
  90. assert_true(arr_len == 2);
  91. assert_string_equal(DynString_c_str(arr), "Hello");
  92. assert_string_equal(DynString_c_str(arr + 1), "World");
  93. }
  94. int main() {
  95. const struct CMUnitTest tests[] = {
  96. cmocka_unit_test(test_DynString_alloc),
  97. cmocka_unit_test(test_DynString_free),
  98. cmocka_unit_test(test_DynString_equal),
  99. cmocka_unit_test(test_DynString_equal_c_str),
  100. cmocka_unit_test(test_DynString_equal_next_chars_c_str),
  101. cmocka_unit_test(test_DynString_reserve),
  102. cmocka_unit_test(test_DynString_concat_c_str),
  103. cmocka_unit_test(test_DynString_c_str),
  104. cmocka_unit_test(test_DynString_split),
  105. };
  106. return cmocka_run_group_tests(tests, NULL, NULL);
  107. }