diff options
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/transform/fold.yaml')
-rw-r--r-- | ext/librethinkdbxx/test/upstream/transform/fold.yaml | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/transform/fold.yaml b/ext/librethinkdbxx/test/upstream/transform/fold.yaml new file mode 100644 index 00000000..64ec147d --- /dev/null +++ b/ext/librethinkdbxx/test/upstream/transform/fold.yaml @@ -0,0 +1,49 @@ +desc: Tests for the fold term +table_variable_name: tbl +tests: + + # Set up some data + - py: tbl.insert(r.range(100).map(lambda i: {'id':i, 'a':i%4}).coerce_to("array")) + js: | + tbl.insert(function(){ + var res = [] + for (var i = 0; i < 100; i++) { + res.push({id:i, 'a':i%4}); + } + return res; + }()) + rb: tbl.insert((0..99).map{ |i| { :id => i, :a => i % 4 } }) + ot: {'deleted':0,'replaced':0,'unchanged':0,'errors':0,'skipped':0,'inserted':100} + + # Fold + - py: r.range(0, 10).fold(0, lambda acc, row: acc.add(1)) + js: r.range(0, 10).fold(0, function(acc, row) { return acc.add(1); }) + rb: r.range(0, 10).fold(0, lambda{|acc, row|(acc.add(1))}) + ot: 10 + - py: r.range(0, 10).fold(0, lambda acc, row: acc.add(1), final_emit=lambda acc: acc.mul(2)) + js: r.range(0, 10).fold(0, function(acc, row) { return acc.add(1); }, {"final_emit": function(acc) {return acc.mul(2);}}) + rb: r.range(0, 10).fold(0, lambda{|acc, row|(acc.add(1))}, :final_emit=>lambda{|acc|(acc.mul(2))}) + ot: 20 + - py: r.range(0, 10).fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: [row]).coerce_to("array") + js: r.range(0, 10).fold(0, function(acc, row) { return acc.add(1); }, {"emit": function(old,row,acc) {return [row];}}).coerce_to("array") + rb: r.range(0, 10).fold(0, lambda{|acc, row|(acc.add(1))}, :emit=>lambda{|old,row,acc|([row])}).coerce_to("array") + ot: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + - py: r.range(0, 10).fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: r.branch(acc.mod(3).eq(0),[row],[]),final_emit=lambda acc: [acc]).coerce_to("array") + js: r.range(0, 10).fold(0, function(acc, row) {return acc.add(1);}, {"emit":function(old,row,n) {return r.branch(n.mod(3).eq(0),[row],[])}, "final_emit" : function (acc) {return [acc]}}).coerce_to("array") + rb: r.range(0, 10).fold(0, lambda{|acc,row|(acc.add(1))}, :emit=> lambda{|old,row,acc|(r.branch(acc.mod(3).eq(0),[row],[]))}, :final_emit=> lambda{|acc|([acc])}).coerce_to("array") + ot: [2, 5, 8, 10] + - py: r.range(0, 10).fold([1, 1], lambda acc, row: [acc[1], acc[0].add(acc[1])], emit=lambda old,row,acc: [acc[0]]).coerce_to("array") + ot: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89] + - py: r.range(0, 10).fold(0, lambda acc, row: acc, emit=lambda old,row,acc: acc).type_of() + ot: "STREAM" + - py: tbl.filter("id").fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: r.branch(old.mod(20).eq(0),[row],[])).coerce_to("array") + ot: [{'a': 0, 'id': 20}, {'a': 3, 'id': 15}, {'a': 2, 'id': 46}, {'a': 2, 'id': 78}, {'a': 2, 'id': 90}] + + - py: r.range().fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: [acc]).limit(10) + ot: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + - py: r.range().fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: [acc]).map(lambda doc: 1).reduce(lambda l, r: l+r) + ot: err("ReqlQueryLogicError", "Cannot use an infinite stream with an aggregation function (`reduce`, `count`, etc.) or coerce it to an array.") + + - py: r.range(0, 1000).fold(0, lambda acc, row: acc.add(1), emit=lambda old,row,acc: [acc]).coerce_to("array") + ot: [x for x in range(1, 1001)] |