sign for a some (randomly generated) 4-element uint64 array does not return the expected return value (an array of 0x0000000000000001), but instead returns an array of 0xffffffffffffffff.
The following test fails:
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>());
To Reproduce
// fails
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>());
// succeeds, wrong return value
x_uint64 = array({uint64_t(0xa11cc311cb6acd70), uint64_t(0x7a375ac3ebb533f3), uint64_t(0x734969adf9d7190c), uint64_t(0xb400515a4f673424)});
expected = array({uint64_t(0xffffffffffffffff), uint64_t(0xffffffffffffffff), uint64_t(0xffffffffffffffff), uint64_t(0xffffffffffffffff)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
// succeeds, the first three elements
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>());
// succeeds, the first two elements
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>());
// succeeds, the first element
x_uint64 = array({uint64_t(0xa11cc311cb6acd70)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
// succeeds, 0xffffffffffffffff
x_uint64 = array({uint64_t(0xffffffffffffffff)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
// succeeds, 0x0000000000000001
x_uint64 = array({uint64_t(0x0000000000000001)});
expected = array({uint64_t(0x0000000000000001)});
CHECK(array_equal(sign(x_uint64), expected).item<bool>());
Expected behavior
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)});
Desktop (please complete the following information):
- OS Version: MacOS 14.4.1 (Intel, x86_64)
- Version master @ 13b2677 (post v0.24.1)
Additional context
Discovered in relation to implementing unary ops for Julia - and checking equivalence of unary ops wrt. Julia implementations: stemann/MLX.jl#14
signfor a some (randomly generated) 4-elementuint64array does not return the expected return value (an array of0x0000000000000001), but instead returns an array of0xffffffffffffffff.The following test fails:
To Reproduce
Expected behavior
Desktop (please complete the following information):
Additional context
Discovered in relation to implementing unary ops for Julia - and checking equivalence of unary ops wrt. Julia implementations: stemann/MLX.jl#14