mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-04-22 10:28:02 +00:00
107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
import operator
|
|
|
|
import pytest
|
|
|
|
from ... import expr
|
|
from .. import datum
|
|
|
|
|
|
def test_unary_operations():
|
|
OP_MAP = {"-": operator.neg, "+": operator.pos}
|
|
for op, func in OP_MAP.items():
|
|
z = func(datum.xxx)
|
|
assert repr(z) == "({}datum.xxx)".format(op)
|
|
|
|
|
|
def test_binary_operations():
|
|
OP_MAP = {
|
|
"+": operator.add,
|
|
"-": operator.sub,
|
|
"*": operator.mul,
|
|
"/": operator.truediv,
|
|
"%": operator.mod,
|
|
"===": operator.eq,
|
|
"<": operator.lt,
|
|
"<=": operator.le,
|
|
">": operator.gt,
|
|
">=": operator.ge,
|
|
"!==": operator.ne,
|
|
"&&": operator.and_,
|
|
"||": operator.or_,
|
|
}
|
|
# When these are on the RHS, the opposite is evaluated instead.
|
|
INEQ_REVERSE = {
|
|
">": "<",
|
|
"<": ">",
|
|
"<=": ">=",
|
|
">=": "<=",
|
|
"===": "===",
|
|
"!==": "!==",
|
|
}
|
|
for op, func in OP_MAP.items():
|
|
z1 = func(datum.xxx, 2)
|
|
assert repr(z1) == "(datum.xxx {} 2)".format(op)
|
|
|
|
z2 = func(2, datum.xxx)
|
|
if op in INEQ_REVERSE:
|
|
assert repr(z2) == "(datum.xxx {} 2)".format(INEQ_REVERSE[op])
|
|
else:
|
|
assert repr(z2) == "(2 {} datum.xxx)".format(op)
|
|
|
|
z3 = func(datum.xxx, datum.yyy)
|
|
assert repr(z3) == "(datum.xxx {} datum.yyy)".format(op)
|
|
|
|
|
|
def test_abs():
|
|
z = abs(datum.xxx)
|
|
assert repr(z) == "abs(datum.xxx)"
|
|
|
|
|
|
def test_expr_funcs():
|
|
"""test all functions defined in expr.funcs"""
|
|
name_map = {val: key for key, val in expr.funcs.NAME_MAP.items()}
|
|
for funcname in expr.funcs.__all__:
|
|
func = getattr(expr, funcname)
|
|
z = func(datum.xxx)
|
|
assert repr(z) == "{}(datum.xxx)".format(name_map.get(funcname, funcname))
|
|
|
|
|
|
def test_expr_consts():
|
|
"""Test all constants defined in expr.consts"""
|
|
name_map = {val: key for key, val in expr.consts.NAME_MAP.items()}
|
|
for constname in expr.consts.__all__:
|
|
const = getattr(expr, constname)
|
|
z = const * datum.xxx
|
|
assert repr(z) == "({} * datum.xxx)".format(name_map.get(constname, constname))
|
|
|
|
|
|
def test_json_reprs():
|
|
"""Test JSON representations of special values"""
|
|
assert repr(datum.xxx == None) == "(datum.xxx === null)" # noqa: E711
|
|
assert repr(datum.xxx == False) == "(datum.xxx === false)" # noqa: E712
|
|
assert repr(datum.xxx == True) == "(datum.xxx === true)" # noqa: E712
|
|
|
|
|
|
def test_to_dict():
|
|
ex = datum.xxx * 2 > datum.yyy
|
|
assert ex.to_dict() == repr(ex)
|
|
|
|
|
|
def test_copy():
|
|
ex = datum.xxx * 2 > abs(datum.yyy)
|
|
ex_copy = ex.copy()
|
|
assert ex.to_dict() == ex_copy.to_dict()
|
|
|
|
|
|
def test_datum_getattr():
|
|
x = datum["foo"]
|
|
assert repr(x) == "datum['foo']"
|
|
|
|
with pytest.raises(AttributeError):
|
|
datum.__magic__
|
|
|
|
|
|
def test_expression_getitem():
|
|
x = datum.foo[0]
|
|
assert repr(x) == "datum.foo[0]"
|