From 6a9170db63f70be95adc2c80c342ed713a4546e7 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sun, 17 Mar 2024 10:41:03 -0700 Subject: armv8 no-panic test is now multithreaded --- tests/test.rs | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/test.rs b/tests/test.rs index 7311616..5007464 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -6,6 +6,7 @@ mod armv7; mod armv8; use yaxpeax_arch::{Arch, Decoder, U8Reader}; +use std::fmt::Write; #[test] #[ignore] @@ -36,17 +37,42 @@ fn test_armv7_thumb_does_not_panic() { } } } + #[test] #[ignore] fn test_armv8_does_not_panic() { - let armv8 = ::Decoder::default(); + fn test_range(start: u64, end: u64) { + let armv8 = ::Decoder::default(); - for i in 0..=u32::MAX { - let bytes = i.to_le_bytes(); - let res = armv8.decode(&mut U8Reader::new(&bytes)); - if let Ok(instr) = res { - let s = instr.to_string(); - drop(s); + let mut instr = ::Instruction::default(); + let mut s = String::new(); + + for i in start..=end { + if i & 0x01_ff_ff_ff == 0 { + eprintln!("case {:08x}", i); + } + let i = i as u32; + let bytes = i.to_le_bytes(); + let res = armv8.decode_into(&mut instr, &mut U8Reader::new(&bytes)); + if let Ok(()) = res { + s.clear(); + write!(s, "{}", instr).unwrap(); + } } } + + const NR_THREADS: u64 = 512; + + const RANGE_SIZE: u64 = (u32::MAX as u64 + 1) / NR_THREADS; + + let mut handles = Vec::new(); + + for i in 0..NR_THREADS { + let handle = std::thread::spawn(move || test_range(i * RANGE_SIZE, (i + 1) * RANGE_SIZE)); + handles.push(handle); + } + + while let Some(handle) = handles.pop() { + handle.join().unwrap(); + } } -- cgit v1.1