RethinkDB native connector work, minor fixes.
This commit is contained in:
303
ext/librethinkdbxx/test/upstream/transform/array.yaml
Normal file
303
ext/librethinkdbxx/test/upstream/transform/array.yaml
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user