From 18546308cefd4edd51aaab6fbf5e896130b3532e Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 2 Aug 2018 00:17:02 +0200 Subject: [PATCH 1/2] mem(r)chr is working in miri now --- cargo-miri-test/src/main.rs | 2 +- cargo-miri-test/stdout.ref | 1 + tests/run-pass-fullmir/memchr.rs | 90 ++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tests/run-pass-fullmir/memchr.rs diff --git a/cargo-miri-test/src/main.rs b/cargo-miri-test/src/main.rs index 3fb265f6a7ba..6ad516710e1b 100644 --- a/cargo-miri-test/src/main.rs +++ b/cargo-miri-test/src/main.rs @@ -6,6 +6,6 @@ fn main() { let buf = &[1,2,3,4]; let n = ::read_u32(buf); assert_eq!(n, 0x01020304); - //println!("{:#x}", n); FIXME enable once memrchr works in miri + println!("{:#x}", n); eprintln!("standard error"); } diff --git a/cargo-miri-test/stdout.ref b/cargo-miri-test/stdout.ref index e69de29bb2d1..6710f307cb26 100644 --- a/cargo-miri-test/stdout.ref +++ b/cargo-miri-test/stdout.ref @@ -0,0 +1 @@ +0x01020304 diff --git a/tests/run-pass-fullmir/memchr.rs b/tests/run-pass-fullmir/memchr.rs new file mode 100644 index 000000000000..36eb85dcf7e8 --- /dev/null +++ b/tests/run-pass-fullmir/memchr.rs @@ -0,0 +1,90 @@ +#![feature(slice_internals)] + +extern crate core; +use core::slice::memchr::{memchr, memrchr}; + +// test fallback implementations on all platforms +fn matches_one() { + assert_eq!(Some(0), memchr(b'a', b"a")); +} + +fn matches_begin() { + assert_eq!(Some(0), memchr(b'a', b"aaaa")); +} + +fn matches_end() { + assert_eq!(Some(4), memchr(b'z', b"aaaaz")); +} + +fn matches_nul() { + assert_eq!(Some(4), memchr(b'\x00', b"aaaa\x00")); +} + +fn matches_past_nul() { + assert_eq!(Some(5), memchr(b'z', b"aaaa\x00z")); +} + +fn no_match_empty() { + assert_eq!(None, memchr(b'a', b"")); +} + +fn no_match() { + assert_eq!(None, memchr(b'a', b"xyz")); +} + +fn matches_one_reversed() { + assert_eq!(Some(0), memrchr(b'a', b"a")); +} + +fn matches_begin_reversed() { + assert_eq!(Some(3), memrchr(b'a', b"aaaa")); +} + +fn matches_end_reversed() { + assert_eq!(Some(0), memrchr(b'z', b"zaaaa")); +} + +fn matches_nul_reversed() { + assert_eq!(Some(4), memrchr(b'\x00', b"aaaa\x00")); +} + +fn matches_past_nul_reversed() { + assert_eq!(Some(0), memrchr(b'z', b"z\x00aaaa")); +} + +fn no_match_empty_reversed() { + assert_eq!(None, memrchr(b'a', b"")); +} + +fn no_match_reversed() { + assert_eq!(None, memrchr(b'a', b"xyz")); +} + +fn each_alignment_reversed() { + let mut data = [1u8; 64]; + let needle = 2; + let pos = 40; + data[pos] = needle; + for start in 0..16 { + assert_eq!(Some(pos - start), memrchr(needle, &data[start..])); + } +} + +fn main() { + matches_one(); + matches_begin(); + matches_end(); + matches_nul(); + matches_past_nul(); + no_match_empty(); + no_match(); + + matches_one_reversed(); + matches_begin_reversed(); + matches_end_reversed(); + matches_nul_reversed(); + matches_past_nul_reversed(); + no_match_empty_reversed(); + no_match_reversed(); + each_alignment_reversed(); +} From d844792d761b920fb05aedb6d84e071afe805545 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 2 Aug 2018 10:45:08 +0200 Subject: [PATCH 2/2] fix format string to obtain desired output --- cargo-miri-test/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cargo-miri-test/src/main.rs b/cargo-miri-test/src/main.rs index 6ad516710e1b..4e1501dd57f2 100644 --- a/cargo-miri-test/src/main.rs +++ b/cargo-miri-test/src/main.rs @@ -6,6 +6,6 @@ fn main() { let buf = &[1,2,3,4]; let n = ::read_u32(buf); assert_eq!(n, 0x01020304); - println!("{:#x}", n); + println!("{:#010x}", n); eprintln!("standard error"); }