test-utils.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // Not sure where to begin with gtest?
  2. //
  3. // What can I test with gtest?
  4. //
  5. // googletest/googletest/docs/primer.md
  6. #include <string.h>
  7. #include "utils.h"
  8. #include "gtest/gtest.h"
  9. /*
  10. int randint(int N);
  11. int randrange(int M, int N);
  12. char *repr(const char *data);
  13. const char *strnstr(const char *source, int len, const char *needle);
  14. int rstrnstr(const char *buffer, int len, const char *find);
  15. int string_insert(char *buffer, int max_length, int pos, const char *insert);
  16. void pcopy(char *pstring, char *str);
  17. */
  18. namespace {
  19. TEST(UtilsRandRange, rangehits_10k) {
  20. int x;
  21. int rmin = 5, rmax = 200;
  22. int max = -rmax, min = rmax * 2;
  23. for (x = 0; x < 10000; x++) {
  24. int r = randrange(rmin, rmax);
  25. if (r < min)
  26. min = r;
  27. if (r > max)
  28. max = r;
  29. }
  30. ASSERT_EQ(min, rmin);
  31. ASSERT_EQ(max, rmax);
  32. }
  33. TEST(UtilsRandInt, rangeint_10k) {
  34. int x;
  35. int rmax = 200;
  36. int max = -rmax, min = rmax * 2;
  37. for (x = 0; x < 10000; x++) {
  38. int r = randint(rmax);
  39. if (r < min)
  40. min = r;
  41. if (r > max)
  42. max = r;
  43. }
  44. ASSERT_EQ(min, 0);
  45. ASSERT_EQ(max, rmax - 1);
  46. }
  47. TEST(UtilsStrNStr, strnstr) {
  48. // const char *strnstr(const char *source, int len, const char *needle);
  49. char buffer[20];
  50. int size = sizeof(buffer);
  51. memset(buffer, ' ', size);
  52. ASSERT_EQ(strnstr(buffer, size, "?"), (char *)NULL);
  53. buffer[10] = '?';
  54. ASSERT_EQ(strnstr(buffer, size, "?"), &buffer[10]);
  55. ASSERT_EQ(strnstr(buffer, 10, "?"), (char *)NULL);
  56. buffer[11] = '!';
  57. ASSERT_EQ(strnstr(buffer, size, "?!"), &buffer[10]);
  58. ASSERT_EQ(strnstr(buffer, size, "??"), (char *)NULL);
  59. // Matches first char, but the length doesn't allow for a complete match.
  60. ASSERT_EQ(strnstr(buffer, 10, "?!"), (char *)NULL);
  61. // There, enough chars to find a match
  62. ASSERT_EQ(strnstr(buffer, 11, "?!"), &buffer[10]);
  63. buffer[2] = '?';
  64. buffer[5] = '?';
  65. buffer[1] = '!';
  66. // First char matches, but not complete
  67. ASSERT_EQ(strnstr(buffer, 10, "?!"), (char *)NULL);
  68. ASSERT_EQ(strnstr(buffer, 11, "?!"), &buffer[10]);
  69. }
  70. TEST(UtilsStringInsert, strin) {
  71. // int string_insert(char *buffer, int max_length, int pos, const char
  72. // *insert);
  73. char buffer[20];
  74. int size = sizeof(buffer);
  75. memset(buffer, 1, size);
  76. strcpy(buffer, "STARTEND");
  77. ASSERT_EQ(string_insert(buffer, size, 5, "XX"), 1);
  78. ASSERT_EQ(strncmp(buffer + 5, "XX", 2), 0);
  79. ASSERT_STREQ(buffer, "STARTXXEND");
  80. ASSERT_EQ(string_insert(buffer, size, 5, "ZZZ"), 1);
  81. ASSERT_STREQ(buffer, "STARTZZZXXEND");
  82. // 13 chars
  83. ASSERT_EQ(string_insert(buffer, size, 0, "12345"), 1);
  84. // 18 chars
  85. ASSERT_STREQ(buffer, "12345STARTZZZXXEND");
  86. ASSERT_EQ(string_insert(buffer, size, 5, "FAIL"), 0);
  87. ASSERT_EQ(string_insert(buffer, size, size, "!"), 0);
  88. ASSERT_EQ(string_insert(buffer, size, strlen(buffer), "!"), 1);
  89. ASSERT_STREQ(buffer, "12345STARTZZZXXEND!");
  90. // String is at max size.
  91. ASSERT_EQ(strlen(buffer), size - 1);
  92. // Can't insert base the end of the buffer
  93. ASSERT_EQ(string_insert(buffer, size, strlen(buffer), "!"), 0);
  94. ASSERT_STREQ(buffer, "12345STARTZZZXXEND!");
  95. }
  96. } // namespace