-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Description
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels