mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-14 15:01:57 +00:00
170 lines
4.9 KiB
YAML
170 lines
4.9 KiB
YAML
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
|