ClickHouse/tests/queries/0_stateless/00515_gcd_lcm.sql
Azat Khuzhin 27a5794795 Fix UBsan report in lcm()/gcd()
Changelog:
- Check against INT64_MIN/INT64_MAX
- Check against std::numeric_limits<>::min/max
- Move common code into separate header - GCDLCMImpl.h
- Forbid floats

UBsan report [1].

  [1]: https://clickhouse-test-reports.s3.yandex.net/19466/cb30a02540a0f223df6668c5f88ff84aa666ff54/fuzzer_ubsan/report.html#fail1
2021-01-26 08:33:49 +03:00

42 lines
1.3 KiB
SQL

-- test gcd
select gcd(1280, 1024);
select gcd(11, 121);
select gcd(-256, 64);
select gcd(1, 1);
select gcd(4, 2);
select gcd(15, 49);
select gcd(255, 254);
select gcd(2147483647, 2147483646);
select gcd(4611686011984936962, 2147483647);
select gcd(-2147483648, 1);
select gcd(255, 515);
select gcd(255, 510);
select gcd(255, 512);
-- test lcm
select lcm(1280, 1024);
select lcm(11, 121);
select lcm(-256, 64);
select lcm(1, 1);
select lcm(4, 2);
select lcm(15, 49);
select lcm(255, 254);
select lcm(2147483647, 2147483646);
select lcm(4611686011984936962, 2147483647);
select lcm(-2147483648, 1);
-- test gcd float
select gcd(1280.1, 1024.1); -- { serverError 48 }
select gcd(11.1, 121.1); -- { serverError 48 }
select gcd(-256.1, 64.1); -- { serverError 48 }
select gcd(1.1, 1.1); -- { serverError 48 }
select gcd(4.1, 2.1); -- { serverError 48 }
select gcd(15.1, 49.1); -- { serverError 48 }
select gcd(255.1, 254.1); -- { serverError 48 }
-- test lcm float
select lcm(1280.1, 1024.1); -- { serverError 48 }
select lcm(11.1, 121.1); -- { serverError 48 }
select lcm(-256.1, 64.1); -- { serverError 48 }
select lcm(1.1, 1.1); -- { serverError 48 }
select lcm(4.1, 2.1); -- { serverError 48 }
select lcm(15.1, 49.1); -- { serverError 48 }
select lcm(255.1, 254.1); -- { serverError 48 }