test11.c (5319B)
1 /* 2 This is free and unencumbered software released into the public domain. 3 4 Anyone is free to copy, modify, publish, use, compile, sell, or 5 distribute this software, either in source code form or as a compiled 6 binary, for any purpose, commercial or non-commercial, and by any 7 means. 8 9 In jurisdictions that recognize copyright laws, the author or authors 10 of this software dedicate any and all copyright interest in the 11 software to the public domain. We make this dedication for the benefit 12 of the public at large and to the detriment of our heirs and 13 successors. We intend this dedication to be an overt act of 14 relinquishment in perpetuity of all present and future rights to this 15 software under copyright law. 16 17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 21 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 OTHER DEALINGS IN THE SOFTWARE. 24 25 For more information, please refer to <http://unlicense.org/> 26 */ 27 28 #include "utest.h" 29 30 #ifdef _MSC_VER 31 /* disable 'conditional expression is constant' - our examples below use this! 32 */ 33 #pragma warning(disable : 4127) 34 #endif 35 36 UTEST(c11, ASSERT_TRUE) { ASSERT_TRUE(1); } 37 38 UTEST(c11, ASSERT_FALSE) { ASSERT_FALSE(0); } 39 40 UTEST(c11, ASSERT_EQ) { ASSERT_EQ(1, 1); } 41 42 UTEST(c11, ASSERT_NE) { ASSERT_NE(1, 2); } 43 44 UTEST(c11, ASSERT_LT) { ASSERT_LT(1, 2); } 45 46 UTEST(c11, ASSERT_LE) { 47 ASSERT_LE(1, 1); 48 ASSERT_LE(1, 2); 49 } 50 51 UTEST(c11, ASSERT_GT) { ASSERT_GT(2, 1); } 52 53 UTEST(c11, ASSERT_GE) { 54 ASSERT_GE(1, 1); 55 ASSERT_GE(2, 1); 56 } 57 58 UTEST(c11, ASSERT_STREQ) { ASSERT_STREQ("foo", "foo"); } 59 60 UTEST(c11, ASSERT_STRNE) { ASSERT_STRNE("foo", "bar"); } 61 62 UTEST(c11, EXPECT_TRUE) { EXPECT_TRUE(1); } 63 64 UTEST(c11, EXPECT_FALSE) { EXPECT_FALSE(0); } 65 66 UTEST(c11, EXPECT_EQ) { EXPECT_EQ(1, 1); } 67 68 UTEST(c11, EXPECT_NE) { EXPECT_NE(1, 2); } 69 70 UTEST(c11, EXPECT_LT) { EXPECT_LT(1, 2); } 71 72 UTEST(c11, EXPECT_LE) { 73 EXPECT_LE(1, 1); 74 EXPECT_LE(1, 2); 75 } 76 77 UTEST(c11, EXPECT_GT) { EXPECT_GT(2, 1); } 78 79 UTEST(c11, EXPECT_GE) { 80 EXPECT_GE(1, 1); 81 EXPECT_GE(2, 1); 82 } 83 84 UTEST(c11, EXPECT_STREQ) { EXPECT_STREQ("foo", "foo"); } 85 86 UTEST(c11, EXPECT_STRNE) { EXPECT_STRNE("foo", "bar"); } 87 88 UTEST(c11, no_double_eval) { 89 int i = 0; 90 ASSERT_EQ(i++, 0); 91 ASSERT_EQ(i, 1); 92 } 93 94 struct MyTestF { 95 int foo; 96 }; 97 98 UTEST_F_SETUP(MyTestF) { 99 ASSERT_EQ(0, utest_fixture->foo); 100 utest_fixture->foo = 42; 101 } 102 103 UTEST_F_TEARDOWN(MyTestF) { ASSERT_EQ(13, utest_fixture->foo); } 104 105 UTEST_F(MyTestF, c11) { 106 ASSERT_EQ(42, utest_fixture->foo); 107 utest_fixture->foo = 13; 108 } 109 110 UTEST_F(MyTestF, c11_2) { 111 ASSERT_EQ(42, utest_fixture->foo); 112 utest_fixture->foo = 13; 113 } 114 115 struct MyTestI { 116 size_t foo; 117 size_t bar; 118 }; 119 120 UTEST_I_SETUP(MyTestI) { 121 ASSERT_EQ(0u, utest_fixture->foo); 122 ASSERT_EQ(0u, utest_fixture->bar); 123 utest_fixture->foo = 42; 124 utest_fixture->bar = utest_index; 125 } 126 127 UTEST_I_TEARDOWN(MyTestI) { 128 ASSERT_EQ(13u, utest_fixture->foo); 129 ASSERT_EQ(utest_index, utest_fixture->bar); 130 } 131 132 UTEST_I(MyTestI, c11, 2) { 133 ASSERT_GT(2u, utest_fixture->bar); 134 utest_fixture->foo = 13; 135 } 136 137 UTEST_I(MyTestI, c11_2, 128) { 138 ASSERT_GT(128u, utest_fixture->bar); 139 utest_fixture->foo = 13; 140 } 141 142 UTEST(c11, Float) { 143 float a = 1; 144 float b = 2; 145 EXPECT_NE(a, b); 146 ASSERT_NE(a, b); 147 } 148 149 UTEST(c11, Double) { 150 double a = 1; 151 double b = 2; 152 EXPECT_NE(a, b); 153 ASSERT_NE(a, b); 154 } 155 156 UTEST(c11, LongDouble) { 157 long double a = 1; 158 long double b = 2; 159 EXPECT_NE(a, b); 160 ASSERT_NE(a, b); 161 } 162 163 UTEST(c11, Char) { 164 char a = 1; 165 char b = 2; 166 EXPECT_NE(a, b); 167 ASSERT_NE(a, b); 168 } 169 170 UTEST(c11, SignedChar) { 171 signed char a = 1; 172 signed char b = 2; 173 EXPECT_NE(a, b); 174 ASSERT_NE(a, b); 175 } 176 177 UTEST(c11, UChar) { 178 unsigned char a = 1; 179 unsigned char b = 2; 180 EXPECT_NE(a, b); 181 ASSERT_NE(a, b); 182 } 183 184 UTEST(c11, Short) { 185 short a = 1; 186 short b = 2; 187 EXPECT_NE(a, b); 188 ASSERT_NE(a, b); 189 } 190 191 UTEST(c11, UShort) { 192 unsigned short a = 1; 193 unsigned short b = 2; 194 EXPECT_NE(a, b); 195 ASSERT_NE(a, b); 196 } 197 198 UTEST(c11, Int) { 199 int a = 1; 200 int b = 2; 201 EXPECT_NE(a, b); 202 ASSERT_NE(a, b); 203 } 204 205 UTEST(c11, UInt) { 206 unsigned int a = 1; 207 unsigned int b = 2; 208 EXPECT_NE(a, b); 209 ASSERT_NE(a, b); 210 } 211 212 UTEST(c11, Long) { 213 long a = 1; 214 long b = 2; 215 EXPECT_NE(a, b); 216 ASSERT_NE(a, b); 217 } 218 219 UTEST(c11, ULong) { 220 unsigned long a = 1; 221 unsigned long b = 2; 222 EXPECT_NE(a, b); 223 ASSERT_NE(a, b); 224 } 225 226 #if defined(__clang__) 227 #if __has_warning("-Wunsafe-buffer-usage") 228 #pragma clang diagnostic push 229 #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" 230 #endif 231 #endif 232 233 UTEST(c11, Ptr) { 234 char foo = 42; 235 EXPECT_NE(&foo, &foo + 1); 236 } 237 238 UTEST(c11, VoidPtr) { 239 void *foo = 0; 240 EXPECT_NE(foo, (char *)foo + 1); 241 } 242 243 static const int data[4] = {42, 13, 6, -53}; 244 245 UTEST(c11, Array) { EXPECT_NE(data, data + 1); } 246 247 #if defined(__clang__) 248 #if __has_warning("-Wunsafe-buffer-usage") 249 #pragma clang diagnostic pop 250 #endif 251 #endif 252 253 UTEST(c11, Near) { 254 float a = 42.0f; 255 float b = 42.01f; 256 EXPECT_NEAR(a, b, 0.01f); 257 ASSERT_NEAR(a, b, 0.01f); 258 } 259 260 UTEST(c11, Todo) { UTEST_SKIP("Not yet implemented!"); }