Fix CPU sign for unsigned ints (#2024)

Co-authored-by: Angelos Katharopoulos <a_katharopoulos@apple.com>
This commit is contained in:
Jesper Stemann Andersen
2025-03-31 02:56:59 +02:00
committed by GitHub
parent 28f39e9038
commit 5f5770e3a2
2 changed files with 45 additions and 3 deletions

View File

@@ -1241,6 +1241,47 @@ TEST_CASE("test arithmetic unary ops") {
// bool
x = array({false, true});
CHECK(array_equal(sign(x), x).item<bool>());
// uint64
array x_uint64(
{uint64_t(0xa11cc311cb6acd70),
uint64_t(0x7a375ac3ebb533f3),
uint64_t(0x734969adf9d7190c),
uint64_t(0xb400515a4f673424)});
array expected(
{uint64_t(0x0000000000000001),
uint64_t(0x0000000000000001),
uint64_t(0x0000000000000001),
uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
x_uint64 = array(
{uint64_t(0xa11cc311cb6acd70),
uint64_t(0x7a375ac3ebb533f3),
uint64_t(0x734969adf9d7190c)});
expected = array(
{uint64_t(0x0000000000000001),
uint64_t(0x0000000000000001),
uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
x_uint64 =
array({uint64_t(0xa11cc311cb6acd70), uint64_t(0x7a375ac3ebb533f3)});
expected =
array({uint64_t(0x0000000000000001), uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
x_uint64 = array({uint64_t(0xa11cc311cb6acd70)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
x_uint64 = array({uint64_t(0xffffffffffffffff)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
x_uint64 = array({uint64_t(0x0000000000000001)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
}
constexpr float neginf = -std::numeric_limits<float>::infinity();