"""
Tests for the vSQL true division ``/``.

To run the tests, :mod:`pytest` is required.
"""


###
### Tests
###

def test_bool_bool1(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_int / True", where="r.identifier == 'none'") is None


def test_bool_bool2(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_bool / True", where="r.identifier == 'bool_false'") == 0


def test_bool_bool3(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_bool / True", where="r.identifier == 'bool_true'") == 1


def test_bool_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_bool / 1", where="r.identifier == 'bool_true'") == 1


def test_bool_number(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_bool / 0.5", where="r.identifier == 'bool_true'") == 2.0


def test_int_bool(vsql_db, vsql_data):
	assert vsql_db.expr("2 / r.v_bool", where="r.identifier == 'bool_true'") == 2


def test_int_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_int / 2", where="r.identifier == 'int'") == 888


def test_int_number(vsql_db, vsql_data):
	assert vsql_db.expr("85 / r.v_number", where="r.identifier == 'number'") == 2.0


def test_number_bool(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_number / True", where="r.identifier == 'number'") == 42.5


def test_number_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_number / 2", where="r.identifier == 'number'") == 21.25


def test_number_number(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_number / 0.5", where="r.identifier == 'number'") == 85.0


def test_datetimedelta_bool(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datetimedelta / True", where="r.identifier == 'datetimedelta'") == vsql_db.type_for_datetimedelta(1, (12 * 60 + 34) * 60 + 56)


def test_datetimedelta_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datetimedelta / 2", where="r.identifier == 'datetimedelta'") == vsql_db.type_for_datetimedelta(0, (86400 + (12 * 60 + 34) * 60 + 56) / 2)


def test_datetimedelta_number(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datetimedelta / 12.5", where="r.identifier == 'datetimedelta'") == vsql_db.type_for_datetimedelta(0, (86400 + (12 * 60 + 34) * 60 + 56) / 12.5)