| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //
- // stream_td.hpp
- // stream
- //
- // Created by Sam Jaffe on 1/28/17.
- //
- #include "xcode_gtest_helper.h"
- #include <map>
- #include <string>
- #include <vector>
- #include "stream/streams.hpp"
- using ::testing::ElementsAre;
- using ::testing::ElementsAreArray;
- using ::testing::Eq;
- namespace views = stream::views;
- namespace ranges = stream::ranges;
- TEST(StreamTest, CanBuildFromSingleElement) {
- int value = 11;
- auto even = [](int i) { return i % 2 == 0; };
- auto s = views::single(value) | views::filter(even);
- EXPECT_THAT(ranges::size(s), 0);
- }
- TEST(StreamTest, CanBuildFromIterators) {
- std::vector<int> input{1, 2, 3, 4, 5};
- std::vector<int> expected{5, 7};
- auto fmap = [](int i) { return 2 * i + 1; };
- auto out = ranges::subrange(input.begin() + 1, input.begin() + 3) |
- views::transform(fmap) | ranges::to_vector();
- EXPECT_THAT(out, Eq(expected));
- }
- TEST(StreamTest, CanDereferenceElements) {
- int val = 5;
- std::vector<int *> input{&val};
- auto data = input | views::deref() | ranges::to_vector();
- EXPECT_THAT(data.front(), Eq(val));
- }
- TEST(StreamTest, CanForEachConsume) {
- int hits = 0;
- std::vector<int> input{1, 2, 3, 4, 5};
- ranges::for_each(views::all(input), [&hits](int) { ++hits; });
- EXPECT_THAT(hits, Eq(5));
- }
- //
- // TEST(StreamTest, CastStreamToParentType) {
- // struct base {
- // char cat[4] = "cat";
- // };
- // struct test : base {
- // test(int v) : val(v) {}
- // int val;
- // };
- // std::vector<test> input{{1}, {3}, {2}};
- //
- // auto addressof_void = [](auto const & p) { return (void *)&p; };
- //
- // auto strm = stream::of(input).cast<base>();
- // auto first = stream::of(input).map(addressof_void).collect();
- // auto second = strm.map(addressof_void).collect();
- //
- // EXPECT_THAT(first, second);
- //}
|