diff options
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/transform/array.yaml')
-rw-r--r-- | ext/librethinkdbxx/test/upstream/transform/array.yaml | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/transform/array.yaml b/ext/librethinkdbxx/test/upstream/transform/array.yaml new file mode 100644 index 00000000..0f95b360 --- /dev/null +++ b/ext/librethinkdbxx/test/upstream/transform/array.yaml @@ -0,0 +1,303 @@ +desc: Tests manipulation operations on arrays +tests: + + # Define a sequence to work with + - def: arr = r.expr([1, 2, 3]) + - def: dupe_arr = r.expr([1, 1, 2, 3]) + - def: objArr = r.expr([{'a':1, 'b':'a'}, {'a':2, 'b':'b'}, {'a':3, 'b':'c'}]) + - def: nestedObjArr = r.expr([{'a':1, 'b':{'c':1}}, {'a':2, 'b':{'c':2}}, {'a':3, 'b':{'c':3}}]) + + ## Append + + - cd: arr.append(4) + ot: [1,2,3,4] + - cd: arr.append('a') + ot: [1,2,3,'a'] + + ## Prepend + + - cd: arr.prepend(0) + ot: [0,1,2,3] + - cd: arr.prepend('a') + ot: ['a',1,2,3] + + ## Difference + + - cd: arr.difference([1,2,2]) + ot: [3] + - cd: arr.difference([]) + ot: [1,2,3] + - cd: arr.difference(["foo", "bar"]) + ot: [1,2,3] + + ## Set operations + - cd: dupe_arr.set_insert(1) + ot: [1,2,3] + - cd: dupe_arr.set_insert(4) + ot: [1,2,3,4] + + - cd: dupe_arr.set_union([3,4,5,5]) + ot: [1,2,3,4,5] + - cd: dupe_arr.set_union([5,6]) + ot: [1,2,3,5,6] + + - cd: dupe_arr.set_intersection([1,1,1,2,2]) + ot: [1,2] + - cd: dupe_arr.set_intersection(["foo"]) + ot: [] + + - cd: dupe_arr.set_difference([1,1,1,10]) + ot: [2,3] + - cd: dupe_arr.set_difference([2]) + ot: [1,3] + + ## Slice + + # Python uses the slice syntax + - py: + - arr[1:3] + - arr.slice(1, 3) + - arr.slice(1, 2, right_bound='closed') + js: + - arr.slice(1,3) + - arr.slice(1, 2, {right_bound:'closed'}) + rb: + - arr[(1..2)] + - arr[(1...3)] + - arr.slice(1, 2, :right_bound => 'closed') + ot: [2, 3] + + # One ended slices + - py: + - arr[:2] + - arr.slice(0,2) + js: arr.slice(0,2) + rb: + - arr[(0..1)] + - arr[(0...2)] + - arr.slice(0,2) + ot: [1,2] + - py: + - arr[1:] + - arr.slice(1) + js: arr.slice(1) + rb: arr.slice(1) + ot: [2,3] + + # Negative indicies + # Python 2.x doesn't handle negative indicies properly + - cd: arr.slice(-2, -1) + rb: arr[(-2...-1)] + ot: [2] + + ## Skip + + - cd: arr.skip(1) + ot: [2,3] + - cd: arr.skip(2) + ot: [3] + - cd: arr.skip(12) + ot: [] + + ## Limit + + - cd: arr.limit(2) + ot: [1,2] + - cd: arr.limit(0) + ot: [] + - cd: arr.limit(12) + ot: [1,2,3] + + ## Pluck + + - cd: objArr.pluck('a', 'b') + ot: [{'a':1, 'b':'a'}, {'a':2, 'b':'b'}, {'a':3, 'b':'c'}] + - cd: objArr.pluck('a') + ot: [{'a':1}, {'a':2}, {'a':3}] + - cd: objArr.pluck() + ot: [{}, {}, {}] + + ## With_Fields + - def: wftst = objArr.union(objArr.pluck('a')).union(objArr.pluck('b')).union([{'a':null}]) + - cd: wftst.with_fields('a') + ot: ([{'a':1},{'a':2},{'a':3},{'a':1},{'a':2},{'a':3}]) + - cd: wftst.with_fields('b') + ot: ([{'b':'a'},{'b':'b'},{'b':'c'},{'b':'a'},{'b':'b'},{'b':'c'}]) + - cd: wftst.with_fields('a', 'b') + ot: ([{'a':1,'b':'a'},{'a':2,'b':'b'},{'a':3,'b':'c'}]) + - cd: wftst.with_fields() + ot: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}] + + - def: wftst2 = nestedObjArr.union(objArr.pluck({'b':'missing'})).union(nestedObjArr.pluck({'b':'c'})) + - cd: wftst2.with_fields({'b':'c'}) + ot: ([{'b':{'c':1}}, {'b':{'c':2}}, {'b':{'c':3}}, {'b':{'c':1}}, {'b':{'c':2}}, {'b':{'c':3}}]) + + - cd: wftst.with_fields(1) + ot: err("ReqlQueryLogicError", "Invalid path argument `1`.", []) + - cd: r.expr(1).with_fields() + ot: err("ReqlQueryLogicError", "Cannot perform has_fields on a non-object non-sequence `1`.", []) + + ## Without + + - cd: objArr.without('a', 'b') + ot: [{}, {}, {}] + - cd: objArr.without('a') + ot: [{'b':'a'}, {'b':'b'}, {'b':'c'}] + - cd: objArr.without() + ot: [{'a':1, 'b':'a'}, {'a':2, 'b':'b'}, {'a':3, 'b':'c'}] + + ## Map + + - py: arr.map(lambda v: v + 1) + js: arr.map(function(v) { return v.add(1); }) + rb: arr.map{ |v| v + 1 } + ot: [2,3,4] + #- py: objArr.map(r.row['b']) + # js: objArr.map(r.row('b')) + # ot: ['a', 'b', 'c'] + + ## Reduce + + - py: arr.reduce(lambda a, b: a + b) + js: arr.reduce(function(a,b) { return a.add(b); }) + rb: arr.reduce{ |a, b| a + b } + ot: 6 + + - py: arr.reduce(lambda a, b:a + b) + js: arr.reduce(function(a,b) { return a.add(b); }) + rb: arr.reduce(){ |a, b| a + b } + ot: 6 + + - py: arr.union(arr).reduce(lambda a, b: a + b) + js: arr.union(arr).reduce(function(a,b) { return a.add(b); }) + rb: arr.union(arr).reduce{ |a, b| a + b } + ot: 12 + + - py: arr.union(arr).reduce(lambda a, b:a + b) + js: arr.union(arr).reduce(function(a,b) { return a.add(b); }) + rb: arr.union(arr).reduce(){ |a, b| a + b } + ot: 12 + + ## Filter + + - py: objArr.filter(lambda row: row['b'] == 'b') + js: objArr.filter(function(row) { return row('b').eq('b'); }) + rb: objArr.filter{ |row| row[:b].eq 'b' } + ot: [{'a':2, 'b':'b'}] + + ## ConcatMap + + - py: arr.concat_map(lambda v: [1,2]) + js: arr.concatMap(function(v) { return [1,2]; }) + rb: arr.concat_map{ |v| [1,2] } + ot: [1,2,1,2,1,2] + - py: arr.concat_map(lambda v: [{'v':v}, {'v2':v + 1}]) + js: arr.concatMap(function(v) { return [{'v':v}, {'v2':v.add(1)}]; }) + rb: arr.concat_map{ |v| [{:v => v}, {:v2 => v + 1}] } + ot: [{'v':1}, {'v2':2}, {'v':2}, {'v2':3}, {'v':3}, {'v2':4}] + + ## OrderBy + + - cd: objArr.order_by('b') + rb: objArr.order_by :b + ot: [{'a':1, 'b':'a'}, {'a':2, 'b':'b'}, {'a':3, 'b':'c'}] + + - cd: objArr.order_by(r.desc('b')) + ot: [{'a':3, 'b':'c'}, {'a':2, 'b':'b'}, {'a':1, 'b':'a'}] + + - cd: r.expr([{'-a':1},{'-a':2}]).order_by('-a') + rb: r.expr([{ '-a' => 1}, {'-a' => 2}]).order_by('-a') + ot: + cd: [{'-a':1},{'-a':2}] + rb: [{'-a'=>1},{'-a'=>2}] + + ## Distinct + + - cd: r.expr([1,1,2,2,2,3,4]).distinct() + ot: [1,2,3,4] + + ## Count + + - cd: arr.count() + ot: 3 + cd: objArr.count() + ot: 3 + + ## Union + + - cd: arr.union(objArr) + ot: [1, 2, 3, {'a':1, 'b':'a'}, {'a':2, 'b':'b'}, {'a':3, 'b':'c'}] + + ## Nth + + - cd: + - arr[1] + - arr.nth(1) + js: arr.nth(1) + ot: 2 + - py: arr[0] + rb: arr[0] + js: arr.nth(0) + ot: 1 + + ## Is Empty + + - cd: r.expr([]).is_empty() + ot: true + - cd: arr.is_empty() + ot: false + + ## Contains + - cd: arr.contains(2) + ot: true + - cd: arr.contains(2, 3) + ot: true + - cd: arr.contains(4) + ot: false + - cd: arr.contains(2, 4) + ot: false + - cd: arr.contains(2, 2) + ot: false + - cd: arr.union(arr).contains(2, 2) + ot: true + + - cd: arr.contains{|x| x.eq(2)} + py: arr.contains(lambda x:x == 2) + js: arr.contains(function(x){return x.eq(2);}) + ot: true + - cd: arr.contains(lambda {|x| x.eq(2)}, lambda {|x| x.eq(3)}) + py: arr.contains(lambda x:x == 2, lambda x:x==3) + js: arr.contains(function(x){return x.eq(2);}, function(x){return x.eq(3);}) + ot: true + - cd: arr.contains{|x| x.eq(4)} + py: arr.contains(lambda x:x == 4) + js: arr.contains(function(x){return x.eq(4);}) + ot: false + - cd: arr.contains(lambda {|x| x.eq(2)}, lambda {|x| x.eq(4)}) + py: arr.contains(lambda x:x == 2, lambda x:x==4) + js: arr.contains(function(x){return x.eq(2);}, function(x){return x.eq(4);}) + ot: false + - cd: arr.contains(lambda {|x| x.eq(2)}, lambda {|x| x.eq(2)}) + py: arr.contains(lambda x:x == 2, lambda x:x==2) + js: arr.contains(function(x){return x.eq(2);}, function(x){return x.eq(2);}) + ot: false + - cd: arr.union(arr).contains(lambda {|x| x.eq(2)}, lambda {|x| x.eq(2)}) + py: arr.union(arr).contains(lambda x:x == 2, lambda x:x==2) + js: arr.union(arr).contains(function(x){return x.eq(2);}, function(x){return x.eq(2);}) + ot: true + + ## Get Field + - cd: r.expr([{'a':1},{'b':2},{'a':3,'c':4}])['a'] + js: r.expr([{'a':1},{'b':2},{'a':3,'c':4}])('a') + ot: [1, 3] + - cd: r.expr([{'a':1},'a',{'b':2},{'a':3,'c':4}])['a'] + js: r.expr([{'a':1},'a',{'b':2},{'a':3,'c':4}])('a') + ot: err("ReqlQueryLogicError", "Cannot perform bracket on a non-object non-sequence `\"a\"`.", []) + + ## Grouped Map Reduce + + ## Group by + + ## Inner Join + + ## Outer Join |