summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/test/upstream/math_logic/logic.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/math_logic/logic.yaml')
-rw-r--r--ext/librethinkdbxx/test/upstream/math_logic/logic.yaml169
1 files changed, 169 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/math_logic/logic.yaml b/ext/librethinkdbxx/test/upstream/math_logic/logic.yaml
new file mode 100644
index 00000000..84dbc574
--- /dev/null
+++ b/ext/librethinkdbxx/test/upstream/math_logic/logic.yaml
@@ -0,0 +1,169 @@
+desc: These tests are aimed at &&, ||, and !
+tests:
+
+ ## basic operator usage
+
+ # Python overloads '&' for 'and'
+ - py:
+ - r.expr(true) & true
+ - true & r.expr(true)
+ - r.and_(true,true)
+ - r.expr(true).and_(true)
+ rb:
+ - r(true) & true
+ - r(true) & r(true)
+ - r.and(true,true)
+ - r(true).and(true)
+ js:
+ - r.and(true,true)
+ - r(true).and(true)
+ ot: true
+ - py:
+ - r.expr(true) & false
+ - r.expr(false) & false
+ - true & r.expr(false)
+ - false & r.expr(false)
+ - r.and_(true,false)
+ - r.and_(false,false)
+ - r.expr(true).and_(false)
+ - r.expr(false).and_(false)
+ rb:
+ - r(true) & false
+ - r(false) & false
+ - r(true) & r(false)
+ - r(false) & r(false)
+ - r.and(true,false)
+ - r.and(false,false)
+ - r(true).and(false)
+ - r(false).and(false)
+ js:
+ - r.and(true,false)
+ - r.and(false,false)
+ - r(true).and(false)
+ - r(false).and(false)
+ ot: false
+
+ # Python overloads '|' for 'or'
+ - py:
+ - r.expr(true) | true
+ - r.expr(true) | false
+ - true | r.expr(true)
+ - true | r.expr(false)
+ - r.or_(true,true)
+ - r.or_(true,false)
+ - r.expr(true).or_(true)
+ - r.expr(true).or_(false)
+ rb:
+ - r(true) | true
+ - r(true) | false
+ - r(true) | r(true)
+ - r(true) | r(false)
+ - r.or(true,true)
+ - r.or(true,false)
+ - r(true).or(true)
+ - r(true).or(false)
+ js:
+ - r.or(true,true)
+ - r.or(true,false)
+ - r(true).or(true)
+ - r(true).or(false)
+ ot: true
+ - py:
+ - r.expr(false) | false
+ - false | r.expr(false)
+ - r.and_(false,false)
+ - r.expr(false).and_(false)
+ rb:
+ - r(false) | false
+ - r(false) | r(false)
+ - r.and(false,false)
+ - r(false).and(false)
+ js:
+ - r.and(false,false)
+ - r(false).and(false)
+ ot: false
+
+ # Python overloads '~' for 'not'
+ - py:
+ - ~r.expr(True)
+ - r.not_(True)
+ cd: r(true).not()
+ ot: false
+ - py:
+ - ~r.expr(False)
+ - r.not_(False)
+ cd: r(false).not()
+ ot: true
+ - py: r.expr(True).not_()
+ cd: r(true).not()
+ ot: false
+ - py: r.expr(False).not_()
+ cd: r(false).not()
+ ot: true
+
+ ## DeMorgan's rules!
+
+ - py:
+ - ~r.and_(True, True) == r.or_(~r.expr(True), ~r.expr(True))
+ - ~r.and_(True, False) == r.or_(~r.expr(True), ~r.expr(False))
+ - ~r.and_(False, False) == r.or_(~r.expr(False), ~r.expr(False))
+ - ~r.and_(False, True) == r.or_(~r.expr(False), ~r.expr(True))
+ cd:
+ - r(true).and(true).not().eq(r(true).not().or(r(true).not()))
+ - r(true).and(false).not().eq(r(true).not().or(r(false).not()))
+ - r(false).and(false).not().eq(r(false).not().or(r(false).not()))
+ - r(false).and(true).not().eq(r(false).not().or(r(true).not()))
+ ot: true
+
+ # Test multiple arguments to 'and' and 'or'
+ - cd: r(true).and(true, true, true, true)
+ py: r.and_(True, True, True, True, True)
+ ot: true
+ - cd: r(true).and(true, true, false, true)
+ py: r.and_(True, True, True, False, True)
+ ot: false
+ - cd: r(true).and(false, true, false, true)
+ py: r.and_(True, False, True, False, True)
+ ot: false
+ - cd: r(false).or(false, false, false, false)
+ py: r.or_(False, False, False, False, False)
+ ot: false
+ - cd: r(false).or(false, false, true, false)
+ py: r.or_(False, False, False, True, False)
+ ot: true
+ - cd: r(false).or(true, false, true, false)
+ py: r.or_(False, True, False, True, False)
+ ot: true
+
+ # Test that precedence errors are detected
+ - js: r.expr(r.expr('a')('b')).default(2)
+ py: r.expr(r.expr('a')['b']).default(2)
+ rb: r(r('a')['b']).default(2)
+ ot: err("ReqlQueryLogicError", "Cannot perform bracket on a non-object non-sequence `\"a\"`.", [])
+ - py: r.expr(r.expr(True) & r.expr(False) == r.expr(False) | r.expr(True))
+ ot: err("ReqlDriverCompileError", "Calling '==' on result of infix bitwise operator:", [])
+ - py: r.expr(r.and_(True, False) == r.or_(False, True))
+ ot: False
+ - rb: r.expr(r.expr(True) & r.expr(False) >= r.expr(False) | r.expr(True))
+ py: r.expr(r.expr(True) & r.expr(False) >= r.expr(False) | r.expr(True))
+ ot: err("ReqlDriverCompileError", "Calling '>=' on result of infix bitwise operator:", [])
+ - cd: r.expr(r.and(True, False) >= r.or(False, True))
+ py: r.expr(r.and_(True, False) >= r.or_(False, True))
+ ot: False
+
+ # Type errors
+ - py: r.expr(1) & True
+ cd: r(1).and(true)
+ ot: true
+
+ - py: r.expr(False) | 'str'
+ cd: r(false).or('str')
+ ot: ("str")
+
+ - py: ~r.expr(1)
+ cd: r(1).not()
+ ot: false
+
+ - py: ~r.expr(null)
+ cd: r(null).not()
+ ot: true