See More

#include #include using namespace testing; using namespace stream; using namespace stream::op; #define EXCEPTION_TEST(Operation, Exception) \ [](){ \ bool thrown = false; \ try { Operation; } catch(Exception& e) { thrown = true; } \ return thrown; \ }() #define EXPECT_EXCEPTION(Operation, Exception) \ EXPECT_THAT(EXCEPTION_TEST(Operation, Exception), Eq(true)); TEST(FirstTest, Default) { EXPECT_THAT(MakeStream::counter(0) | first(), Eq(0)); } TEST(FirstTest, EmptyStream) { EXPECT_EXCEPTION(MakeStream::empty() | first(), EmptyStreamException); } TEST(LastTest, Default) { EXPECT_THAT(MakeStream::range(0, 10) | last(), Eq(9)); } TEST(LastTest, EmptyStream) { EXPECT_EXCEPTION(MakeStream::empty() | last(), EmptyStreamException); } TEST(NthTest, Default) { EXPECT_THAT(MakeStream::counter(0) | nth(5), Eq(5)); } TEST(NthTest, EmptyStream) { EXPECT_EXCEPTION(MakeStream::range(0, 3) | nth(5), EmptyStreamException); EXPECT_EXCEPTION(MakeStream::empty() | nth(5), EmptyStreamException); }