`SELECT bitShiftLeft(toInt256(-2), number)`

`shift left for negative lhsbers is underfined!`

See https://clickhouse-test-reports.s3.yandex.net/14525/44726c37c3003ec8112dbf32efa350bd595163b3/fuzzer/report.html#fail1
inline void writeText(const UInt256 & x, WriteBuffer & buf) { writeText(bigintToString(x), buf); }
inline void writeText(const Int256 & x, WriteBuffer & buf) { writeText(bigintToString(x), buf); }
template <typename T>
String decimalFractional(const T & x, UInt32 scale)
{
    if constexpr (std::is_same_v<T, Int256>)
    {
        static constexpr Int128 max_int128 = (Int128(0x7fffffffffffffffll) << 64) + 0xffffffffffffffffll;
        if (x <= std::numeric_limits<UInt32>::max())
            return decimalFractional(static_cast<UInt32>(x), scale);
        else if (x <= std::numeric_limits<UInt64>::max())
            return decimalFractional(static_cast<UInt64>(x), scale);
        else if (x <= max_int128)
            return decimalFractional(static_cast<Int128>(x), scale);
    }
    else if constexpr (std::is_same_v<T, Int128>)
    {
        if (x <= std::numeric_limits<UInt32>::max())
            return decimalFractional(static_cast<UInt32>(x), scale);
        else if (x <= std::numeric_limits<UInt64>::max())
            return decimalFractional(static_cast<UInt64>(x), scale);
    }
    String str(scale, '0');
    T value = x;
    for (Int32 pos = scale - 1; pos >= 0; --pos, value /= 10)
        str[pos] += static_cast<char>(value % 10);
    return str;
}
template <typename T>
void writeText(Decimal<T> x, UInt32 scale, WriteBuffer & ostr)