"""
Tests for the vSQL floor 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


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


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


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


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


def test_datedelta_bool(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datedelta // True", where="r.identifier == 'datedelta'") == vsql_db.type_for_datedelta(12)


def test_datedelta_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datedelta // 5", where="r.identifier == 'datedelta'") == vsql_db.type_for_datedelta(2)


def test_monthdelta_bool(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_monthdelta // True", where="r.identifier == 'monthdelta'") == vsql_db.type_for_monthdelta(3)


def test_monthdelta_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_monthdelta // 2", where="r.identifier == 'monthdelta'") == vsql_db.type_for_monthdelta(1)


def test_datetimedelta_bool(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datetimedelta // True", where="r.identifier == 'datetimedelta'") == vsql_db.type_for_datedelta(1)


def test_datetimedelta_int(vsql_db, vsql_data):
	assert vsql_db.expr("r.v_datetimedelta // 2", where="r.identifier == 'datetimedelta'") == vsql_db.type_for_datedelta(0)


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_datedelta(0)