Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/GSL.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Gringauze <annagrin@microsoft.com>2018-08-13 12:22:02 +0300
committerGitHub <noreply@github.com>2018-08-13 12:22:02 +0300
commit831584d94778e360d1616edc8b1562516795a853 (patch)
tree554b773979677c1cab8e777beef59566f82e3071 /tests/notnull_tests.cpp
parentf1a2e91e4e08a24b1712ee4484ef534f502bead5 (diff)
Dev/annagrin/make not null (#711)
* Added c++17 test configurations for clang5.0 and clang6.0 * Added make_not_null helper to create a not_null Introduction of explicit not_null constructor made it cumbersome to create not_nulls in c++14. Adding make_not_null helper. Usage (see tests): int i = 42; auto x = make_not_null(&i); helper(make_not_null(&i)); helper_const(make_not_null(&i)); * Added std::forward to make_not_null, fixed some code analysis warnings * Fix build break in VS2015 Release configuration * Fix build break in VS2015 Release configuration
Diffstat (limited to 'tests/notnull_tests.cpp')
-rw-r--r--tests/notnull_tests.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/notnull_tests.cpp b/tests/notnull_tests.cpp
index e522fb5..673eab8 100644
--- a/tests/notnull_tests.cpp
+++ b/tests/notnull_tests.cpp
@@ -19,6 +19,8 @@
// so people aren't annoyed by them when running the tool.
#pragma warning(disable : 26440 26426) // from catch
+// Fix VS2015 build breaks in Release
+#pragma warning(disable : 4702) // unreachable code
#endif
#include <catch/catch.hpp> // for AssertionHandler, StringRef, CHECK, TEST_...
@@ -32,6 +34,8 @@
#include <string> // for basic_string, operator==, string, operator<<
#include <typeinfo> // for type_info
+
+
namespace gsl {
struct fail_fast;
} // namespace gsl
@@ -416,4 +420,61 @@ TEST_CASE("TestNotNullConstructorTypeDeduction")
}
#endif // #if defined(__cplusplus) && (__cplusplus >= 201703L)
+TEST_CASE("TestMakeNotNull")
+{
+ {
+ int i = 42;
+
+ const auto x = make_not_null(&i);
+ helper(make_not_null(&i));
+ helper_const(make_not_null(&i));
+
+ CHECK(*x == 42);
+ }
+
+ {
+ int i = 42;
+ int* p = &i;
+
+ const auto x = make_not_null(p);
+ helper(make_not_null(p));
+ helper_const(make_not_null(p));
+
+ CHECK(*x == 42);
+ }
+
+ {
+ const auto workaround_macro = []() {
+ int* p1 = nullptr;
+ const auto x = make_not_null(p1);
+ CHECK(*x == 42);
+ };
+ CHECK_THROWS_AS(workaround_macro(), fail_fast);
+ }
+
+ {
+ const auto workaround_macro = []() {
+ const int* p1 = nullptr;
+ const auto x = make_not_null(p1);
+ CHECK(*x == 42);
+ };
+ CHECK_THROWS_AS(workaround_macro(), fail_fast);
+ }
+
+ {
+ int* p = nullptr;
+
+ CHECK_THROWS_AS(helper(make_not_null(p)), fail_fast);
+ CHECK_THROWS_AS(helper_const(make_not_null(p)), fail_fast);
+ }
+
+#ifdef CONFIRM_COMPILATION_ERRORS
+ {
+ CHECK_THROWS_AS(make_not_null(nullptr), fail_fast);
+ CHECK_THROWS_AS(helper(make_not_null(nullptr)), fail_fast);
+ CHECK_THROWS_AS(helper_const(make_not_null(nullptr)), fail_fast);
+ }
+#endif
+}
+
static_assert(std::is_nothrow_move_constructible<not_null<void *>>::value, "not_null must be no-throw move constructible");