string_util_gtest.cc 3.2 KB

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