From 220a8680ca79e102b516d21145c1b6364f43cc3a Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 29 Aug 2017 16:55:32 +0200 Subject: [PATCH] Include the minus sign in the same buffer, to only make a single write_all call. --- src/lib.rs | 11 ++++++----- tests/test.rs | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0e240c1..86f8102 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,7 +37,6 @@ macro_rules! impl_Integer { let mut n = if is_nonnegative { self as $conv_fn } else { - try!(wr.write_all(b"-")); // convert the negative num to positive by summing 1 to it's 2 complement (!(self as $conv_fn)).wrapping_add(1) }; @@ -81,13 +80,15 @@ macro_rules! impl_Integer { curr -= 2; ptr::copy_nonoverlapping(lut_ptr.offset(d1), buf_ptr.offset(curr), 2); } + + if !is_nonnegative { + curr -= 1; + *buf_ptr.offset(curr) = b'-'; + } } - let mut len = buf.len() - curr as usize; + let len = buf.len() - curr as usize; try!(wr.write_all(unsafe { slice::from_raw_parts(buf_ptr.offset(curr), len) })); - if !is_nonnegative { - len += 1; - } Ok(len) } })*); diff --git a/tests/test.rs b/tests/test.rs index 7615c19..0a33f80 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -19,6 +19,7 @@ test!( test_0u64(0u64, "0"), test_HALFu64(::max_value() as u64, "4294967295"), test_MAXu64(::max_value(), "18446744073709551615"), + test_MINi64(::min_value(), "-9223372036854775808"), test_0i16(0i16, "0"), test_MINi16(::min_value(), "-32768"),