gitout

A static git page generator
git clone https://git.bracken.jp/gitout.git
Log | Files | Refs | README | LICENSE

test17.cpp (7486B)


      1 // This is free and unencumbered software released into the public domain.
      2 //
      3 // Anyone is free to copy, modify, publish, use, compile, sell, or
      4 // distribute this software, either in source code form or as a compiled
      5 // binary, for any purpose, commercial or non-commercial, and by any
      6 // means.
      7 //
      8 // In jurisdictions that recognize copyright laws, the author or authors
      9 // of this software dedicate any and all copyright interest in the
     10 // software to the public domain. We make this dedication for the benefit
     11 // of the public at large and to the detriment of our heirs and
     12 // successors. We intend this dedication to be an overt act of
     13 // relinquishment in perpetuity of all present and future rights to this
     14 // software under copyright law.
     15 //
     16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     19 // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20 // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22 // OTHER DEALINGS IN THE SOFTWARE.
     23 //
     24 // For more information, please refer to <http://unlicense.org/>
     25 
     26 #include "utest.h"
     27 
     28 #ifdef _MSC_VER
     29 // disable 'conditional expression is constant' - our examples below use this!
     30 #pragma warning(disable : 4127)
     31 #endif
     32 
     33 UTEST(cpp17, ASSERT_TRUE) { ASSERT_TRUE(1); }
     34 
     35 UTEST(cpp17, ASSERT_FALSE) { ASSERT_FALSE(0); }
     36 
     37 UTEST(cpp17, ASSERT_EQ) { ASSERT_EQ(1, 1); }
     38 
     39 UTEST(cpp17, ASSERT_NE) { ASSERT_NE(1, 2); }
     40 
     41 UTEST(cpp17, ASSERT_LT) { ASSERT_LT(1, 2); }
     42 
     43 UTEST(cpp17, ASSERT_LE) {
     44   ASSERT_LE(1, 1);
     45   ASSERT_LE(1, 2);
     46 }
     47 
     48 UTEST(cpp17, ASSERT_GT) { ASSERT_GT(2, 1); }
     49 
     50 UTEST(cpp17, ASSERT_GE) {
     51   ASSERT_GE(1, 1);
     52   ASSERT_GE(2, 1);
     53 }
     54 
     55 UTEST(cpp17, ASSERT_STREQ) { ASSERT_STREQ("foo", "foo"); }
     56 
     57 UTEST(cpp17, ASSERT_STRNE) { ASSERT_STRNE("foo", "bar"); }
     58 
     59 UTEST(cpp17, ASSERT_STRNEQ) { ASSERT_STRNEQ("foo", "foobar", strlen("foo")); }
     60 
     61 UTEST(cpp17, ASSERT_STRNNE) { ASSERT_STRNNE("foo", "barfoo", strlen("foo")); }
     62 
     63 UTEST(cpp17, EXPECT_TRUE) { EXPECT_TRUE(1); }
     64 
     65 UTEST(cpp17, EXPECT_FALSE) { EXPECT_FALSE(0); }
     66 
     67 UTEST(cpp17, EXPECT_EQ) { EXPECT_EQ(1, 1); }
     68 
     69 UTEST(cpp17, EXPECT_NE) { EXPECT_NE(1, 2); }
     70 
     71 UTEST(cpp17, EXPECT_LT) { EXPECT_LT(1, 2); }
     72 
     73 UTEST(cpp17, EXPECT_LE) {
     74   EXPECT_LE(1, 1);
     75   EXPECT_LE(1, 2);
     76 }
     77 
     78 UTEST(cpp17, EXPECT_GT) { EXPECT_GT(2, 1); }
     79 
     80 UTEST(cpp17, EXPECT_GE) {
     81   EXPECT_GE(1, 1);
     82   EXPECT_GE(2, 1);
     83 }
     84 
     85 UTEST(cpp17, EXPECT_STREQ) { EXPECT_STREQ("foo", "foo"); }
     86 
     87 UTEST(cpp17, EXPECT_STRNE) { EXPECT_STRNE("foo", "bar"); }
     88 
     89 UTEST(cpp17, EXPECT_STRNEQ) { EXPECT_STRNEQ("foo", "foobar", strlen("foo")); }
     90 
     91 UTEST(cpp17, EXPECT_STRNNE) { EXPECT_STRNNE("foo", "barfoo", strlen("foo")); }
     92 
     93 UTEST(cpp17, no_double_eval) {
     94   int i = 0;
     95   ASSERT_EQ(i++, 0);
     96   ASSERT_EQ(i, 1);
     97 }
     98 
     99 UTEST(cpp17, bool_eval) {
    100   bool i = false;
    101   ASSERT_EQ(i, false);
    102   i = true;
    103   ASSERT_EQ(i, true);
    104 }
    105 
    106 struct MyTestF {
    107   int foo;
    108 };
    109 
    110 UTEST_F_SETUP(MyTestF) {
    111   ASSERT_EQ(0, utest_fixture->foo);
    112   utest_fixture->foo = 42;
    113 }
    114 
    115 UTEST_F_TEARDOWN(MyTestF) { ASSERT_EQ(13, utest_fixture->foo); }
    116 
    117 UTEST_F(MyTestF, cpp17_1) {
    118   ASSERT_EQ(42, utest_fixture->foo);
    119   utest_fixture->foo = 13;
    120 }
    121 
    122 UTEST_F(MyTestF, cpp17_2) {
    123   ASSERT_EQ(42, utest_fixture->foo);
    124   utest_fixture->foo = 13;
    125 }
    126 
    127 struct MyTestI {
    128   size_t foo;
    129   size_t bar;
    130 };
    131 
    132 UTEST_I_SETUP(MyTestI) {
    133   ASSERT_EQ(0u, utest_fixture->foo);
    134   ASSERT_EQ(0u, utest_fixture->bar);
    135   utest_fixture->foo = 42;
    136   utest_fixture->bar = utest_index;
    137 }
    138 
    139 UTEST_I_TEARDOWN(MyTestI) {
    140   ASSERT_EQ(13u, utest_fixture->foo);
    141   ASSERT_EQ(utest_index, utest_fixture->bar);
    142 }
    143 
    144 UTEST_I(MyTestI, cpp17_1, 2) {
    145   ASSERT_GT(2u, utest_fixture->bar);
    146   utest_fixture->foo = 13;
    147 }
    148 
    149 UTEST_I(MyTestI, cpp17_2, 128) {
    150   ASSERT_GT(128u, utest_fixture->bar);
    151   utest_fixture->foo = 13;
    152 }
    153 
    154 UTEST(cpp17, Float) {
    155   float a = 1;
    156   float b = 2;
    157   EXPECT_NE(a, b);
    158   ASSERT_NE(a, b);
    159 }
    160 
    161 UTEST(cpp17, Double) {
    162   double a = 1;
    163   double b = 2;
    164   EXPECT_NE(a, b);
    165   ASSERT_NE(a, b);
    166 }
    167 
    168 UTEST(cpp17, LongDouble) {
    169   long double a = 1;
    170   long double b = 2;
    171   EXPECT_NE(a, b);
    172   ASSERT_NE(a, b);
    173 }
    174 
    175 UTEST(cpp17, Char) {
    176   char a = 1;
    177   char b = 2;
    178   EXPECT_NE(a, b);
    179   ASSERT_NE(a, b);
    180 }
    181 
    182 UTEST(cpp17, SignedChar) {
    183   signed char a = 1;
    184   signed char b = 2;
    185   EXPECT_NE(a, b);
    186   ASSERT_NE(a, b);
    187 }
    188 
    189 UTEST(cpp17, UChar) {
    190   unsigned char a = 1;
    191   unsigned char b = 2;
    192   EXPECT_NE(a, b);
    193   ASSERT_NE(a, b);
    194 }
    195 
    196 UTEST(cpp17, Short) {
    197   short a = 1;
    198   short b = 2;
    199   EXPECT_NE(a, b);
    200   ASSERT_NE(a, b);
    201 }
    202 
    203 UTEST(cpp17, UShort) {
    204   unsigned short a = 1;
    205   unsigned short b = 2;
    206   EXPECT_NE(a, b);
    207   ASSERT_NE(a, b);
    208 }
    209 
    210 UTEST(cpp17, Int) {
    211   int a = 1;
    212   int b = 2;
    213   EXPECT_NE(a, b);
    214   ASSERT_NE(a, b);
    215 }
    216 
    217 UTEST(cpp17, UInt) {
    218   unsigned int a = 1;
    219   unsigned int b = 2;
    220   EXPECT_NE(a, b);
    221   ASSERT_NE(a, b);
    222 }
    223 
    224 UTEST(cpp17, Long) {
    225   long a = 1;
    226   long b = 2;
    227   EXPECT_NE(a, b);
    228   ASSERT_NE(a, b);
    229 }
    230 
    231 UTEST(cpp17, ULong) {
    232   unsigned long a = 1;
    233   unsigned long b = 2;
    234   EXPECT_NE(a, b);
    235   ASSERT_NE(a, b);
    236 }
    237 
    238 #ifdef __clang__
    239 #pragma clang diagnostic push
    240 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
    241 #endif
    242 
    243 UTEST(cpp17, LongLong) {
    244   long long a = 1;
    245   long long b = 2;
    246   EXPECT_NE(a, b);
    247   ASSERT_NE(a, b);
    248 }
    249 
    250 UTEST(cpp17, ULongLong) {
    251   unsigned long long a = 1;
    252   unsigned long long b = 2;
    253   EXPECT_NE(a, b);
    254   ASSERT_NE(a, b);
    255 }
    256 
    257 #ifdef __clang__
    258 #pragma clang diagnostic pop
    259 #endif
    260 
    261 #if defined(__clang__)
    262 #if __has_warning("-Wunsafe-buffer-usage")
    263 #pragma clang diagnostic push
    264 #pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
    265 #endif
    266 #endif
    267 
    268 UTEST(cpp17, Ptr) {
    269   char foo = 42;
    270   EXPECT_NE(&foo, &foo + 1);
    271 }
    272 
    273 UTEST(cpp17, VoidPtr) {
    274   void *foo = reinterpret_cast<void *>(0);
    275   EXPECT_NE(foo, static_cast<char *>(foo) + 1);
    276 }
    277 
    278 static const int data[4] = {42, 13, 6, -53};
    279 
    280 UTEST(cpp17, Array) { EXPECT_NE(data, data + 1); }
    281 
    282 #if defined(__clang__)
    283 #if __has_warning("-Wunsafe-buffer-usage")
    284 #pragma clang diagnostic pop
    285 #endif
    286 #endif
    287 
    288 UTEST(cpp17, Near) {
    289   float a = 42.0f;
    290   float b = 42.01f;
    291   EXPECT_NEAR(a, b, 0.01f);
    292   ASSERT_NEAR(a, b, 0.01f);
    293 }
    294 
    295 // GCC stdlib has a sanitizer bug in exceptions!
    296 #if defined(__has_feature)
    297 #if __has_feature(memory_sanitizer)
    298 #define MEMORY_SANITIZER
    299 #endif
    300 #endif
    301 
    302 static int foo(int bar) {
    303   if (bar == 1)
    304     throw std::range_error("bad bar");
    305   return bar + 1;
    306 }
    307 
    308 UTEST(cpp17, Exception) {
    309   EXPECT_EXCEPTION(foo(1), std::range_error);
    310   ASSERT_EXCEPTION(foo(1), std::range_error);
    311 }
    312 
    313 #if !defined(MEMORY_SANITIZER)
    314 UTEST(cpp17, ExceptionWithMessage) {
    315   EXPECT_EXCEPTION_WITH_MESSAGE(foo(1), std::range_error, "bad bar");
    316   ASSERT_EXCEPTION_WITH_MESSAGE(foo(1), std::range_error, "bad bar");
    317 }
    318 #endif
    319 
    320 UTEST(cpp17, Todo) { UTEST_SKIP("Not yet implemented!"); }
    321 
    322 enum SomeEnum { SomeEnumFoo, SomeEnumBar };
    323 
    324 UTEST(cpp17, Enum) {
    325   EXPECT_NE(SomeEnumFoo, SomeEnumBar);
    326   ASSERT_EQ(SomeEnumFoo, SomeEnumFoo);
    327 }
    328 
    329 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
    330 
    331 #ifdef __clang__
    332 #pragma clang diagnostic push
    333 #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
    334 #endif
    335 
    336 enum class SomeEnumClass { Foo, Bar };
    337 
    338 UTEST(cpp17, EnumClass) {
    339   EXPECT_NE(SomeEnumClass::Foo, SomeEnumClass::Bar);
    340   ASSERT_EQ(SomeEnumClass::Foo, SomeEnumClass::Foo);
    341 }
    342 
    343 #ifdef __clang__
    344 #pragma clang diagnostic pop
    345 #endif
    346 
    347 UTEST(cpp17, Null) {
    348   EXPECT_EQ(nullptr, nullptr);
    349   ASSERT_EQ(nullptr, nullptr);
    350 }
    351 
    352 #endif