string_util_gtest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. //===---------------------------------------------------------------------===//
  2. // statistics_test - Unit tests for src/statistics.cc
  3. //===---------------------------------------------------------------------===//
  4. #include "../src/string_util.h"
  5. #include "../src/internal_macros.h"
  6. #include "gtest/gtest.h"
  7. namespace {
  8. TEST(StringUtilTest, stoul) {
  9. {
  10. size_t pos = 0;
  11. EXPECT_EQ(0ul, benchmark::stoul("0", &pos));
  12. EXPECT_EQ(1ul, pos);
  13. }
  14. {
  15. size_t pos = 0;
  16. EXPECT_EQ(7ul, benchmark::stoul("7", &pos));
  17. EXPECT_EQ(1ul, pos);
  18. }
  19. {
  20. size_t pos = 0;
  21. EXPECT_EQ(135ul, benchmark::stoul("135", &pos));
  22. EXPECT_EQ(3ul, pos);
  23. }
  24. #if ULONG_MAX == 0xFFFFFFFFul
  25. {
  26. size_t pos = 0;
  27. EXPECT_EQ(0xFFFFFFFFul, benchmark::stoul("4294967295", &pos));
  28. EXPECT_EQ(10ul, pos);
  29. }
  30. #elif ULONG_MAX == 0xFFFFFFFFFFFFFFFFul
  31. {
  32. size_t pos = 0;
  33. EXPECT_EQ(0xFFFFFFFFFFFFFFFFul, benchmark::stoul("18446744073709551615", &pos));
  34. EXPECT_EQ(20ul, pos);
  35. }
  36. #endif
  37. {
  38. size_t pos = 0;
  39. EXPECT_EQ(10ul, benchmark::stoul("1010", &pos, 2));
  40. EXPECT_EQ(4ul, pos);
  41. }
  42. {
  43. size_t pos = 0;
  44. EXPECT_EQ(520ul, benchmark::stoul("1010", &pos, 8));
  45. EXPECT_EQ(4ul, pos);
  46. }
  47. {
  48. size_t pos = 0;
  49. EXPECT_EQ(1010ul, benchmark::stoul("1010", &pos, 10));
  50. EXPECT_EQ(4ul, pos);
  51. }
  52. {
  53. size_t pos = 0;
  54. EXPECT_EQ(4112ul, benchmark::stoul("1010", &pos, 16));
  55. EXPECT_EQ(4ul, pos);
  56. }
  57. {
  58. size_t pos = 0;
  59. EXPECT_EQ(0xBEEFul, benchmark::stoul("BEEF", &pos, 16));
  60. EXPECT_EQ(4ul, pos);
  61. }
  62. #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
  63. {
  64. ASSERT_THROW(benchmark::stoul("this is a test"), std::invalid_argument);
  65. }
  66. #endif
  67. }
  68. TEST(StringUtilTest, stoi) {
  69. {
  70. size_t pos = 0;
  71. EXPECT_EQ(0, benchmark::stoi("0", &pos));
  72. EXPECT_EQ(1ul, pos);
  73. }
  74. {
  75. size_t pos = 0;
  76. EXPECT_EQ(-17, benchmark::stoi("-17", &pos));
  77. EXPECT_EQ(3ul, pos);
  78. }
  79. {
  80. size_t pos = 0;
  81. EXPECT_EQ(1357, benchmark::stoi("1357", &pos));
  82. EXPECT_EQ(4ul, pos);
  83. }
  84. {
  85. size_t pos = 0;
  86. EXPECT_EQ(10, benchmark::stoi("1010", &pos, 2));
  87. EXPECT_EQ(4ul, pos);
  88. }
  89. {
  90. size_t pos = 0;
  91. EXPECT_EQ(520, benchmark::stoi("1010", &pos, 8));
  92. EXPECT_EQ(4ul, pos);
  93. }
  94. {
  95. size_t pos = 0;
  96. EXPECT_EQ(1010, benchmark::stoi("1010", &pos, 10));
  97. EXPECT_EQ(4ul, pos);
  98. }
  99. {
  100. size_t pos = 0;
  101. EXPECT_EQ(4112, benchmark::stoi("1010", &pos, 16));
  102. EXPECT_EQ(4ul, pos);
  103. }
  104. {
  105. size_t pos = 0;
  106. EXPECT_EQ(0xBEEF, benchmark::stoi("BEEF", &pos, 16));
  107. EXPECT_EQ(4ul, pos);
  108. }
  109. #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
  110. {
  111. ASSERT_THROW(benchmark::stoi("this is a test"), std::invalid_argument);
  112. }
  113. #endif
  114. }
  115. TEST(StringUtilTest, stod) {
  116. {
  117. size_t pos = 0;
  118. EXPECT_EQ(0.0, benchmark::stod("0", &pos));
  119. EXPECT_EQ(1ul, pos);
  120. }
  121. {
  122. size_t pos = 0;
  123. EXPECT_EQ(-84.0, benchmark::stod("-84", &pos));
  124. EXPECT_EQ(3ul, pos);
  125. }
  126. {
  127. size_t pos = 0;
  128. EXPECT_EQ(1234.0, benchmark::stod("1234", &pos));
  129. EXPECT_EQ(4ul, pos);
  130. }
  131. {
  132. size_t pos = 0;
  133. EXPECT_EQ(1.5, benchmark::stod("1.5", &pos));
  134. EXPECT_EQ(3ul, pos);
  135. }
  136. {
  137. size_t pos = 0;
  138. /* Note: exactly representable as double */
  139. EXPECT_EQ(-1.25e+9, benchmark::stod("-1.25e+9", &pos));
  140. EXPECT_EQ(8ul, pos);
  141. }
  142. #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
  143. {
  144. ASSERT_THROW(benchmark::stod("this is a test"), std::invalid_argument);
  145. }
  146. #endif
  147. }
  148. TEST(StringUtilTest, StrSplit) {
  149. EXPECT_EQ(benchmark::StrSplit("", ','), std::vector<std::string>{});
  150. EXPECT_EQ(benchmark::StrSplit("hello", ','),
  151. std::vector<std::string>({"hello"}));
  152. EXPECT_EQ(benchmark::StrSplit("hello,there,is,more", ','),
  153. std::vector<std::string>({"hello", "there", "is", "more"}));
  154. }
  155. } // end namespace