Composed, for lightweight operator composition
[folly.git] / folly / experimental / test / GenTest.cpp
index bb85abab86c7b99fb2f43d1ea2e62cb212776f1c..06499877887bf76da7ced16664d70017afb2a33a 100644 (file)
@@ -166,6 +166,19 @@ TEST(Gen, Until) {
   EXPECT_EQ(31, gen | count);
 }
 
+TEST(Gen, Composed) {
+  // Operator, Operator
+  auto valuesOf =
+      filter([](Optional<int>& o) { return o.hasValue(); })
+    | map([](Optional<int>& o) -> int& { return o.value(); });
+  std::vector<Optional<int>> opts {
+    none, 4, none, 6, none
+  };
+  EXPECT_EQ(4 * 4 + 6 * 6, from(opts) | valuesOf | map(square) | sum);
+  // Operator, Sink
+  auto sumOpt = valuesOf | sum;
+  EXPECT_EQ(10, from(opts) | sumOpt);
+}
 
 TEST(Gen, Chain) {
   std::vector<int> nums {2, 3, 5, 7};