brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 67b4bc0 Raw
200 lines · plain
1//===---------------------------------------------------------------------===//2// string_util_test - Unit tests for src/string_util.cc3//===---------------------------------------------------------------------===//4 5#include <tuple>6 7#include "../src/internal_macros.h"8#include "../src/string_util.h"9#include "gmock/gmock.h"10#include "gtest/gtest.h"11 12namespace {13TEST(StringUtilTest, stoul) {14  {15    size_t pos = 0;16    EXPECT_EQ(0ul, benchmark::stoul("0", &pos));17    EXPECT_EQ(1ul, pos);18  }19  {20    size_t pos = 0;21    EXPECT_EQ(7ul, benchmark::stoul("7", &pos));22    EXPECT_EQ(1ul, pos);23  }24  {25    size_t pos = 0;26    EXPECT_EQ(135ul, benchmark::stoul("135", &pos));27    EXPECT_EQ(3ul, pos);28  }29#if ULONG_MAX == 0xFFFFFFFFul30  {31    size_t pos = 0;32    EXPECT_EQ(0xFFFFFFFFul, benchmark::stoul("4294967295", &pos));33    EXPECT_EQ(10ul, pos);34  }35#elif ULONG_MAX == 0xFFFFFFFFFFFFFFFFul36  {37    size_t pos = 0;38    EXPECT_EQ(0xFFFFFFFFFFFFFFFFul,39              benchmark::stoul("18446744073709551615", &pos));40    EXPECT_EQ(20ul, pos);41  }42#endif43  {44    size_t pos = 0;45    EXPECT_EQ(10ul, benchmark::stoul("1010", &pos, 2));46    EXPECT_EQ(4ul, pos);47  }48  {49    size_t pos = 0;50    EXPECT_EQ(520ul, benchmark::stoul("1010", &pos, 8));51    EXPECT_EQ(4ul, pos);52  }53  {54    size_t pos = 0;55    EXPECT_EQ(1010ul, benchmark::stoul("1010", &pos, 10));56    EXPECT_EQ(4ul, pos);57  }58  {59    size_t pos = 0;60    EXPECT_EQ(4112ul, benchmark::stoul("1010", &pos, 16));61    EXPECT_EQ(4ul, pos);62  }63  {64    size_t pos = 0;65    EXPECT_EQ(0xBEEFul, benchmark::stoul("BEEF", &pos, 16));66    EXPECT_EQ(4ul, pos);67  }68#ifndef BENCHMARK_HAS_NO_EXCEPTIONS69  {70    ASSERT_THROW(std::ignore = benchmark::stoul("this is a test"),71                 std::invalid_argument);72  }73#endif74}75 76TEST(StringUtilTest, stoi){{size_t pos = 0;77EXPECT_EQ(0, benchmark::stoi("0", &pos));78EXPECT_EQ(1ul, pos);79}  // namespace80{81  size_t pos = 0;82  EXPECT_EQ(-17, benchmark::stoi("-17", &pos));83  EXPECT_EQ(3ul, pos);84}85{86  size_t pos = 0;87  EXPECT_EQ(1357, benchmark::stoi("1357", &pos));88  EXPECT_EQ(4ul, pos);89}90{91  size_t pos = 0;92  EXPECT_EQ(10, benchmark::stoi("1010", &pos, 2));93  EXPECT_EQ(4ul, pos);94}95{96  size_t pos = 0;97  EXPECT_EQ(520, benchmark::stoi("1010", &pos, 8));98  EXPECT_EQ(4ul, pos);99}100{101  size_t pos = 0;102  EXPECT_EQ(1010, benchmark::stoi("1010", &pos, 10));103  EXPECT_EQ(4ul, pos);104}105{106  size_t pos = 0;107  EXPECT_EQ(4112, benchmark::stoi("1010", &pos, 16));108  EXPECT_EQ(4ul, pos);109}110{111  size_t pos = 0;112  EXPECT_EQ(0xBEEF, benchmark::stoi("BEEF", &pos, 16));113  EXPECT_EQ(4ul, pos);114}115#ifndef BENCHMARK_HAS_NO_EXCEPTIONS116{117  ASSERT_THROW(std::ignore = benchmark::stoi("this is a test"),118               std::invalid_argument);119}120#endif121}122 123TEST(StringUtilTest, stod){{size_t pos = 0;124EXPECT_EQ(0.0, benchmark::stod("0", &pos));125EXPECT_EQ(1ul, pos);126}127{128  size_t pos = 0;129  EXPECT_EQ(-84.0, benchmark::stod("-84", &pos));130  EXPECT_EQ(3ul, pos);131}132{133  size_t pos = 0;134  EXPECT_EQ(1234.0, benchmark::stod("1234", &pos));135  EXPECT_EQ(4ul, pos);136}137{138  size_t pos = 0;139  EXPECT_EQ(1.5, benchmark::stod("1.5", &pos));140  EXPECT_EQ(3ul, pos);141}142{143  size_t pos = 0;144  /* Note: exactly representable as double */145  EXPECT_EQ(-1.25e+9, benchmark::stod("-1.25e+9", &pos));146  EXPECT_EQ(8ul, pos);147}148#ifndef BENCHMARK_HAS_NO_EXCEPTIONS149{150  ASSERT_THROW(std::ignore = benchmark::stod("this is a test"),151               std::invalid_argument);152}153#endif154}155 156TEST(StringUtilTest, StrSplit) {157  EXPECT_EQ(benchmark::StrSplit("", ','), std::vector<std::string>{});158  EXPECT_EQ(benchmark::StrSplit("hello", ','),159            std::vector<std::string>({"hello"}));160  EXPECT_EQ(benchmark::StrSplit("hello,there,is,more", ','),161            std::vector<std::string>({"hello", "there", "is", "more"}));162}163 164using HumanReadableFixture = ::testing::TestWithParam<165    std::tuple<double, benchmark::Counter::OneK, std::string>>;166 167INSTANTIATE_TEST_SUITE_P(168    HumanReadableTests, HumanReadableFixture,169    ::testing::Values(170        std::make_tuple(0.0, benchmark::Counter::kIs1024, "0"),171        std::make_tuple(999.0, benchmark::Counter::kIs1024, "999"),172        std::make_tuple(1000.0, benchmark::Counter::kIs1024, "1000"),173        std::make_tuple(1024.0, benchmark::Counter::kIs1024, "1Ki"),174        std::make_tuple(1000 * 1000.0, benchmark::Counter::kIs1024,175                        "976\\.56.Ki"),176        std::make_tuple(1024 * 1024.0, benchmark::Counter::kIs1024, "1Mi"),177        std::make_tuple(1000 * 1000 * 1000.0, benchmark::Counter::kIs1024,178                        "953\\.674Mi"),179        std::make_tuple(1024 * 1024 * 1024.0, benchmark::Counter::kIs1024,180                        "1Gi"),181        std::make_tuple(0.0, benchmark::Counter::kIs1000, "0"),182        std::make_tuple(999.0, benchmark::Counter::kIs1000, "999"),183        std::make_tuple(1000.0, benchmark::Counter::kIs1000, "1k"),184        std::make_tuple(1024.0, benchmark::Counter::kIs1000, "1.024k"),185        std::make_tuple(1000 * 1000.0, benchmark::Counter::kIs1000, "1M"),186        std::make_tuple(1024 * 1024.0, benchmark::Counter::kIs1000,187                        "1\\.04858M"),188        std::make_tuple(1000 * 1000 * 1000.0, benchmark::Counter::kIs1000,189                        "1G"),190        std::make_tuple(1024 * 1024 * 1024.0, benchmark::Counter::kIs1000,191                        "1\\.07374G")));192 193TEST_P(HumanReadableFixture, HumanReadableNumber) {194  std::string str = benchmark::HumanReadableNumber(std::get<0>(GetParam()),195                                                   std::get<1>(GetParam()));196  ASSERT_THAT(str, ::testing::MatchesRegex(std::get<2>(GetParam())));197}198 199}  // end namespace200