Lines Matching refs:Optional
35 using ftl::Optional;
38 TEST(Optional, Construct) { in TEST() argument
40 EXPECT_EQ(std::nullopt, Optional<int>()); in TEST()
41 EXPECT_EQ(std::nullopt, Optional<std::string>(std::nullopt)); in TEST()
44 EXPECT_EQ('?', Optional('?')); in TEST()
45 EXPECT_EQ(""s, Optional(std::string())); in TEST()
48 EXPECT_EQ("???"s, Optional<std::string>(std::in_place, 3u, '?')); in TEST()
49 EXPECT_EQ("abc"s, Optional<std::string>(std::in_place, {'a', 'b', 'c'})); in TEST()
53 Optional opt = std::optional("test"s); in TEST()
54 static_assert(std::is_same_v<decltype(opt), Optional<std::string>>); in TEST()
61 TEST(Optional, Transform) { in TEST() argument
63 EXPECT_EQ(std::nullopt, Optional<int>().transform([](int) { return 0; })); in TEST()
66 EXPECT_EQ(0, Optional(0).transform([](int x) { return x; })); in TEST()
67 EXPECT_EQ(100, Optional(99).transform([](int x) { return x + 1; })); in TEST()
68 EXPECT_EQ("0b100"s, Optional(4).transform(std::bind(ftl::to_string<int>, _1, ftl::Radix::kBin))); in TEST()
72 Optional opt = 'x'; in TEST()
84 EXPECT_EQ("xyz"s, Optional("abc"s).transform([&out](std::string&& str) { in TEST()
94 Optional opt = "food"s; in TEST()
100 EXPECT_EQ(14u, Optional(StaticVector{"upside"s, "down"s}) in TEST()
113 Optional<int> parse_int(const std::string& str) { in parse_int()
120 TEST(Optional, AndThen) { in TEST() argument
122 EXPECT_EQ(std::nullopt, Optional<int>().and_then([](int) -> Optional<int> { return 0; })); in TEST()
123 EXPECT_EQ(std::nullopt, Optional<int>().and_then([](int) { return Optional<int>(); })); in TEST()
126 EXPECT_EQ(0, Optional(0).and_then([](int x) { return Optional(x); })); in TEST()
127 EXPECT_EQ(123, Optional("123").and_then(parse_int)); in TEST()
128 EXPECT_EQ(std::nullopt, Optional("abc").and_then(parse_int)); in TEST()
132 Optional opt = 'x'; in TEST()
135 return Optional('z'); in TEST()
144 EXPECT_EQ("xyz"s, Optional("abc"s).and_then([&out](std::string&& str) { in TEST()
146 return Optional("xyz"s); in TEST()
154 EXPECT_EQ(14u, Optional(StaticVector{"-"s, "1"s}) in TEST()
155 .and_then([](StringVector&& v) -> Optional<StringVector> { in TEST()
159 .and_then([](const StringVector& v) -> Optional<std::string> { in TEST()
169 TEST(Optional, OrElse) { in TEST() argument
172 const Optional opt = false; in TEST()
173 EXPECT_EQ(false, opt.or_else([] { return Optional(true); })); in TEST()
174 EXPECT_EQ('x', Optional('x').or_else([] { return std::make_optional('y'); })); in TEST()
179 const Optional<int> opt; in TEST()
180 EXPECT_EQ(123, opt.or_else([]() -> Optional<int> { return 123; })); in TEST()
181 EXPECT_EQ("abc"s, Optional<std::string>().or_else([] { return Optional("abc"s); })); in TEST()
185 EXPECT_EQ(Optional<float>(), Optional<float>().or_else([&empty]() -> Optional<float> { in TEST()
194 EXPECT_EQ(999, Optional(StaticVector{"1"s, "0"s, "0"s}) in TEST()
195 .and_then([](StringVector&& v) -> Optional<StringVector> { in TEST()
200 return Optional(StaticVector{"9"s, "9"s, "9"s}); in TEST()
206 .or_else([] { return Optional(-1); })); in TEST()
209 TEST(Optional, OkOr) { in TEST() argument
213 EXPECT_EQ(CharExp('z'), Optional('z').ok_or(std::errc::broken_pipe)); in TEST()
215 Optional<char>().ok_or(std::errc::broken_pipe)); in TEST()
217 EXPECT_EQ(StringExp("abc"s), Optional("abc"s).ok_or(std::errc::protocol_error)); in TEST()
219 Optional<std::string>().ok_or(std::errc::protocol_error)); in TEST()
225 constexpr Optional<int> kOptional1 = 1;
226 constexpr Optional<int> kAnotherOptional1 = 1;
227 constexpr Optional<int> kOptional2 = 2;
228 constexpr Optional<int> kOptionalEmpty, kAnotherOptionalEmpty;