#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(CountTest, Default) {
EXPECT_THAT(MakeStream::range(0, 10) | count(), Eq(10));
EXPECT_THAT(MakeStream::empty() | count(), Eq(0));
}
TEST(SumTest, NoIdentity) {
EXPECT_THAT(MakeStream::from({3, 7}) | sum(), Eq(10));
EXPECT_EXCEPTION(MakeStream::empty() | sum(), EmptyStreamException);
}
TEST(SumTest, Identity) {
EXPECT_THAT(MakeStream::from({3, 7}) | sum(5), Eq(15));
EXPECT_THAT(MakeStream::empty() | sum(0), Eq(0));
}
TEST(ProductTest, NoIdentity) {
EXPECT_THAT(MakeStream::closed_range(1, 5) | product(), Eq(120));
EXPECT_EXCEPTION(MakeStream::empty() | product(), EmptyStreamException);
}
TEST(ProductTest, Identity) {
EXPECT_THAT(MakeStream::from({3, 7}) | product(0), Eq(0));
EXPECT_THAT(MakeStream::empty() | product(1), Eq(1));
}
TEST(StatisticTest, Min) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | min(), Eq(-2));
EXPECT_EXCEPTION(MakeStream::empty() | min(), EmptyStreamException);
}
TEST(StatisticTest, MinBy) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | min_by([](auto x) { return -x; }), Eq(8));
EXPECT_EXCEPTION(MakeStream::empty() | min_by([](auto x) { return -x; }), EmptyStreamException);
}
TEST(StatisticTest, Max) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | max(), Eq(8));
EXPECT_EXCEPTION(MakeStream::empty() | max(), EmptyStreamException);
}
TEST(StatisticTest, MaxBy) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | max_by([](auto x) { return -x; }), Eq(-2));
EXPECT_EXCEPTION(MakeStream::empty() | max_by([](auto x) { return -x; }), EmptyStreamException);
}
TEST(StatisticTest, MinMax) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | minmax(), Eq(std::make_pair(-2, 8)));
EXPECT_EXCEPTION(MakeStream::empty() | minmax(), EmptyStreamException);
}
TEST(StatisticTest, MinMaxBy) {
EXPECT_THAT(MakeStream::from({3, -2, 8}) | minmax_by([](auto x) { return -x; }), Eq(std::make_pair(8, -2)));
EXPECT_EXCEPTION(MakeStream::empty() | minmax_by([](auto x) { return -x; }), EmptyStreamException);
}