test-utils.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. #define GTEST_COUT std::cerr << "[ ] [ INFO ]"
  19. namespace {
  20. TEST(UtilsRandRange, rangehits_10k) {
  21. int x;
  22. int rmin = 5, rmax = 200;
  23. int max = -rmax, min = rmax * 2;
  24. for (x = 0; x < 10000; x++) {
  25. int r = randrange(rmin, rmax);
  26. if (r < min)
  27. min = r;
  28. if (r > max)
  29. max = r;
  30. }
  31. ASSERT_EQ(min, rmin);
  32. ASSERT_EQ(max, rmax);
  33. }
  34. TEST(UtilsRandInt, rangeint_10k) {
  35. int x;
  36. int rmax = 200;
  37. int max = -rmax, min = rmax * 2;
  38. for (x = 0; x < 10000; x++) {
  39. int r = randint(rmax);
  40. if (r < min)
  41. min = r;
  42. if (r > max)
  43. max = r;
  44. }
  45. ASSERT_EQ(min, 0);
  46. ASSERT_EQ(max, rmax - 1);
  47. }
  48. TEST(UtilsRandActivate, rand_activate) {
  49. int yes, no, r;
  50. for (int l = 1; l < 5; l++) {
  51. yes = 0;
  52. no = 0;
  53. int total = 100000;
  54. for (int x = 0; x < total; x++) {
  55. if (random_activate(l))
  56. yes++;
  57. else
  58. no++;
  59. }
  60. GTEST_COUT << "Total " << total << ", Yes " << yes << std::endl;
  61. r = total / 100 * (l + 1);
  62. ASSERT_LE(abs(r - yes), 100);
  63. }
  64. }
  65. TEST(UtilsStrNStr, strnstr) {
  66. // const char *strnstr(const char *source, int len, const char *needle);
  67. char buffer[20];
  68. int size = sizeof(buffer);
  69. memset(buffer, ' ', size);
  70. ASSERT_EQ(strnstr(buffer, size, "?"), (char *)NULL);
  71. buffer[10] = '?';
  72. ASSERT_EQ(strnstr(buffer, size, "?"), &buffer[10]);
  73. ASSERT_EQ(strnstr(buffer, 10, "?"), (char *)NULL);
  74. buffer[11] = '!';
  75. ASSERT_EQ(strnstr(buffer, size, "?!"), &buffer[10]);
  76. ASSERT_EQ(strnstr(buffer, size, "??"), (char *)NULL);
  77. // Matches first char, but the length doesn't allow for a complete match.
  78. ASSERT_EQ(strnstr(buffer, 10, "?!"), (char *)NULL);
  79. // There, enough chars to find a match
  80. ASSERT_EQ(strnstr(buffer, 11, "?!"), &buffer[10]);
  81. buffer[2] = '?';
  82. buffer[5] = '?';
  83. buffer[1] = '!';
  84. // First char matches, but not complete
  85. ASSERT_EQ(strnstr(buffer, 10, "?!"), (char *)NULL);
  86. ASSERT_EQ(strnstr(buffer, 11, "?!"), &buffer[10]);
  87. }
  88. TEST(UtilsStringInsert, strin) {
  89. // int string_insert(char *buffer, int max_length, int pos, const char
  90. // *insert);
  91. char buffer[20];
  92. int size = sizeof(buffer);
  93. memset(buffer, 1, size);
  94. strcpy(buffer, "STARTEND");
  95. ASSERT_EQ(string_insert(buffer, size, 5, "XX"), 1);
  96. ASSERT_EQ(strncmp(buffer + 5, "XX", 2), 0);
  97. ASSERT_STREQ(buffer, "STARTXXEND");
  98. ASSERT_EQ(string_insert(buffer, size, 5, "ZZZ"), 1);
  99. ASSERT_STREQ(buffer, "STARTZZZXXEND");
  100. // 13 chars
  101. ASSERT_EQ(string_insert(buffer, size, 0, "12345"), 1);
  102. // 18 chars
  103. ASSERT_STREQ(buffer, "12345STARTZZZXXEND");
  104. ASSERT_EQ(string_insert(buffer, size, 5, "FAIL"), 0);
  105. ASSERT_EQ(string_insert(buffer, size, size, "!"), 0);
  106. ASSERT_EQ(string_insert(buffer, size, strlen(buffer), "!"), 1);
  107. ASSERT_STREQ(buffer, "12345STARTZZZXXEND!");
  108. // String is at max size.
  109. ASSERT_EQ(strlen(buffer), size - 1);
  110. // Can't insert base the end of the buffer
  111. ASSERT_EQ(string_insert(buffer, size, strlen(buffer), "!"), 0);
  112. ASSERT_STREQ(buffer, "12345STARTZZZXXEND!");
  113. }
  114. } // namespace