def test_date_arithmetics(): d1 = api.date('2015-01-02') d2 = api.date('2017-01-01') i1 = api.interval(weeks=3) for expr in [d1 - d2, d2 - d1]: assert isinstance(expr, ir.IntervalScalar) assert isinstance(expr.op(), ops.DateDiff) assert expr.type() == dt.Interval('D', dt.int32) for expr in [d1 - i1, d2 - i1]: assert isinstance(expr, ir.DateScalar) assert isinstance(expr.op(), ops.DateSub) for expr in [d1 + i1, d2 + i1]: assert isinstance(expr, ir.DateScalar) assert isinstance(expr.op(), ops.DateAdd)
def test_invalid_date_arithmetics(): d1 = api.date('2015-01-02') i1 = api.interval(seconds=300) i2 = api.interval(minutes=15) i3 = api.interval(hours=1) for i in [i1, i2, i3]: with pytest.raises(TypeError): d1 - i with pytest.raises(TypeError): d1 + i
], ids=lambda op: op.__name__, ) def test_interval_comparisons(unit, operands, operator, table): a, b = operands(table, unit) expr = operator(a, b) assert isinstance(a, ir.IntervalValue) assert isinstance(b, ir.IntervalValue) assert isinstance(expr, ir.BooleanValue) @pytest.mark.parametrize( 'operands', [ lambda t: (api.date('2016-01-01'), api.date('2016-02-02')), lambda t: (t.j, api.date('2016-01-01')), lambda t: (api.date('2016-01-01'), t.j), lambda t: (t.j, t.i.date()), lambda t: (t.i.date(), t.j), ], ids=[ 'literal-literal', 'column-literal', 'literal-column', 'column-casted', 'casted-column', ], ) @pytest.mark.parametrize( 'interval',
@pytest.mark.parametrize('operator', [ operator.eq, operator.ne, operator.ge, operator.gt, operator.le, operator.lt ], ids=lambda op: op.__name__) def test_interval_comparisons(unit, operands, operator, table): a, b = operands(table, unit) expr = operator(a, b) assert isinstance(a, ir.IntervalValue) assert isinstance(b, ir.IntervalValue) assert isinstance(expr, ir.BooleanValue) @pytest.mark.parametrize('operands', [ lambda t: (api.date('2016-01-01'), api.date('2016-02-02')), lambda t: (t.j, api.date('2016-01-01')), lambda t: (api.date('2016-01-01'), t.j), lambda t: (t.j, t.i.date()), lambda t: (t.i.date(), t.j) ], ids=[ 'literal-literal', 'column-literal', 'literal-column', 'column-casted', 'casted-column' ]) @pytest.mark.parametrize('interval', [ lambda t: api.interval(years=4), lambda t: api.interval(quarters=4), lambda t: api.interval(months=3), lambda t: api.interval(weeks=2), lambda t: api.interval(days=1), lambda t: t.c.to_interval(unit='Y'),