Make sure folly::dynamic arrays can be used with folly::gen
authorMarcus Holland-Moritz <mhx@fb.com>
Thu, 13 Mar 2014 00:27:09 +0000 (17:27 -0700)
committerDave Watson <davejwatson@fb.com>
Tue, 18 Mar 2014 17:01:41 +0000 (10:01 -0700)
Summary:
Define a value_type for folly::dynamic to make arrays work with
folly::gen::from.

Test Plan:
- added new unit test
- fbconfig folly/test && fbmake runtests

Reviewed By: tjackson@fb.com

FB internal diff: D1216358

folly/dynamic.h
folly/test/DynamicTest.cpp

index 8a0178520e09f7921779f3961b8f8bdcd30afe56..1494a557047feff2c25a36b8376c9dd781ef9b7a 100644 (file)
@@ -110,6 +110,7 @@ private:
   typedef std::vector<dynamic> Array;
 public:
   typedef Array::const_iterator const_iterator;
+  typedef dynamic value_type;
   struct const_key_iterator;
   struct const_value_iterator;
   struct const_item_iterator;
index 123e5d5c70903ebc6f6eafe61f582323886bf5de..18dcbcf5d205364b63eaff19518c914c2940b925 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "folly/Benchmark.h"
 #include "folly/dynamic.h"
+#include "folly/gen/Base.h"
 #include "folly/json.h"
 
 using folly::dynamic;
@@ -305,6 +306,13 @@ TEST(Dynamic, GetPtr) {
   EXPECT_EQ(dynamic(2), *cobject.get_ptr("two"));
 }
 
+TEST(Dynamic, ArrayGenerator) {
+  // Make sure arrays can be used with folly::gen.
+  using namespace folly::gen;
+  dynamic arr { 1, 2, 3, 4 };
+  EXPECT_EQ(from(arr) | take(3) | member(&dynamic::asInt) | sum, 6);
+}
+
 int main(int argc, char** argv) {
   testing::InitGoogleTest(&argc, argv);
   google::ParseCommandLineFlags(&argc, &argv, true);