Ejemplo n.º 1
0
def test_bool_ops():
    n1 = Name[bool]("n1")
    true = Constant(True)
    false = Constant(False)

    assert (n1 & true).eval({'n1': True}) is True
    assert (n1 & false).eval({'n1': True}) is False
    assert (n1 & false).eval({'n1': False}) is False
    assert (n1 | true).eval({'n1': True}) is True
    assert (n1 | false).eval({'n1': True}) is True
    assert (n1 | false).eval({'n1': False}) is False

    # real constants
    assert (n1 & True).eval({'n1': True}) is True
    assert (n1 & False).eval({'n1': True}) is False
    assert (n1 & False).eval({'n1': False}) is False
    assert (n1 | True).eval({'n1': True}) is True
    assert (n1 | False).eval({'n1': True}) is True
    assert (n1 | False).eval({'n1': False}) is False

    # when working with Expr objects:
    # the binary "op" & refers to the boolean op "and"
    assert str(Constant(1) & 1) == '1 and 1'
    # note: using "and" does NOT work to combine expressions
    # (in this case, it would just return the second value "1")
    assert not isinstance(Constant(1) and 1, Expr)
Ejemplo n.º 2
0
def test_bin_ops():
    one = Constant(1)
    assert (one + 1).eval() == 2
    assert (one - 1).eval() == 0
    assert (one * 4).eval() == 4
    assert (one / 4).eval() == 0.25
    assert (one // 4).eval() == 0
    assert (one % 2).eval() == 1
    assert (one % 1).eval() == 0
    assert (Constant(2)**2).eval() == 4
    assert (one ^ 2).eval() == 3
Ejemplo n.º 3
0
def test_comparison():
    n = Name[int]("n")
    n2 = Name[int]("n2")
    one = Constant(1)

    assert (n == n2).eval({'n': 2, 'n2': 2})
    assert not (n == n2).eval({'n': 2, 'n2': 1})
    assert (n != n2).eval({'n': 2, 'n2': 1})
    assert not (n != n2).eval({'n': 2, 'n2': 2})
    # real constant
    assert (n != 1).eval({'n': 2})
    assert not (n != 2).eval({'n': 2})

    assert (n < one).eval({'n': -1})
    assert not (n < one).eval({'n': 2})
    assert (n <= one).eval({'n': 0})
    assert (n <= one).eval({'n': 1})
    assert not (n <= one).eval({'n': 2})
    # with real constant
    assert (n < 1).eval({'n': -1})
    assert not (n < 1).eval({'n': 2})
    assert (n <= 1).eval({'n': 0})
    assert (n <= 1).eval({'n': 1})
    assert not (n <= 1).eval({'n': 2})

    assert (n > one).eval({'n': 2})
    assert not (n > one).eval({'n': 1})
    assert (n >= one).eval({'n': 2})
    assert (n >= one).eval({'n': 1})
    assert not (n >= one).eval({'n': 0})
    # real constant
    assert (n > 1).eval({'n': 2})
    assert not (n > 1).eval({'n': 1})
    assert (n >= 1).eval({'n': 2})
    assert (n >= 1).eval({'n': 1})
    assert not (n >= 1).eval({'n': 0})

    assert Expr.in_(Constant('a'), Constant('abcd')).eval() is True
    assert Constant('a').in_(Constant('abcd')).eval() is True

    assert Expr.not_in(Constant('a'), Constant('abcd')).eval() is False
    assert Constant('a').not_in(Constant('abcd')).eval() is False
Ejemplo n.º 4
0
def test_unary_ops():
    assert Constant(1).eval() == 1
    assert (+Constant(1)).eval() == 1
    assert (-Constant(1)).eval() == -1
    assert Constant(True).eval() is True
    assert (~Constant(True)).eval() is False
Ejemplo n.º 5
0
def test_constants():
    assert Constant(1).eval() == 1
    assert Constant(3.14).eval() == 3.14

    assert Constant('asdf').eval() == 'asdf'
    assert str(Constant('asdf')) == "'asdf'"
    assert str(Constant(r'asdf')) == "'asdf'"

    assert Constant(b'byte').eval() == b'byte'
    assert str(Constant(b'byte')) == "b'byte'"

    assert Constant(True).eval() is True
    assert Constant(False).eval() is False
    assert Constant(None).eval() is None

    assert repr(Constant(1)) == 'Constant(value=1)'

    # only {None, str, bytes, bool, int, float} allowed
    with pytest.raises(TypeError):
        Constant((1, 2))  # type: ignore