2017-11-02 07:05:11 -07:00

50 lines
3.2 KiB
YAML

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)]