Home | History | Annotate | Download | only in test
      1 //===---------------------------------------------------------------------===//
      2 // statistics_test - Unit tests for src/statistics.cc
      3 //===---------------------------------------------------------------------===//
      4 
      5 #include "../src/string_util.h"
      6 #include "gtest/gtest.h"
      7 
      8 namespace {
      9 TEST(StringUtilTest, stoul) {
     10   {
     11     size_t pos = 0;
     12     EXPECT_EQ(0ul, benchmark::stoul("0", &pos));
     13     EXPECT_EQ(1ul, pos);
     14   }
     15   {
     16     size_t pos = 0;
     17     EXPECT_EQ(7ul, benchmark::stoul("7", &pos));
     18     EXPECT_EQ(1ul, pos);
     19   }
     20   {
     21     size_t pos = 0;
     22     EXPECT_EQ(135ul, benchmark::stoul("135", &pos));
     23     EXPECT_EQ(3ul, pos);
     24   }
     25 #if ULONG_MAX == 0xFFFFFFFFul
     26   {
     27     size_t pos = 0;
     28     EXPECT_EQ(0xFFFFFFFFul, benchmark::stoul("4294967295", &pos));
     29     EXPECT_EQ(10ul, pos);
     30   }
     31 #elif ULONG_MAX == 0xFFFFFFFFFFFFFFFFul
     32   {
     33     size_t pos = 0;
     34     EXPECT_EQ(0xFFFFFFFFFFFFFFFFul, benchmark::stoul("18446744073709551615", &pos));
     35     EXPECT_EQ(20ul, pos);
     36   }
     37 #endif
     38   {
     39     size_t pos = 0;
     40     EXPECT_EQ(10ul, benchmark::stoul("1010", &pos, 2));
     41     EXPECT_EQ(4ul, pos);
     42   }
     43   {
     44     size_t pos = 0;
     45     EXPECT_EQ(520ul, benchmark::stoul("1010", &pos, 8));
     46     EXPECT_EQ(4ul, pos);
     47   }
     48   {
     49     size_t pos = 0;
     50     EXPECT_EQ(1010ul, benchmark::stoul("1010", &pos, 10));
     51     EXPECT_EQ(4ul, pos);
     52   }
     53   {
     54     size_t pos = 0;
     55     EXPECT_EQ(4112ul, benchmark::stoul("1010", &pos, 16));
     56     EXPECT_EQ(4ul, pos);
     57   }
     58   {
     59     size_t pos = 0;
     60     EXPECT_EQ(0xBEEFul, benchmark::stoul("BEEF", &pos, 16));
     61     EXPECT_EQ(4ul, pos);
     62   }
     63   {
     64     ASSERT_THROW(benchmark::stoul("this is a test"), std::invalid_argument);
     65   }
     66 }
     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   {
    110     ASSERT_THROW(benchmark::stoi("this is a test"), std::invalid_argument);
    111   }
    112 }
    113 
    114 TEST(StringUtilTest, stod) {
    115   {
    116     size_t pos = 0;
    117     EXPECT_EQ(0.0, benchmark::stod("0", &pos));
    118     EXPECT_EQ(1ul, pos);
    119   }
    120   {
    121     size_t pos = 0;
    122     EXPECT_EQ(-84.0, benchmark::stod("-84", &pos));
    123     EXPECT_EQ(3ul, pos);
    124   }
    125   {
    126     size_t pos = 0;
    127     EXPECT_EQ(1234.0, benchmark::stod("1234", &pos));
    128     EXPECT_EQ(4ul, pos);
    129   }
    130   {
    131     size_t pos = 0;
    132     EXPECT_EQ(1.5, benchmark::stod("1.5", &pos));
    133     EXPECT_EQ(3ul, pos);
    134   }
    135   {
    136     size_t pos = 0;
    137     /* Note: exactly representable as double */
    138     EXPECT_EQ(-1.25e+9, benchmark::stod("-1.25e+9", &pos));
    139     EXPECT_EQ(8ul, pos);
    140   }
    141   {
    142     ASSERT_THROW(benchmark::stod("this is a test"), std::invalid_argument);
    143   }
    144 }
    145 
    146 }  // end namespace
    147