stream_fluent_test.cxx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. //
  2. // stream_fluent.t.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 1/28/17.
  6. //
  7. #include "xcode_gtest_helper.h"
  8. #include <vector>
  9. #include "stream/fluent.hpp"
  10. using ::testing::ElementsAreArray;
  11. using ::testing::Eq;
  12. TEST(FluentStreamTest, CollectToObjectPreservesElements) {
  13. std::vector<int> input{1, 2, 3, 4, 5};
  14. auto s = stream::of(input);
  15. std::set<int> out{};
  16. EXPECT_THAT(s > out, ElementsAreArray(input));
  17. }
  18. TEST(FluentStreamTest, MapToSelfIsSelfs) {
  19. std::vector<int> input{1, 2, 3, 4, 5};
  20. auto identity = [](int i) { return i; };
  21. auto s = stream::of(input) | identity;
  22. EXPECT_THAT(s.collect(), Eq(input));
  23. }
  24. TEST(FluentStreamTest, MapCanAlterValues) {
  25. std::vector<int> input{1, 2, 3, 4, 5};
  26. std::vector<int> expected{3, 5, 7, 9, 11};
  27. auto fmap = [](int i) { return 2 * i + 1; };
  28. auto s = stream::of(input) | fmap;
  29. EXPECT_THAT(s.collect(), Eq(expected));
  30. }
  31. TEST(FluentStreamTest, CanMapElementToBool) {
  32. std::vector<int> input{1, 2, 3, 4, 5};
  33. std::vector<bool> expected{false, true, false, true, false};
  34. auto even = [](int i) { return i % 2 == 0; };
  35. auto s = stream::of(input) | even;
  36. EXPECT_THAT(s.collect(), Eq(expected));
  37. }
  38. TEST(FluentStreamTest, CanFilterOutElements) {
  39. std::vector<int> input{1, 2, 3, 4, 5};
  40. std::vector<int> expected{2, 4};
  41. auto even = [](int i) { return i % 2 == 0; };
  42. auto s = stream::of(input) % even;
  43. EXPECT_THAT(s.collect(), Eq(expected));
  44. }
  45. TEST(FluentStreamTest, NoOpFilterReturnOriginal) {
  46. std::vector<int> input{1, 2, 3, 4, 5};
  47. auto pass = [](int) { return true; };
  48. auto s = stream::of(input) % pass;
  49. EXPECT_THAT(s.collect(), Eq(input));
  50. }
  51. TEST(FluentStreamTest, AccumulateDefaultsToAdd) {
  52. std::vector<int> input{1, 2, 3, 4, 5};
  53. auto even = [](int i) { return i % 2 == 0; };
  54. auto sum = [](int lhs, int rhs) { return lhs + rhs; };
  55. auto s = stream::of(input) % even;
  56. EXPECT_THAT(s > sum, Eq(6));
  57. }
  58. TEST(FluentStreamTest, FlatmapJoinsIterableOutputs) {
  59. std::vector<int> vv{1, 2, 3, 4, 5};
  60. auto next3 = [](int i) { return std::vector<int>{i, i + 1, i + 2}; };
  61. std::vector<int> expected{1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7};
  62. auto s = stream::of(vv) || next3;
  63. EXPECT_THAT(s.collect(), Eq(expected));
  64. }