From b5500b9ca0102f1ccaf32f0e77e96d0739aded9b Mon Sep 17 00:00:00 2001 From: pascal Date: Sat, 3 Sep 2016 22:46:54 +0000 Subject: Use the space freed up by sparc and zaurus to import LLVM. ok hackroom@ --- gnu/llvm/unittests/Support/ErrorOrTest.cpp | 100 +++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 gnu/llvm/unittests/Support/ErrorOrTest.cpp (limited to 'gnu/llvm/unittests/Support/ErrorOrTest.cpp') diff --git a/gnu/llvm/unittests/Support/ErrorOrTest.cpp b/gnu/llvm/unittests/Support/ErrorOrTest.cpp new file mode 100644 index 00000000000..73d0e3f2bb7 --- /dev/null +++ b/gnu/llvm/unittests/Support/ErrorOrTest.cpp @@ -0,0 +1,100 @@ +//===- unittests/ErrorOrTest.cpp - ErrorOr.h tests ------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/ErrorOr.h" +#include "llvm/Support/Errc.h" +#include "gtest/gtest.h" +#include + +using namespace llvm; + +namespace { + +ErrorOr t1() {return 1;} +ErrorOr t2() { return errc::invalid_argument; } + +TEST(ErrorOr, SimpleValue) { + ErrorOr a = t1(); + // FIXME: This is probably a bug in gtest. EXPECT_TRUE should expand to + // include the !! to make it friendly to explicit bool operators. + EXPECT_TRUE(!!a); + EXPECT_EQ(1, *a); + + ErrorOr b = a; + EXPECT_EQ(1, *b); + + a = t2(); + EXPECT_FALSE(a); + EXPECT_EQ(a.getError(), errc::invalid_argument); +#ifdef EXPECT_DEBUG_DEATH + EXPECT_DEBUG_DEATH(*a, "Cannot get value when an error exists"); +#endif +} + +ErrorOr > t3() { + return std::unique_ptr(new int(3)); +} + +TEST(ErrorOr, Types) { + int x; + ErrorOr a(x); + *a = 42; + EXPECT_EQ(42, x); + + // Move only types. + EXPECT_EQ(3, **t3()); +} + +struct B {}; +struct D : B {}; + +TEST(ErrorOr, Covariant) { + ErrorOr b(ErrorOr(nullptr)); + b = ErrorOr(nullptr); + + ErrorOr > b1(ErrorOr >(nullptr)); + b1 = ErrorOr >(nullptr); + + ErrorOr> b2(ErrorOr(nullptr)); + ErrorOr b3(nullptr); + ErrorOr> b4(b3); +} + +TEST(ErrorOr, Comparison) { + ErrorOr x(errc::no_such_file_or_directory); + EXPECT_EQ(x, errc::no_such_file_or_directory); +} + +// ErrorOr x(nullptr); +// ErrorOr> y = x; // invalid conversion +static_assert( + !std::is_convertible &, + ErrorOr>>::value, + "do not invoke explicit ctors in implicit conversion from lvalue"); + +// ErrorOr> y = ErrorOr(nullptr); // invalid +// // conversion +static_assert( + !std::is_convertible &&, + ErrorOr>>::value, + "do not invoke explicit ctors in implicit conversion from rvalue"); + +// ErrorOr x(nullptr); +// ErrorOr> y; +// y = x; // invalid conversion +static_assert(!std::is_assignable>, + const ErrorOr &>::value, + "do not invoke explicit ctors in assignment"); + +// ErrorOr> x; +// x = ErrorOr(nullptr); // invalid conversion +static_assert(!std::is_assignable>, + ErrorOr &&>::value, + "do not invoke explicit ctors in assignment"); +} // end anon namespace -- cgit v1.2.3-59-g8ed1b