From 403638e8d7ca2b0cd24034976c7a164bbd15b4dd Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 13 Nov 2017 11:26:47 -0800 Subject: [PATCH] Fix prop_ext_[u]int_*::native_endian on BE targets The similar `big_endian` tests were using an offset to read from the end of the written `u64`, but the `native_endian` tests were reading directly, just like the `little_endian` tests. That's of course only correct when the target actually is little endian. That `big_endian` offset is now sliced directly, instead of cloning into another vector, and then this logic is also used in the `native_endian` test, depending on the current `#[cfg(target_endian)]`. Fixes #102. --- src/lib.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b60fe7c..35c0069 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2865,9 +2865,8 @@ mod stdtests { fn prop(n: $ty_int) -> bool { let mut wtr = vec![]; wtr.$write::(n.clone()).unwrap(); - let mut rdr = Vec::new(); - rdr.extend(wtr[wtr.len()-$bytes..].iter().map(|&x| x)); - let mut rdr = Cursor::new(rdr); + let offset = wtr.len() - $bytes; + let mut rdr = Cursor::new(&mut wtr[offset..]); n == rdr.$read::($bytes).unwrap() } qc_sized(prop as fn($ty_int) -> bool, $max); @@ -2889,7 +2888,12 @@ mod stdtests { fn prop(n: $ty_int) -> bool { let mut wtr = vec![]; wtr.$write::(n.clone()).unwrap(); - let mut rdr = Cursor::new(wtr); + let offset = if cfg!(target_endian = "big") { + wtr.len() - $bytes + } else { + 0 + }; + let mut rdr = Cursor::new(&mut wtr[offset..]); n == rdr.$read::($bytes).unwrap() } qc_sized(prop as fn($ty_int) -> bool, $max); -- 2.15.0