SELECT
    sum(ASD) AS asd,
    intDiv(toInt64(asd), abs(toInt64(asd))) AS int_div_with_abs,
    intDiv(toInt64(asd), toInt64(asd)) AS int_div_without_abs
FROM
(
    SELECT ASD
    FROM
    (
        SELECT [-1000, -1000] AS asds
    )
    ARRAY JOIN asds AS ASD
);

SELECT  intDivOrZero( CAST(-1000, 'Int64')   , CAST(1000, 'UInt64') );
SELECT  intDivOrZero( CAST(-1000, 'Int64')   , CAST(1000, 'Int64') );

SELECT intDiv(-1, number) FROM numbers(1, 10);
SELECT intDivOrZero(-1, number) FROM numbers(1, 10);
SELECT intDiv(toInt32(number), -1) FROM numbers(1, 10);
SELECT intDivOrZero(toInt32(number), -1) FROM numbers(1, 10);
SELECT intDiv(toInt64(number), -1) FROM numbers(1, 10);
SELECT intDivOrZero(toInt64(number), -1) FROM numbers(1, 10);
SELECT intDiv(number, -number) FROM numbers(1, 10);
SELECT intDivOrZero(number, -number) FROM numbers(1, 10);

SELECT -1 DIV number FROM numbers(1, 10);
SELECT toInt32(number) DIV -1 FROM numbers(1, 10);
SELECT toInt64(number) DIV -1 FROM numbers(1, 10);
SELECT number DIV -number FROM numbers(1, 10);
SELECT -1 DIV 0;  -- { serverError ILLEGAL_DIVISION }
