diff options
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/math_logic/logic.yaml')
-rw-r--r-- | ext/librethinkdbxx/test/upstream/math_logic/logic.yaml | 169 |
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 |