| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //
- // optional_stream.t.h
- // optional.stream
- //
- // Created by Sam Jaffe on 1/29/17.
- //
- #include <gmock/gmock.h>
- #include <gtest/gtest.h>
- #include "stream/optional_stream.hpp"
- using ::testing::Eq;
- MATCHER(IsNone, "") {
- return !arg.has_value();
- }
- MATCHER(NotNone, "") {
- return arg.has_value();
- }
- MATCHER_P(Optional, value, "") {
- return arg.has_value() && *arg == value;
- }
- TEST(OptionalStreamTest, processes_real) {
- auto strm = stream::optional::make_stream(5);
- auto plus2 = [](int i) { return i+2; };
- std::optional<int> out = strm.map(plus2);
-
- EXPECT_THAT(out, NotNone());
- EXPECT_THAT(*out, Eq(7));
- }
- TEST(OptionalStreamTest, NoOpWhenUsedOnNullOpts) {
- auto strm = stream::optional::make_stream<int>();
- auto fail = [](int i) { throw std::runtime_error{"nullopt"}; return i; };
- std::optional<int> out;
-
- EXPECT_NO_THROW(out = strm.map(fail));
- EXPECT_THAT(out, IsNone());
- }
- TEST(OptionalStreamTest, FlatmapFunctionCanProduceNullOpt) {
- auto strm = stream::optional::make_stream(5);
- auto discard_odd = [](int i) {
- return i%2==0? std::optional<int>(i) : std::nullopt;
- };
- std::optional<int> out;
-
- EXPECT_NO_THROW(out = strm.flatmap(discard_odd));
- EXPECT_THAT(out, IsNone());
- }
- TEST(OptionalStreamTest, FlatmapFunctionCanProduceRealValues) {
- auto strm = stream::optional::make_stream(6);
- auto discard_odd = [](int i) {
- return i%2==0? std::optional<int>(i) : std::nullopt;
- };
- std::optional<int> out;
-
- EXPECT_NO_THROW(out = strm.flatmap(discard_odd));
- EXPECT_THAT(out, NotNone());
- EXPECT_THAT(out, Optional(6));
- }
|