| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- //
- // transform_test.cxx
- // stream-test
- //
- // Created by Sam Jaffe on 4/5/23.
- //
- #include "stream/view/transform.h"
- #include <list>
- #include "stream_helpers.h"
- #include "stream_matchers.h"
- // Workaround for OSX and pointer-to-member-functions
- template class std::basic_string<char>;
- TEST(TransformView, NotRequiredToProvideSizeOrEmpty) {
- Range<std::list<int>, Sentinel> input{0, 1, 2, 3, 4};
- auto range = input | views::transform([](int i) { return i; });
- static_assert(!stream::detail::has_size_v<decltype(range)>);
- static_assert(stream::detail::has_empty_v<decltype(range)>);
- }
- TEST(TransformView, PropagatesSize) {
- Range<std::vector<int>, Sentinel, Sized> input{0, 1, 2, 3, 4};
- auto range = input | views::transform([](int i) { return i; });
- static_assert(stream::detail::has_size_v<decltype(range)>);
- EXPECT_THAT(range.size(), input.size());
- }
- TEST(TransformView, PropagatesEmpty) {
- Range<std::vector<int>, Sentinel, Sized> input{0, 1, 2, 3, 4};
- auto range = input | views::transform([](int i) { return i; });
- static_assert(stream::detail::has_empty_v<decltype(range)>);
- EXPECT_THAT(range.empty(), input.empty());
- }
- TEST(TransformView, ReturnsNewElements) {
- std::vector<int> const input{1, 2, 3, 4, 5};
- EXPECT_THAT(input | views::transform([](int i) { return 2 * i + 1; }),
- RangesEq(std::vector{3, 5, 7, 9, 11}));
- }
- TEST(TransformView, CanReturnReference) {
- std::vector<int> const input{1, 2, 3, 4, 5};
- auto range = input | views::transform([](auto & i) -> auto & { return i; });
- EXPECT_THAT(&*range.begin(), &*input.begin());
- }
- TEST(TransformView, CanUseMemberPtr) {
- struct test {
- int val;
- };
- std::vector<test> input{{1}, {3}, {2}};
- EXPECT_THAT(input | views::transform(&test::val),
- RangesEq(std::vector{1, 3, 2}));
- }
- TEST(TransformView, CanUseMemberFn) {
- std::vector<std::string> input{"hello", "goodbye"};
- EXPECT_THAT(input | views::transform(&std::string::size),
- RangesEq(std::vector{5, 7}));
- }
|