/*
- * Copyright 2017 Facebook, Inc.
+ * Copyright 2012-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <folly/Optional.h>
#include <folly/Portability.h>
+#include <folly/portability/GMock.h>
#include <folly/portability/GTest.h>
#include <algorithm>
EXPECT_FALSE(x);
}
+TEST(Optional, Emplace) {
+ Optional<std::vector<int>> opt;
+ auto& values1 = opt.emplace(3, 4);
+ EXPECT_THAT(values1, testing::ElementsAre(4, 4, 4));
+ auto& values2 = opt.emplace(2, 5);
+ EXPECT_THAT(values2, testing::ElementsAre(5, 5));
+}
+
+TEST(Optional, EmplaceInitializerList) {
+ Optional<std::vector<int>> opt;
+ auto& values1 = opt.emplace({3, 4, 5});
+ EXPECT_THAT(values1, testing::ElementsAre(3, 4, 5));
+ auto& values2 = opt.emplace({4, 5, 6});
+ EXPECT_THAT(values2, testing::ElementsAre(4, 5, 6));
+}
+
+TEST(Optional, Reset) {
+ Optional<int> opt(3);
+ opt.reset();
+ EXPECT_FALSE(opt);
+}
+
TEST(Optional, String) {
Optional<std::string> maybeString;
EXPECT_FALSE(maybeString);
opt.clear();
// empty->moved
- opt = unique_ptr<int>(new int(6));
+ opt = std::make_unique<int>(6);
EXPECT_EQ(6, **opt);
// full->moved
- opt = unique_ptr<int>(new int(7));
+ opt = std::make_unique<int>(7);
EXPECT_EQ(7, **opt);
// move it out by move construct
EXPECT_EQ("bye", a.value());
swap(a, b);
+ EXPECT_TRUE(a.hasValue());
+ EXPECT_TRUE(b.hasValue());
+ EXPECT_EQ("hello", a.value());
+ EXPECT_EQ("bye", b.value());
}
TEST(Optional, Comparisons) {
EXPECT_TRUE(opt8(4) >= opt64());
}
+TEST(Optional, NoneComparisons) {
+ using opt = Optional<int>;
+ EXPECT_TRUE(opt() == none);
+ EXPECT_TRUE(none == opt());
+ EXPECT_FALSE(opt(1) == none);
+ EXPECT_FALSE(none == opt(1));
+
+ EXPECT_FALSE(opt() != none);
+ EXPECT_FALSE(none != opt());
+ EXPECT_TRUE(opt(1) != none);
+ EXPECT_TRUE(none != opt(1));
+
+ EXPECT_FALSE(opt() < none);
+ EXPECT_FALSE(none < opt());
+ EXPECT_FALSE(opt(1) < none);
+ EXPECT_TRUE(none < opt(1));
+
+ EXPECT_FALSE(opt() > none);
+ EXPECT_FALSE(none > opt());
+ EXPECT_FALSE(none > opt(1));
+ EXPECT_TRUE(opt(1) > none);
+
+ EXPECT_TRUE(opt() <= none);
+ EXPECT_TRUE(none <= opt());
+ EXPECT_FALSE(opt(1) <= none);
+ EXPECT_TRUE(none <= opt(1));
+
+ EXPECT_TRUE(opt() >= none);
+ EXPECT_TRUE(none >= opt());
+ EXPECT_TRUE(opt(1) >= none);
+ EXPECT_FALSE(none >= opt(1));
+}
+
TEST(Optional, Conversions) {
Optional<bool> mbool;
Optional<short> mshort;
std::hash<Optional<int>>()(none);
std::hash<Optional<int>>()(3);
}
-}
+} // namespace folly