University stuff.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

tests.c 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdarg.h>
  5. #define CNRM "\x1b[0m"
  6. #define CRED "\x1b[31m"
  7. #define CGRN "\x1b[32m"
  8. int stringsum(char *s);
  9. int stringsum2(char *s, int *res);
  10. int distance_between(char *s, char c);
  11. char *string_between(char *s, char c);
  12. char **split(char *s);
  13. static int test_num = 1;
  14. static void logger(int passed, char *s)
  15. {
  16. char *res;
  17. char *color;
  18. if (passed) {
  19. res = "PASS";
  20. color = CGRN;
  21. } else {
  22. res = "FAIL";
  23. color = CRED;
  24. }
  25. printf("[Test %d][%s%s%s] %s\n", test_num++, color, res, CNRM, s);
  26. }
  27. static void test_split(char *str, char **correct)
  28. {
  29. int i, pass = 1;
  30. char buf[256] = { 0 };
  31. char **res = split(str);
  32. if (!res || !res[0]) {
  33. pass = 0;
  34. sprintf(buf, "split() returned NULL or an empty array");
  35. logger(pass, buf);
  36. return;
  37. }
  38. sprintf(buf, "\n%-16s%-16s\n", "Returned", "Expected");
  39. for (i = 0; res[i]; i++) {
  40. char tmp[256] = { 0 };
  41. sprintf(tmp, "%-16s%-16s\n", res[i], correct[i]);
  42. strcat(buf, tmp);
  43. if (strcmp(res[i], correct[i])) {
  44. pass = 0;
  45. logger(pass, buf);
  46. return;
  47. }
  48. }
  49. logger(pass, buf);
  50. }
  51. int main(void)
  52. {
  53. char buf[256] = { 0 };
  54. int test;
  55. char *res_char;
  56. int res_int = 0;
  57. printf("Testing stringsum()\n");
  58. test = stringsum("abcd");
  59. sprintf(buf, "Returned: %d, Expected: %d", test, 10);
  60. logger(test == 10, buf);
  61. test = stringsum("a!");
  62. sprintf(buf, "Returned: %d, Expected: %d", test, -1);
  63. logger(test == -1, buf);
  64. test = stringsum("aAzZ");
  65. sprintf(buf, "Returned: %d, Expected: %d", test, 54);
  66. logger(test == 54, buf);
  67. test = stringsum("ababcDcabcddAbcDaBcabcABCddabCddabcabcddABCabcDd");
  68. sprintf(buf, "Returned: %d, Expected: %d", test, 120);
  69. logger(test == 120, buf);
  70. test = stringsum("");
  71. sprintf(buf, "Returned: %d, Expected: %d", test, 0);
  72. logger(test == 0, buf);
  73. test_num = 1;
  74. printf("Testing distance_between()\n");
  75. test = distance_between("a1234a", 'a');
  76. sprintf(buf, "Returned: %d, Expected: %d", test, 5);
  77. logger(test == 5, buf);
  78. test = distance_between("a1234", 'a');
  79. sprintf(buf, "Returned: %d, Expected: %d", test, -1);
  80. logger(test == -1, buf);
  81. test = distance_between("123456a12334a123a", 'a');
  82. sprintf(buf, "Returned: %d, Expected: %d", test, 6 );
  83. logger(test == 6, buf);
  84. test = distance_between("", 'a');
  85. sprintf(buf, "Returned: %d, Expected: %d", test, -1);
  86. logger(test == -1, buf);
  87. test_num = 1;
  88. printf("Testing string_between()\n");
  89. res_char = string_between("a1234a", 'a');
  90. sprintf(buf, "Returned: %s, Expected: %s", res_char, "1234");
  91. if (res_char) {
  92. logger(!strcmp(res_char, "1234"), buf);
  93. free(res_char);
  94. } else {
  95. logger(0, buf);
  96. }
  97. res_char = string_between("a1234", 'a');
  98. if(res_char) {
  99. sprintf(buf, "Returned: %s, Expected: %p", res_char, NULL);
  100. } else {
  101. sprintf(buf, "Returned: %p, Expected: %p", res_char, NULL);
  102. }
  103. logger(res_char == NULL, buf);
  104. res_char = string_between("A123adette er svaretaasd2qd3asd12", 'a');
  105. sprintf(buf, "Returned: %s, Expected: %s", res_char, "dette er sv");
  106. if (res_char) {
  107. logger(!strcmp(res_char, "dette er sv"), buf);
  108. free(res_char);
  109. } else {
  110. logger(0, buf);
  111. }
  112. res_char = string_between("", 'a');
  113. if(res_char) {
  114. sprintf(buf, "Returned: %s, Expected: %p", res_char, NULL);
  115. } else {
  116. sprintf(buf, "Returned: %p, Expected: %p", res_char, NULL);
  117. }
  118. logger(res_char == NULL, buf);
  119. test_num = 1;
  120. printf("Testing stringsum2()\n");
  121. stringsum2("abcd", &res_int);
  122. sprintf(buf, "Returned: %d, Expected: %d", res_int, 10);
  123. logger(res_int == 10, buf);
  124. stringsum2("abcd!", &res_int);
  125. sprintf(buf, "Returned: %d, Expected: %d", res_int, -1);
  126. logger(res_int == -1, buf);
  127. stringsum2("bbbdbbbbbdbbdbbbbbddbbbbbdbbdbbbbdbd", &res_int);
  128. sprintf(buf, "Returned: %d, Expected: %d", res_int, 90);
  129. logger(res_int == 90, buf);
  130. stringsum2("", &res_int);
  131. sprintf(buf, "Returned: %d, Expected: %d", res_int, 0);
  132. logger(res_int == 0, buf);
  133. test_num = 1;
  134. printf("Testing split()\n");
  135. test_split("abcd", (char *[]){ "abcd", NULL });
  136. test_split("Hei du", (char *[]){ "Hei", "du", NULL });
  137. test_split("Dette er mange ord", (char *[]){ "Dette", "er", "mange", "ord", NULL });
  138. return 0;
  139. }