The docs for [Integer::gcd()](https://docs.rs/num-integer/0.1.45/src/num_integer/lib.rs.html#459) state "The result is always non-negative", but this is not the case when calculating the gcd of zero and the minimum value of a signed integer type (`i8, i16, ...`). ```rust use num::Integer; fn main() { assert!(i8::MIN.gcd(&0).is_negative()); // returns i8::MIN } ``` The reason for this are the [following lines](https://docs.rs/num-integer/0.1.45/src/num_integer/lib.rs.html#463-465) in the `impl_integer_for_isize` macro, which in the above example result in `.abs()` being called on `i8::MIN`, resulting in a panic in debug mode, and the value `i8::MIN` being returned in release mode. Don't know if this issue can be elegantly fixed, since the actual result does not fit in the signed type, but maybe it should at least be mentioned in the documentation for the `gcd` method.