From 2411f2b85332238112398bfb40adb0fc7c915dae Mon Sep 17 00:00:00 2001 From: shun suzuki Date: Thu, 23 Jan 2025 10:43:19 +0900 Subject: [PATCH] update tests for miri --- autd3-core/src/defined/mod.rs | 51 ++++++------ autd3-driver/src/datagram/gain/boxed.rs | 4 +- autd3-driver/src/datagram/modulation/boxed.rs | 2 +- autd3-firmware-emulator/src/cpu/emulator.rs | 3 - .../src/cpu/operation/clear.rs | 1 - .../src/cpu/operation/cpu_gpio_out.rs | 1 - .../src/cpu/operation/debug.rs | 1 - .../src/cpu/operation/force_fan.rs | 1 - .../src/cpu/operation/gain.rs | 1 - .../src/cpu/operation/gpio_in.rs | 1 - .../src/cpu/operation/info.rs | 1 - .../src/cpu/operation/modulation.rs | 1 - .../src/cpu/operation/phase_corr.rs | 1 - .../src/cpu/operation/pulse_width_encoder.rs | 1 - .../src/cpu/operation/reads_fpga_state.rs | 1 - .../src/cpu/operation/silecer.rs | 1 - .../src/cpu/operation/stm/foci.rs | 1 - .../src/cpu/operation/stm/gain.rs | 1 - .../src/cpu/operation/sync.rs | 1 - .../src/fpga/emulator/memory.rs | 1 - .../src/fpga/emulator/mod.rs | 1 - .../src/fpga/emulator/pwe.rs | 1 - .../src/fpga/emulator/silencer.rs | 4 +- .../src/fpga/emulator/swapchain.rs | 8 -- autd3-firmware-emulator/tests/op/clear.rs | 2 +- .../tests/op/cpu_gpio_out.rs | 1 - autd3-firmware-emulator/tests/op/debug.rs | 1 - autd3-firmware-emulator/tests/op/gain.rs | 3 +- .../tests/op/modulation.rs | 7 +- .../tests/op/phase_corr.rs | 2 +- .../tests/op/pulse_width_encoder.rs | 2 +- .../tests/op/reads_fpga_state.rs | 2 +- autd3-firmware-emulator/tests/op/silener.rs | 10 +-- autd3-firmware-emulator/tests/op/stm/foci.rs | 15 +--- autd3-firmware-emulator/tests/op/stm/gain.rs | 12 +-- autd3-firmware-emulator/tests/test.rs | 6 +- autd3-gain-holo/src/amp.rs | 4 - autd3-gain-holo/src/backend_nalgebra.rs | 46 +---------- autd3-gain-holo/src/constraint.rs | 4 - autd3-gain-holo/src/error.rs | 3 - autd3-gain-holo/src/nls/lm.rs | 2 - autd3-protobuf/src/error.rs | 1 - .../src/traits/driver/defined/angle.rs | 2 - .../traits/driver/firmware/cpu/datagram/tx.rs | 2 +- .../src/traits/driver/geometry/mod.rs | 4 - autd3/src/async/controller/mod.rs | 38 +++++---- autd3/src/async/controller/sender/sleep.rs | 2 +- autd3/src/controller/mod.rs | 80 ++++++++++++------- autd3/src/controller/sender/mod.rs | 9 ++- autd3/src/controller/sender/sleep.rs | 2 +- autd3/src/datagram/gain/group.rs | 41 ++++++---- autd3/tests/async/link/audit.rs | 7 +- autd3/tests/sync/link/audit.rs | 7 +- 53 files changed, 160 insertions(+), 247 deletions(-) diff --git a/autd3-core/src/defined/mod.rs b/autd3-core/src/defined/mod.rs index 83bf1247..e88da277 100644 --- a/autd3-core/src/defined/mod.rs +++ b/autd3-core/src/defined/mod.rs @@ -53,41 +53,38 @@ mod inner { #[cfg(feature = "dynamic_freq")] mod inner { - use std::sync::Once; + use std::sync::LazyLock; use super::Freq; use crate::defined::Hz; - static mut VAL: Freq = Freq { freq: 40000 }; - static FREQ: Once = Once::new(); + static LAZY_FREQ: LazyLock> = + LazyLock::new(|| match std::env::var("AUTD3_ULTRASOUND_FREQ") { + Ok(freq) => match freq.parse::() { + Ok(freq) => { + tracing::info!("Set ultrasound frequency to {} Hz.", freq); + freq * Hz + } + Err(_) => { + tracing::error!( + "Invalid ultrasound frequency ({} Hz), fallback to 40 kHz.", + freq + ); + Freq { freq: 40000 } + } + }, + Err(_) => { + tracing::warn!( + "Environment variable AUTD3_ULTRASOUND_FREQ is not set, fallback to 40 kHz." + ); + Freq { freq: 40000 } + } + }); #[inline] /// The frequency of ultrasound pub fn ultrasound_freq() -> Freq { - unsafe { - FREQ.call_once(|| { - VAL = match std::env::var("AUTD3_ULTRASOUND_FREQ") { - Ok(freq) => match freq.parse::() { - Ok(freq) => { - tracing::info!("Set ultrasound frequency to {} Hz.", freq); - freq * Hz - } - Err(_) => { - tracing::error!( - "Invalid ultrasound frequency ({} Hz), fallback to 40 kHz.", - freq - ); - Freq { freq: 40000 } - } - }, - Err(_) => { - tracing::warn!("Environment variable AUTD3_ULTRASOUND_FREQ is not set, fallback to 40 kHz."); - Freq { freq: 40000 } - } - }; - }); - VAL - } + *LAZY_FREQ } #[doc(hidden)] diff --git a/autd3-driver/src/datagram/gain/boxed.rs b/autd3-driver/src/datagram/gain/boxed.rs index 22493f20..1393a44c 100644 --- a/autd3-driver/src/datagram/gain/boxed.rs +++ b/autd3-driver/src/datagram/gain/boxed.rs @@ -171,7 +171,7 @@ pub mod tests { ].into_iter().collect(), vec![true, false], 2)] - fn boxed_gain( + fn boxed_gain_unsafe( #[case] expect: HashMap>, #[case] enabled: Vec, #[case] n: u16, @@ -211,7 +211,7 @@ pub mod tests { } #[test] - fn boxed_gain_dbg() { + fn boxed_gain_dbg_unsafe() { let g = TestGain::null(); assert_eq!(format!("{:?}", g), format!("{:?}", g.into_boxed())); } diff --git a/autd3-driver/src/datagram/modulation/boxed.rs b/autd3-driver/src/datagram/modulation/boxed.rs index 7c21d5c0..2724de12 100644 --- a/autd3-driver/src/datagram/modulation/boxed.rs +++ b/autd3-driver/src/datagram/modulation/boxed.rs @@ -85,7 +85,7 @@ pub mod tests { use crate::datagram::modulation::tests::TestModulation; #[test] - fn test() { + fn boxed_modulation_unsafe() { let m = TestModulation { sampling_config: SamplingConfig::DIV_10, }; diff --git a/autd3-firmware-emulator/src/cpu/emulator.rs b/autd3-firmware-emulator/src/cpu/emulator.rs index e2aec836..c6c62fd5 100644 --- a/autd3-firmware-emulator/src/cpu/emulator.rs +++ b/autd3-firmware-emulator/src/cpu/emulator.rs @@ -256,7 +256,6 @@ mod tests { use rand::Rng; #[test] - #[cfg_attr(miri, ignore)] fn cpu_idx() { let mut rng = rand::thread_rng(); let idx = rng.gen(); @@ -265,7 +264,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn num_transducers() { let cpu = CPUEmulator::new(0, 249); assert_eq!(249, cpu.num_transducers()); @@ -281,7 +279,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn should_update() { let mut cpu = CPUEmulator::new(0, 249); assert!(!cpu.should_update()); diff --git a/autd3-firmware-emulator/src/cpu/operation/clear.rs b/autd3-firmware-emulator/src/cpu/operation/clear.rs index 22f74706..65bd4525 100644 --- a/autd3-firmware-emulator/src/cpu/operation/clear.rs +++ b/autd3-firmware-emulator/src/cpu/operation/clear.rs @@ -172,7 +172,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn clear_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(Clear, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/cpu_gpio_out.rs b/autd3-firmware-emulator/src/cpu/operation/cpu_gpio_out.rs index d976066c..0ccc6dbd 100644 --- a/autd3-firmware-emulator/src/cpu/operation/cpu_gpio_out.rs +++ b/autd3-firmware-emulator/src/cpu/operation/cpu_gpio_out.rs @@ -21,7 +21,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn debug_out_idx_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(CpuGPIOOut, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/debug.rs b/autd3-firmware-emulator/src/cpu/operation/debug.rs index a6d26cb4..20daeefb 100644 --- a/autd3-firmware-emulator/src/cpu/operation/debug.rs +++ b/autd3-firmware-emulator/src/cpu/operation/debug.rs @@ -28,7 +28,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn debug_out_idx_memory_layout() { assert_eq!(40, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(DebugOutIdx, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/force_fan.rs b/autd3-firmware-emulator/src/cpu/operation/force_fan.rs index 60594167..b044b00b 100644 --- a/autd3-firmware-emulator/src/cpu/operation/force_fan.rs +++ b/autd3-firmware-emulator/src/cpu/operation/force_fan.rs @@ -24,7 +24,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn configure_force_fan_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(ForceFan, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/gain.rs b/autd3-firmware-emulator/src/cpu/operation/gain.rs index 30f64d2b..711fc249 100644 --- a/autd3-firmware-emulator/src/cpu/operation/gain.rs +++ b/autd3-firmware-emulator/src/cpu/operation/gain.rs @@ -100,7 +100,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn gain_memory_layout() { assert_eq!(4, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(Gain, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/gpio_in.rs b/autd3-firmware-emulator/src/cpu/operation/gpio_in.rs index 74205ef5..1af7c8dd 100644 --- a/autd3-firmware-emulator/src/cpu/operation/gpio_in.rs +++ b/autd3-firmware-emulator/src/cpu/operation/gpio_in.rs @@ -39,7 +39,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn emulate_gpio_in_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(GPIOIn, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/info.rs b/autd3-firmware-emulator/src/cpu/operation/info.rs index 1a09d989..44d22c69 100644 --- a/autd3-firmware-emulator/src/cpu/operation/info.rs +++ b/autd3-firmware-emulator/src/cpu/operation/info.rs @@ -67,7 +67,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn firminfo_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(FirmInfo, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/modulation.rs b/autd3-firmware-emulator/src/cpu/operation/modulation.rs index 7df9d874..0812a2bf 100644 --- a/autd3-firmware-emulator/src/cpu/operation/modulation.rs +++ b/autd3-firmware-emulator/src/cpu/operation/modulation.rs @@ -192,7 +192,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn modulation_memory_layout() { assert_eq!(16, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(ModulationHead, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/phase_corr.rs b/autd3-firmware-emulator/src/cpu/operation/phase_corr.rs index 567f825a..6371f3bd 100644 --- a/autd3-firmware-emulator/src/cpu/operation/phase_corr.rs +++ b/autd3-firmware-emulator/src/cpu/operation/phase_corr.rs @@ -28,7 +28,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn pwe_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(PhaseCorr, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/pulse_width_encoder.rs b/autd3-firmware-emulator/src/cpu/operation/pulse_width_encoder.rs index 01d2986d..208a15b7 100644 --- a/autd3-firmware-emulator/src/cpu/operation/pulse_width_encoder.rs +++ b/autd3-firmware-emulator/src/cpu/operation/pulse_width_encoder.rs @@ -28,7 +28,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn pwe_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(Pwe, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/reads_fpga_state.rs b/autd3-firmware-emulator/src/cpu/operation/reads_fpga_state.rs index 2b43ae83..9420bc9a 100644 --- a/autd3-firmware-emulator/src/cpu/operation/reads_fpga_state.rs +++ b/autd3-firmware-emulator/src/cpu/operation/reads_fpga_state.rs @@ -21,7 +21,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn configure_reads_fpga_state_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(ReadsFPGAState, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/silecer.rs b/autd3-firmware-emulator/src/cpu/operation/silecer.rs index c5b598b1..c3b596a2 100644 --- a/autd3-firmware-emulator/src/cpu/operation/silecer.rs +++ b/autd3-firmware-emulator/src/cpu/operation/silecer.rs @@ -80,7 +80,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn silencer_memory_layout() { assert_eq!(6, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(ConfigSilencer, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/stm/foci.rs b/autd3-firmware-emulator/src/cpu/operation/stm/foci.rs index 48e62f35..c3b1bfbb 100644 --- a/autd3-firmware-emulator/src/cpu/operation/stm/foci.rs +++ b/autd3-firmware-emulator/src/cpu/operation/stm/foci.rs @@ -257,7 +257,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn foci_stm_memory_layout() { assert_eq!(24, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(FociSTMHead, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/stm/gain.rs b/autd3-firmware-emulator/src/cpu/operation/stm/gain.rs index 9eefd551..d893a7cf 100644 --- a/autd3-firmware-emulator/src/cpu/operation/stm/gain.rs +++ b/autd3-firmware-emulator/src/cpu/operation/stm/gain.rs @@ -261,7 +261,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn gain_stm_memory_layout() { assert_eq!(16, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(GainSTMHead, tag)); diff --git a/autd3-firmware-emulator/src/cpu/operation/sync.rs b/autd3-firmware-emulator/src/cpu/operation/sync.rs index 6c6e5a2d..b90157bd 100644 --- a/autd3-firmware-emulator/src/cpu/operation/sync.rs +++ b/autd3-firmware-emulator/src/cpu/operation/sync.rs @@ -21,7 +21,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn sync_memory_layout() { assert_eq!(2, std::mem::size_of::()); assert_eq!(0, std::mem::offset_of!(Sync, tag)); diff --git a/autd3-firmware-emulator/src/fpga/emulator/memory.rs b/autd3-firmware-emulator/src/fpga/emulator/memory.rs index c216b06a..2f0e95cc 100644 --- a/autd3-firmware-emulator/src/fpga/emulator/memory.rs +++ b/autd3-firmware-emulator/src/fpga/emulator/memory.rs @@ -194,7 +194,6 @@ mod tests { #[test] #[should_panic] - #[cfg_attr(miri, ignore)] fn read_panic() { let fpga = FPGAEmulator::new(249); let addr = (BRAM_SELECT_MOD as u16) << 14; diff --git a/autd3-firmware-emulator/src/fpga/emulator/mod.rs b/autd3-firmware-emulator/src/fpga/emulator/mod.rs index 85f7a7cd..f3118393 100644 --- a/autd3-firmware-emulator/src/fpga/emulator/mod.rs +++ b/autd3-firmware-emulator/src/fpga/emulator/mod.rs @@ -128,7 +128,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn thermo() { let mut fpga = FPGAEmulator::new(249); assert!(!fpga.is_thermo_asserted()); diff --git a/autd3-firmware-emulator/src/fpga/emulator/pwe.rs b/autd3-firmware-emulator/src/fpga/emulator/pwe.rs index e103b07a..dc3553b5 100644 --- a/autd3-firmware-emulator/src/fpga/emulator/pwe.rs +++ b/autd3-firmware-emulator/src/fpga/emulator/pwe.rs @@ -43,7 +43,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn test_to_pulse_width() { let fpga = FPGAEmulator::new(249); itertools::iproduct!(0x00..=0xFF, 0x00..=0xFF).for_each(|(a, b)| { diff --git a/autd3-firmware-emulator/src/fpga/emulator/silencer.rs b/autd3-firmware-emulator/src/fpga/emulator/silencer.rs index 7f635fb4..028348c8 100644 --- a/autd3-firmware-emulator/src/fpga/emulator/silencer.rs +++ b/autd3-firmware-emulator/src/fpga/emulator/silencer.rs @@ -148,7 +148,7 @@ impl SilencerEmulator { impl FPGAEmulator { pub fn silencer_update_rate(&self) -> FixedUpdateRate { - unsafe /* ignore miri */ { + unsafe { FixedUpdateRate { intensity: NonZeroU16::new_unchecked( self.mem.controller_bram.borrow()[ADDR_SILENCER_UPDATE_RATE_INTENSITY], @@ -299,7 +299,6 @@ mod tests { #[case(vec![255; 256], 256, true, 0, vec![255; 256])] #[case([(0..=254).rev().collect::>(), vec![0]].concat(), 256, false, 255, vec![0; 256])] #[case(vec![0; 256], 256, true, 255, vec![0; 256])] - #[cfg_attr(miri, ignore)] fn apply_silencer_fixed_update_rate( #[case] expect: Vec, #[case] value: u16, @@ -359,7 +358,6 @@ mod tests { #[case::phase_11(vec![187, 195, 202, 210, 218, 225, 233, 240, 248, 0, 0], 10, true, 180, vec![0; 11])] #[case::intensity_12(vec![0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], 10, false, 0, vec![5; 11])] #[case::phase_12(vec![0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], 10, true, 0, vec![5; 11])] - #[cfg_attr(miri, ignore)] fn apply_silencer_fixed_completion_steps( #[case] expect: Vec, #[case] value: u8, diff --git a/autd3-firmware-emulator/src/fpga/emulator/swapchain.rs b/autd3-firmware-emulator/src/fpga/emulator/swapchain.rs index cd42a212..a8c02b2d 100644 --- a/autd3-firmware-emulator/src/fpga/emulator/swapchain.rs +++ b/autd3-firmware-emulator/src/fpga/emulator/swapchain.rs @@ -203,7 +203,6 @@ mod tests { const FREQ_DIV: u16 = 1; #[test] - #[cfg_attr(miri, ignore)] fn transition_same_segment() { let mut fpga = FPGAEmulator::new(249); @@ -229,7 +228,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_infinite() { let mut fpga = FPGAEmulator::new(249); @@ -256,7 +254,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_finite() { let mut fpga = FPGAEmulator::new(249); @@ -282,7 +279,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_sync_idx() { let mut fpga = FPGAEmulator::new(249); @@ -336,7 +332,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_sys_time() { let mut fpga = FPGAEmulator::new(249); @@ -391,7 +386,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_gpio() { let mut fpga = FPGAEmulator::new(249); @@ -451,7 +445,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_gpio_over() { let mut fpga = FPGAEmulator::new(249); @@ -496,7 +489,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn transition_ext() { let mut fpga = FPGAEmulator::new(249); diff --git a/autd3-firmware-emulator/tests/op/clear.rs b/autd3-firmware-emulator/tests/op/clear.rs index 7974c72e..ae054264 100644 --- a/autd3-firmware-emulator/tests/op/clear.rs +++ b/autd3-firmware-emulator/tests/op/clear.rs @@ -22,7 +22,7 @@ use autd3_firmware_emulator::CPUEmulator; use zerocopy::FromZeros; #[test] -fn send_clear() -> anyhow::Result<()> { +fn send_clear_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; diff --git a/autd3-firmware-emulator/tests/op/cpu_gpio_out.rs b/autd3-firmware-emulator/tests/op/cpu_gpio_out.rs index e71e9df4..6f542bb6 100644 --- a/autd3-firmware-emulator/tests/op/cpu_gpio_out.rs +++ b/autd3-firmware-emulator/tests/op/cpu_gpio_out.rs @@ -11,7 +11,6 @@ use zerocopy::FromZeros; #[case(0b00100000, true, false)] #[case(0b10000000, false, true)] #[case(0b00000000, false, false)] -#[cfg_attr(miri, ignore)] fn send_cpu_gpio_out( #[case] expect: u8, #[case] pa5: bool, diff --git a/autd3-firmware-emulator/tests/op/debug.rs b/autd3-firmware-emulator/tests/op/debug.rs index 7098ea07..c8fe5a14 100644 --- a/autd3-firmware-emulator/tests/op/debug.rs +++ b/autd3-firmware-emulator/tests/op/debug.rs @@ -17,7 +17,6 @@ use zerocopy::FromZeros; #[case([DBG_NONE, DBG_BASE_SIG, DBG_THERMO, DBG_FORCE_FAN], [0, 0, 0, 0], [DebugType::None, DebugType::BaseSignal, DebugType::Thermo, DebugType::ForceFan])] #[case([DBG_SYNC, DBG_MOD_SEGMENT, DBG_MOD_IDX, DBG_STM_SEGMENT], [0, 0, 0x01, 0], [DebugType::Sync, DebugType::ModSegment, DebugType::ModIdx(0x01), DebugType::StmSegment])] #[case([DBG_STM_IDX, DBG_IS_STM_MODE, DBG_SYS_TIME_EQ, DBG_DIRECT], [0x02, 0, 1<<9, 1], [DebugType::StmIdx(0x02), DebugType::IsStmMode, DebugType::SysTimeEq(DcSysTime::ZERO + std::time::Duration::from_nanos(50000)), DebugType::Direct(true)])] -#[cfg_attr(miri, ignore)] fn send_debug_output_idx( #[case] expect_types: [u8; 4], #[case] expect_values: [u64; 4], diff --git a/autd3-firmware-emulator/tests/op/gain.rs b/autd3-firmware-emulator/tests/op/gain.rs index 09f7bdd7..12f9068c 100644 --- a/autd3-firmware-emulator/tests/op/gain.rs +++ b/autd3-firmware-emulator/tests/op/gain.rs @@ -61,7 +61,7 @@ impl Gain for TestGain { } #[test] -fn send_gain() -> anyhow::Result<()> { +fn send_gain_unsafe() -> anyhow::Result<()> { let mut rng = rand::thread_rng(); let geometry = create_geometry(1); @@ -151,7 +151,6 @@ fn send_gain() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_gain_invalid_segment_transition() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); diff --git a/autd3-firmware-emulator/tests/op/modulation.rs b/autd3-firmware-emulator/tests/op/modulation.rs index aa25e305..e5dff9e8 100644 --- a/autd3-firmware-emulator/tests/op/modulation.rs +++ b/autd3-firmware-emulator/tests/op/modulation.rs @@ -84,7 +84,7 @@ impl Modulation for TestModulation { Some(TransitionMode::GPIO(GPIOIn::I3)) )] #[case(MOD_BUF_SIZE_MIN, LoopBehavior::ONCE, Segment::S1, None)] -fn send_mod( +fn send_mod_unsafe( #[case] n: usize, #[case] loop_behavior: LoopBehavior, #[case] segment: Segment, @@ -126,7 +126,7 @@ fn send_mod( } #[test] -fn swap_mod_segmemt() -> anyhow::Result<()> { +fn swap_mod_segmemt_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -154,7 +154,6 @@ fn swap_mod_segmemt() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn mod_freq_div_too_small() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -212,7 +211,6 @@ fn mod_freq_div_too_small() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_mod_invalid_transition_mode() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -278,7 +276,6 @@ fn send_mod_invalid_transition_mode() -> anyhow::Result<()> { #[case(Ok(()), ECAT_DC_SYS_TIME_BASE, ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN))] #[case(Err(AUTDDriverError::MissTransitionTime), ECAT_DC_SYS_TIME_BASE, ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN)-autd3_driver::ethercat::EC_CYCLE_TIME_BASE)] #[case(Err(AUTDDriverError::MissTransitionTime), ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(1), ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN))] -#[cfg_attr(miri, ignore)] fn test_miss_transition_time( #[case] expect: Result<(), AUTDDriverError>, #[case] systime: OffsetDateTime, diff --git a/autd3-firmware-emulator/tests/op/phase_corr.rs b/autd3-firmware-emulator/tests/op/phase_corr.rs index 03bed8d2..6dc17355 100644 --- a/autd3-firmware-emulator/tests/op/phase_corr.rs +++ b/autd3-firmware-emulator/tests/op/phase_corr.rs @@ -11,7 +11,7 @@ use crate::{create_geometry, send}; use zerocopy::FromZeros; #[test] -fn phase_corr() -> anyhow::Result<()> { +fn phase_corr_unsafe() -> anyhow::Result<()> { let mut rng = rand::thread_rng(); let geometry = create_geometry(1); diff --git a/autd3-firmware-emulator/tests/op/pulse_width_encoder.rs b/autd3-firmware-emulator/tests/op/pulse_width_encoder.rs index fd4e8f03..9b838846 100644 --- a/autd3-firmware-emulator/tests/op/pulse_width_encoder.rs +++ b/autd3-firmware-emulator/tests/op/pulse_width_encoder.rs @@ -8,7 +8,7 @@ use crate::{create_geometry, send}; use zerocopy::FromZeros; #[test] -fn config_pwe() -> anyhow::Result<()> { +fn config_pwe_unsafe() -> anyhow::Result<()> { let mut rng = rand::thread_rng(); let geometry = create_geometry(1); diff --git a/autd3-firmware-emulator/tests/op/reads_fpga_state.rs b/autd3-firmware-emulator/tests/op/reads_fpga_state.rs index 6e2ae1c9..bd41f6d6 100644 --- a/autd3-firmware-emulator/tests/op/reads_fpga_state.rs +++ b/autd3-firmware-emulator/tests/op/reads_fpga_state.rs @@ -17,7 +17,7 @@ fn fpga_state(cpu: &CPUEmulator) -> FPGAState { } #[test] -fn send_reads_fpga_state() -> anyhow::Result<()> { +fn send_reads_fpga_state_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; diff --git a/autd3-firmware-emulator/tests/op/silener.rs b/autd3-firmware-emulator/tests/op/silener.rs index c1e497ab..9653c033 100644 --- a/autd3-firmware-emulator/tests/op/silener.rs +++ b/autd3-firmware-emulator/tests/op/silener.rs @@ -18,7 +18,7 @@ use crate::{create_geometry, send}; use zerocopy::FromZeros; #[test] -fn send_silencer_fixed_update_rate() -> anyhow::Result<()> { +fn send_silencer_fixed_update_rate_unsafe() -> anyhow::Result<()> { let mut rng = rand::thread_rng(); let geometry = create_geometry(1); @@ -64,7 +64,7 @@ fn send_silencer_fixed_update_rate() -> anyhow::Result<()> { #[cfg(not(feature = "dynamic_freq"))] #[test] -fn send_silencer_fixed_completion_time() { +fn send_silencer_fixed_completion_time_unsafe() { use autd3_driver::defined::ultrasound_period; let mut rng = rand::thread_rng(); @@ -126,7 +126,7 @@ fn send_silencer_fixed_completion_time() { } #[test] -fn send_silencer_fixed_completion_steps() { +fn send_silencer_fixed_completion_steps_unsafe() { let mut rng = rand::thread_rng(); let geometry = create_geometry(1); @@ -175,7 +175,6 @@ fn send_silencer_fixed_completion_steps() { #[test] #[case(Ok(()), 1)] #[case(Err(AUTDDriverError::InvalidSilencerSettings), 2)] -#[cfg_attr(miri, ignore)] fn silencer_completetion_steps_too_large_mod( #[case] expect: Result<(), AUTDDriverError>, #[case] steps_intensity: u16, @@ -226,7 +225,6 @@ fn silencer_completetion_steps_too_large_mod( #[case(Ok(()), 1, 1)] #[case(Err(AUTDDriverError::InvalidSilencerSettings), 2, 1)] #[case(Err(AUTDDriverError::InvalidSilencerSettings), 1, 2)] -#[cfg_attr(miri, ignore)] fn silencer_completetion_steps_too_large_stm( #[case] expect: Result<(), AUTDDriverError>, #[case] steps_intensity: u16, @@ -271,7 +269,6 @@ fn silencer_completetion_steps_too_large_stm( } #[test] -#[cfg_attr(miri, ignore)] fn send_silencer_fixed_completion_steps_permissive() -> anyhow::Result<()> { let mut rng = rand::thread_rng(); @@ -303,7 +300,6 @@ fn send_silencer_fixed_completion_steps_permissive() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_silencer_fixed_completion_time_permissive() { let mut rng = rand::thread_rng(); diff --git a/autd3-firmware-emulator/tests/op/stm/foci.rs b/autd3-firmware-emulator/tests/op/stm/foci.rs index 37207568..838fcef3 100644 --- a/autd3-firmware-emulator/tests/op/stm/foci.rs +++ b/autd3-firmware-emulator/tests/op/stm/foci.rs @@ -53,7 +53,7 @@ pub fn gen_random_foci(num: usize) -> Vec> { Some(TransitionMode::Immediate) )] #[case(2, LoopBehavior::ONCE, Segment::S1, None)] -fn test_send_foci_stm( +fn test_send_foci_stm_unsafe( #[case] n: usize, #[case] loop_behavior: LoopBehavior, #[case] segment: Segment, @@ -135,7 +135,7 @@ fn test_send_foci_stm( } #[test] -fn change_foci_stm_segment() -> anyhow::Result<()> { +fn change_foci_stm_segment_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -165,7 +165,6 @@ fn change_foci_stm_segment() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn test_foci_stm_freq_div_too_small() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -230,7 +229,6 @@ fn test_foci_stm_freq_div_too_small() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_foci_stm_invalid_segment_transition() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -291,7 +289,6 @@ fn send_foci_stm_invalid_segment_transition() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_foci_stm_invalid_transition_mode() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -358,7 +355,6 @@ fn send_foci_stm_invalid_transition_mode() -> anyhow::Result<()> { #[case(Ok(()), ECAT_DC_SYS_TIME_BASE, ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN))] #[case(Err(AUTDDriverError::MissTransitionTime), ECAT_DC_SYS_TIME_BASE, ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN)-autd3_driver::ethercat::EC_CYCLE_TIME_BASE)] #[case(Err(AUTDDriverError::MissTransitionTime), ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(1), ECAT_DC_SYS_TIME_BASE + Duration::from_nanos(SYS_TIME_TRANSITION_MARGIN))] -#[cfg_attr(miri, ignore)] fn test_miss_transition_time( #[case] expect: Result<(), AUTDDriverError>, #[case] systime: OffsetDateTime, @@ -466,43 +462,36 @@ fn test_send_foci_stm_n() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_2() -> anyhow::Result<()> { test_send_foci_stm_n::<2>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_3() -> anyhow::Result<()> { test_send_foci_stm_n::<3>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_4() -> anyhow::Result<()> { test_send_foci_stm_n::<4>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_5() -> anyhow::Result<()> { test_send_foci_stm_n::<5>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_6() -> anyhow::Result<()> { test_send_foci_stm_n::<6>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_7() -> anyhow::Result<()> { test_send_foci_stm_n::<7>() } #[test] -#[cfg_attr(miri, ignore)] fn test_send_foci_stm_8() -> anyhow::Result<()> { test_send_foci_stm_n::<8>() } diff --git a/autd3-firmware-emulator/tests/op/stm/gain.rs b/autd3-firmware-emulator/tests/op/stm/gain.rs index 073aae37..2bfa7181 100644 --- a/autd3-firmware-emulator/tests/op/stm/gain.rs +++ b/autd3-firmware-emulator/tests/op/stm/gain.rs @@ -59,7 +59,7 @@ fn gen_random_buf(n: usize, geometry: &Geometry) -> Vec anyhow::Result<()> { +fn send_gain_stm_phase_full_unsafe(#[case] n: usize) -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -191,7 +191,7 @@ fn send_gain_stm_phase_full(#[case] n: usize) -> anyhow::Result<()> { #[cfg_attr(miri, ignore)] #[case(GAIN_STM_BUF_SIZE_MAX)] -fn send_gain_stm_phase_half(#[case] n: usize) -> anyhow::Result<()> { +fn send_gain_stm_phase_half_unsafe(#[case] n: usize) -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -249,7 +249,7 @@ fn send_gain_stm_phase_half(#[case] n: usize) -> anyhow::Result<()> { } #[test] -fn change_gain_stm_segment() -> anyhow::Result<()> { +fn change_gain_stm_segment_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -284,7 +284,6 @@ fn change_gain_stm_segment() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn gain_stm_freq_div_too_small() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -357,7 +356,6 @@ fn gain_stm_freq_div_too_small() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_gain_stm_invalid_segment_transition() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -413,7 +411,6 @@ fn send_gain_stm_invalid_segment_transition() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_gain_stm_invalid_transition_mode() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -489,7 +486,6 @@ fn send_gain_stm_invalid_transition_mode() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn invalid_gain_stm_mode() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); diff --git a/autd3-firmware-emulator/tests/test.rs b/autd3-firmware-emulator/tests/test.rs index 71db0300..b7f90e0d 100644 --- a/autd3-firmware-emulator/tests/test.rs +++ b/autd3-firmware-emulator/tests/test.rs @@ -60,7 +60,6 @@ where } #[test] -#[cfg_attr(miri, ignore)] fn send_invalid_tag() { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -77,7 +76,6 @@ fn send_invalid_tag() { } #[test] -#[cfg_attr(miri, ignore)] fn send_invalid_msg_id() { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -93,7 +91,6 @@ fn send_invalid_msg_id() { } #[test] -#[cfg_attr(miri, ignore)] fn send_ingore_same_data() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); @@ -120,7 +117,7 @@ fn send_ingore_same_data() -> anyhow::Result<()> { } #[test] -fn send_slot_2() -> anyhow::Result<()> { +fn send_slot_2_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); let mut tx = vec![TxMessage::new_zeroed(); 1]; @@ -139,7 +136,6 @@ fn send_slot_2() -> anyhow::Result<()> { } #[test] -#[cfg_attr(miri, ignore)] fn send_slot_2_err() -> anyhow::Result<()> { let geometry = create_geometry(1); let mut cpu = CPUEmulator::new(0, geometry.num_transducers()); diff --git a/autd3-gain-holo/src/amp.rs b/autd3-gain-holo/src/amp.rs index f13eae60..ec827670 100644 --- a/autd3-gain-holo/src/amp.rs +++ b/autd3-gain-holo/src/amp.rs @@ -74,7 +74,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn test_db() { let amp = 121.5 * dB; @@ -83,7 +82,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn test_pascal() { let amp = 23.77 * Pa; @@ -97,7 +95,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn test_kilo_pascal() { let amp = 23.77e-3 * kPa; @@ -111,7 +108,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn display() { let amp = 23.77 * Pa; assert_eq!(amp.to_string(), "23.77 Pa"); diff --git a/autd3-gain-holo/src/backend_nalgebra.rs b/autd3-gain-holo/src/backend_nalgebra.rs index dfad70bf..1ba3fbea 100644 --- a/autd3-gain-holo/src/backend_nalgebra.rs +++ b/autd3-gain-holo/src/backend_nalgebra.rs @@ -650,7 +650,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_v(backend: NalgebraBackend) -> Result<(), HoloError> { let v = backend.alloc_v(N)?; let v = backend.to_host_v(v)?; @@ -661,7 +660,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_m(backend: NalgebraBackend) -> Result<(), HoloError> { let m = backend.alloc_m(N, 2 * N)?; let m = backend.to_host_m(m)?; @@ -673,7 +671,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let v = backend.alloc_cv(N)?; let v = backend.to_host_cv(v)?; @@ -684,7 +681,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let m = backend.alloc_cm(N, 2 * N)?; let m = backend.to_host_cm(m)?; @@ -696,7 +692,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_zeros_v(backend: NalgebraBackend) -> Result<(), HoloError> { let v = backend.alloc_v(N)?; let v = backend.to_host_v(v)?; @@ -708,7 +703,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_zeros_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let v = backend.alloc_cv(N)?; let v = backend.to_host_cv(v)?; @@ -720,7 +714,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_alloc_zeros_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let m = backend.alloc_cm(N, 2 * N)?; let m = backend.to_host_cm(m)?; @@ -733,7 +726,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_cols_c(backend: NalgebraBackend) -> Result<(), HoloError> { let m = backend.alloc_cm(N, 2 * N)?; @@ -744,7 +736,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_from_slice_v(backend: NalgebraBackend) -> Result<(), HoloError> { let rng = rand::thread_rng(); @@ -765,7 +756,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_from_slice_m(backend: NalgebraBackend) -> Result<(), HoloError> { let rng = rand::thread_rng(); @@ -789,7 +779,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_from_slice_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let rng = rand::thread_rng(); @@ -811,7 +800,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_from_slice2_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let mut rng = rand::thread_rng(); @@ -840,7 +828,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_from_slice2_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let mut rng = rand::thread_rng(); @@ -869,7 +856,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_copy_from_slice_v(backend: NalgebraBackend) -> Result<(), HoloError> { { let mut a = backend.alloc_zeros_v(N)?; @@ -907,7 +893,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_copy_to_v(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_v(&backend, N)?; let mut b = backend.alloc_v(N)?; @@ -924,7 +909,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_copy_to_m(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_m(&backend, N, N)?; let mut b = backend.alloc_m(N, N)?; @@ -941,7 +925,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_clone_v(backend: NalgebraBackend) -> Result<(), HoloError> { let c = make_random_v(&backend, N)?; let c2 = backend.clone_v(&c)?; @@ -957,7 +940,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_clone_m(backend: NalgebraBackend) -> Result<(), HoloError> { let c = make_random_m(&backend, N, N)?; let c2 = backend.clone_m(&c)?; @@ -973,7 +955,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_clone_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let c = make_random_cv(&backend, N)?; let c2 = backend.clone_cv(&c)?; @@ -990,7 +971,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_clone_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let c = make_random_cm(&backend, N, N)?; let c2 = backend.clone_cm(&c)?; @@ -1007,7 +987,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_make_complex2_v(backend: NalgebraBackend) -> Result<(), HoloError> { let real = make_random_v(&backend, N)?; let imag = make_random_v(&backend, N)?; @@ -1030,7 +1009,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_create_diagonal(backend: NalgebraBackend) -> Result<(), HoloError> { let diagonal = make_random_v(&backend, N)?; @@ -1054,7 +1032,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_create_diagonal_c(backend: NalgebraBackend) -> Result<(), HoloError> { let diagonal = make_random_cv(&backend, N)?; @@ -1080,7 +1057,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_get_diagonal(backend: NalgebraBackend) -> Result<(), HoloError> { let m = make_random_m(&backend, N, N)?; let mut diagonal = backend.alloc_v(N)?; @@ -1097,7 +1073,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_norm_squared_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let v = make_random_cv(&backend, N)?; @@ -1114,7 +1089,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_real_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let v = make_random_cm(&backend, N, N)?; let mut r = backend.alloc_m(N, N)?; @@ -1133,7 +1107,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_imag_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let v = make_random_cm(&backend, N, N)?; let mut r = backend.alloc_m(N, N)?; @@ -1152,7 +1125,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_scale_assign_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let mut v = make_random_cv(&backend, N)?; let vc = backend.clone_cv(&v)?; @@ -1173,7 +1145,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_conj_assign_v(backend: NalgebraBackend) -> Result<(), HoloError> { let mut v = make_random_cv(&backend, N)?; let vc = backend.clone_cv(&v)?; @@ -1191,7 +1162,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_exp_assign_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let mut v = make_random_cv(&backend, N)?; let vc = backend.clone_cv(&v)?; @@ -1209,7 +1179,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_concat_col_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_cm(&backend, N, N)?; let b = make_random_cm(&backend, N, 2 * N)?; @@ -1228,7 +1197,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_max_v(backend: NalgebraBackend) -> Result<(), HoloError> { let v = make_random_v(&backend, N)?; @@ -1244,7 +1212,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_hadamard_product_cm(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_cm(&backend, N, N)?; let b = make_random_cm(&backend, N, N)?; @@ -1267,7 +1234,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_dot(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_v(&backend, N)?; let b = make_random_v(&backend, N)?; @@ -1283,7 +1249,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_dot_c(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_cv(&backend, N)?; let b = make_random_cv(&backend, N)?; @@ -1304,7 +1269,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_add_v(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_v(&backend, N)?; let mut b = make_random_v(&backend, N)?; @@ -1329,7 +1293,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_add_m(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_m(&backend, N, N)?; let mut b = make_random_m(&backend, N, N)?; @@ -1354,7 +1317,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_gevv_c(backend: NalgebraBackend) -> Result<(), HoloError> { let mut rng = rand::thread_rng(); @@ -1531,7 +1493,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_gemv_c(backend: NalgebraBackend) -> Result<(), HoloError> { let m = N; let n = 2 * N; @@ -1605,7 +1566,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_gemm_c(backend: NalgebraBackend) -> Result<(), HoloError> { let m = N; let n = 2 * N; @@ -1830,7 +1790,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_solve_inplace(backend: NalgebraBackend) -> Result<(), HoloError> { { let tmp = make_random_m(&backend, N, N)?; @@ -1857,7 +1816,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_reduce_col(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_m(&backend, N, N)?; @@ -1877,7 +1835,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_scaled_to_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_cv(&backend, N)?; let b = make_random_cv(&backend, N)?; @@ -1902,7 +1859,6 @@ mod tests { #[rstest::rstest] #[test] - #[cfg_attr(miri, ignore)] fn test_scaled_to_assign_cv(backend: NalgebraBackend) -> Result<(), HoloError> { let a = make_random_cv(&backend, N)?; let mut b = make_random_cv(&backend, N)?; @@ -1929,7 +1885,7 @@ mod tests { #[test] #[case(1, 2)] #[case(2, 1)] - fn test_generate_propagation_matrix( + fn test_generate_propagation_matrix_unsafe( #[case] dev_num: usize, #[case] foci_num: usize, backend: NalgebraBackend, diff --git a/autd3-gain-holo/src/constraint.rs b/autd3-gain-holo/src/constraint.rs index 2d136d70..3ca5dc3c 100644 --- a/autd3-gain-holo/src/constraint.rs +++ b/autd3-gain-holo/src/constraint.rs @@ -42,7 +42,6 @@ mod tests { #[case(EmitIntensity(128), 0.5, 1.0)] #[case(EmitIntensity(128), 1.0, 2.0)] #[case(EmitIntensity(191), 1.5, 2.0)] - #[cfg_attr(miri, ignore)] fn normalize(#[case] expect: EmitIntensity, #[case] value: f32, #[case] max_value: f32) { assert_eq!( expect, @@ -56,7 +55,6 @@ mod tests { #[case(EmitIntensity(64), 0.5, 1.0, 0.5)] #[case(EmitIntensity(64), 1.0, 2.0, 0.5)] #[case(EmitIntensity(96), 1.5, 2.0, 0.5)] - #[cfg_attr(miri, ignore)] fn multiply( #[case] expect: EmitIntensity, #[case] value: f32, @@ -79,7 +77,6 @@ mod tests { #[case(EmitIntensity::MAX, 1.0, 2.0)] #[case(EmitIntensity::MIN, 1.5, 2.0)] #[case(EmitIntensity::MAX, 1.5, 2.0)] - #[cfg_attr(miri, ignore)] fn uniform(#[case] expect: EmitIntensity, #[case] value: f32, #[case] max_value: f32) { assert_eq!( expect, @@ -93,7 +90,6 @@ mod tests { #[case(EmitIntensity(128), 0.5, 1.0, EmitIntensity(64), EmitIntensity(192))] #[case(EmitIntensity(192), 1.0, 1.0, EmitIntensity(64), EmitIntensity(192))] #[case(EmitIntensity(192), 1.5, 1.0, EmitIntensity(64), EmitIntensity(192))] - #[cfg_attr(miri, ignore)] fn clamp( #[case] expect: EmitIntensity, #[case] value: f32, diff --git a/autd3-gain-holo/src/error.rs b/autd3-gain-holo/src/error.rs index c2b9be1e..6913d5c7 100644 --- a/autd3-gain-holo/src/error.rs +++ b/autd3-gain-holo/src/error.rs @@ -28,7 +28,6 @@ mod tests { use std::error::Error; #[test] - #[cfg_attr(miri, ignore)] fn solve_failed() { let err = HoloError::SolveFailed; assert!(err.source().is_none()); @@ -37,7 +36,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn backend_error() { let err = HoloError::BackendError("test".to_string()); assert!(err.source().is_none()); @@ -46,7 +44,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn from() { let err = HoloError::SolveFailed; let err: GainError = err.into(); diff --git a/autd3-gain-holo/src/nls/lm.rs b/autd3-gain-holo/src/nls/lm.rs index 117ddafd..84f9af2f 100644 --- a/autd3-gain-holo/src/nls/lm.rs +++ b/autd3-gain-holo/src/nls/lm.rs @@ -288,7 +288,6 @@ mod tests { use super::{super::super::NalgebraBackend, super::super::Pa, *}; #[test] - #[cfg_attr(miri, ignore)] fn test_lm_all() { let geometry = create_geometry(1, 1); let backend = std::sync::Arc::new(NalgebraBackend::default()); @@ -317,7 +316,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn test_lm_filtered() { let geometry = create_geometry(2, 1); let backend = std::sync::Arc::new(NalgebraBackend::default()); diff --git a/autd3-protobuf/src/error.rs b/autd3-protobuf/src/error.rs index 16cedce5..d0b580c1 100644 --- a/autd3-protobuf/src/error.rs +++ b/autd3-protobuf/src/error.rs @@ -63,7 +63,6 @@ mod tests { use super::*; #[test] - #[cfg_attr(miri, ignore)] fn test_protobuf_error() { let e = AUTDProtoBufError::NotSupportedData; assert_eq!(e.to_string(), "Not supported data"); diff --git a/autd3-protobuf/src/traits/driver/defined/angle.rs b/autd3-protobuf/src/traits/driver/defined/angle.rs index e4b23ea5..c9e1e767 100644 --- a/autd3-protobuf/src/traits/driver/defined/angle.rs +++ b/autd3-protobuf/src/traits/driver/defined/angle.rs @@ -31,7 +31,6 @@ mod tests { use rand::Rng; #[test] - #[cfg_attr(miri, ignore)] fn angle() { let mut rng = rand::thread_rng(); let v = rng.gen::() * rad; @@ -41,7 +40,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn parse_error() { assert!(Angle::from_msg(&None).is_err()); } diff --git a/autd3-protobuf/src/traits/driver/firmware/cpu/datagram/tx.rs b/autd3-protobuf/src/traits/driver/firmware/cpu/datagram/tx.rs index 4e6a616e..349be1a8 100644 --- a/autd3-protobuf/src/traits/driver/firmware/cpu/datagram/tx.rs +++ b/autd3-protobuf/src/traits/driver/firmware/cpu/datagram/tx.rs @@ -36,7 +36,7 @@ mod tests { use rand::Rng; #[test] - fn test_tx_datagram() { + fn test_tx_datagram_unsafe() { let mut rng = rand::thread_rng(); let mut tx = vec![autd3_driver::firmware::cpu::TxMessage::new_zeroed(); 10]; (0..10).for_each(|i| { diff --git a/autd3-protobuf/src/traits/driver/geometry/mod.rs b/autd3-protobuf/src/traits/driver/geometry/mod.rs index 1128e5fe..4790b122 100644 --- a/autd3-protobuf/src/traits/driver/geometry/mod.rs +++ b/autd3-protobuf/src/traits/driver/geometry/mod.rs @@ -137,7 +137,6 @@ mod tests { use rand::Rng; #[test] - #[cfg_attr(miri, ignore)] fn point3() { let mut rng = rand::thread_rng(); let v = Point3::new(rng.gen(), rng.gen(), rng.gen()); @@ -151,7 +150,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn unitvector3() { let mut rng = rand::thread_rng(); let v = UnitVector3::new_normalize(Vector3::new(rng.gen(), rng.gen(), rng.gen())); @@ -165,7 +163,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn quaternion() { let mut rng = rand::thread_rng(); let q = UnitQuaternion::from_quaternion(Quaternion::new( @@ -185,7 +182,6 @@ mod tests { } #[test] - #[cfg_attr(miri, ignore)] fn geometry() { let mut rng = rand::thread_rng(); let mut dev = AUTD3 { diff --git a/autd3/src/async/controller/mod.rs b/autd3/src/async/controller/mod.rs index c7f840aa..6d21b273 100644 --- a/autd3/src/async/controller/mod.rs +++ b/autd3/src/async/controller/mod.rs @@ -3,8 +3,6 @@ mod sender; use crate::{controller::SenderOption, error::AUTDError, gain::Null, prelude::Static}; -use std::time::Duration; - use autd3_core::{ defined::DEFAULT_TIMEOUT, geometry::IntoDevice, @@ -50,27 +48,36 @@ pub struct Controller { } impl Controller { - /// Equivalent to [`Self::open_with_timeout`] with a timeout of [`DEFAULT_TIMEOUT`]. + /// Equivalent to [`Self::open_with_option`] with a timeout of [`DEFAULT_TIMEOUT`]. pub async fn open, B: AsyncLinkBuilder>( devices: F, link_builder: B, ) -> Result, AUTDError> { - Self::open_with_timeout(devices, link_builder, DEFAULT_TIMEOUT).await + Self::open_with_option( + devices, + link_builder, + SenderOption:: { + timeout: Some(DEFAULT_TIMEOUT), + ..Default::default() + }, + ) + .await } /// Opens a controller with a timeout. /// /// Opens link, and then initialize and synchronize the devices. The `timeout` is used to send data for initialization and synchronization. - pub async fn open_with_timeout< + pub async fn open_with_option< D: IntoDevice, F: IntoIterator, B: AsyncLinkBuilder, + S: AsyncSleep, >( devices: F, link_builder: B, - timeout: Duration, + option: SenderOption, ) -> Result { - tracing::debug!("Opening a controller with timeout {:?})", timeout); + tracing::debug!("Opening a controller with option {:?})", option); let devices = devices .into_iter() @@ -85,7 +92,7 @@ impl Controller { rx_buf: vec![RxMessage::new(0, 0); geometry.len()], geometry, } - .open_impl(timeout) + .open_impl(option) .await } @@ -114,17 +121,15 @@ impl Controller { .await } - pub(crate) async fn open_impl(mut self, timeout: Duration) -> Result { - let timeout = Some(timeout); + pub(crate) async fn open_impl( + mut self, + option: SenderOption, + ) -> Result { + let mut sender = self.sender(option); // If the device is used continuously without powering off, the first data may be ignored because the first msg_id equals to the remaining msg_id in the device. // Therefore, send a meaningless data (here, we use `ForceFan` because it is the lightest). - let _ = self.send(ForceFan::new(|_| false)).await; - - let mut sender = self.sender(SenderOption:: { - timeout, - ..Default::default() - }); + let _ = sender.send(ForceFan::new(|_| false)).await; #[cfg(feature = "dynamic_freq")] { @@ -287,7 +292,6 @@ impl Controller { /// # Safety /// /// This function must be used only when converting an instance created by [`Controller::into_boxed_link`] back to the original [`Controller`]. - /// pub unsafe fn from_boxed_link(cnt: Controller>) -> Controller { let cnt = std::mem::ManuallyDrop::new(cnt); let link = unsafe { std::ptr::read(&cnt.link) }; diff --git a/autd3/src/async/controller/sender/sleep.rs b/autd3/src/async/controller/sender/sleep.rs index 8905a4c8..a7750691 100644 --- a/autd3/src/async/controller/sender/sleep.rs +++ b/autd3/src/async/controller/sender/sleep.rs @@ -5,7 +5,7 @@ pub use spin_sleep::SpinSleeper; use crate::controller::StdSleeper; -pub trait AsyncSleep { +pub trait AsyncSleep: std::fmt::Debug { fn sleep_until(&self, deadline: Instant) -> impl std::future::Future; } diff --git a/autd3/src/controller/mod.rs b/autd3/src/controller/mod.rs index 5b5d2b28..afd240e8 100644 --- a/autd3/src/controller/mod.rs +++ b/autd3/src/controller/mod.rs @@ -3,8 +3,6 @@ mod sender; use crate::{error::AUTDError, gain::Null, prelude::Static}; -use std::time::Duration; - use autd3_core::{ defined::DEFAULT_TIMEOUT, geometry::IntoDevice, @@ -52,23 +50,35 @@ pub struct Controller { } impl Controller { - /// Equivalent to [`Self::open_with_timeout`] with a timeout of [`DEFAULT_TIMEOUT`]. + /// Equivalent to [`Self::open_with_option`] with a timeout of [`DEFAULT_TIMEOUT`]. pub fn open, B: LinkBuilder>( devices: F, link_builder: B, ) -> Result { - Self::open_with_timeout(devices, link_builder, DEFAULT_TIMEOUT) + Self::open_with_option( + devices, + link_builder, + SenderOption:: { + timeout: Some(DEFAULT_TIMEOUT), + ..Default::default() + }, + ) } - /// Opens a controller with a timeout. + /// Opens a controller with a [`SenderOption`]. /// /// Opens link, and then initialize and synchronize the devices. The `timeout` is used to send data for initialization and synchronization. - pub fn open_with_timeout, B: LinkBuilder>( + pub fn open_with_option< + D: IntoDevice, + F: IntoIterator, + B: LinkBuilder, + S: Sleep, + >( devices: F, link_builder: B, - timeout: Duration, + option: SenderOption, ) -> Result { - tracing::debug!("Opening a controller with timeout {:?})", timeout); + tracing::debug!("Opening a controller with option {:?})", option); let devices = devices .into_iter() @@ -83,7 +93,7 @@ impl Controller { rx_buf: vec![RxMessage::new(0, 0); geometry.len()], geometry, } - .open_impl(timeout) + .open_impl(option) } /// Returns the [`Sender`] to send data to the devices. @@ -109,17 +119,15 @@ impl Controller { self.sender(SenderOption::::default()).send(s) } - pub(crate) fn open_impl(mut self, timeout: Duration) -> Result { - let timeout = Some(timeout); + pub(crate) fn open_impl( + mut self, + option: SenderOption, + ) -> Result { + let mut sender = self.sender(option); // If the device is used continuously without powering off, the first data may be ignored because the first msg_id equals to the remaining msg_id in the device. // Therefore, send a meaningless data (here, we use `ForceFan` because it is the lightest). - let _ = self.send(ForceFan::new(|_| false)); - - let mut sender = self.sender(SenderOption:: { - timeout, - ..Default::default() - }); + let _ = sender.send(ForceFan::new(|_| false)); #[cfg(feature = "dynamic_freq")] { @@ -134,7 +142,7 @@ impl Controller { Ok(self) } - fn close_impl(&mut self) -> Result<(), AUTDDriverError> { + fn close_impl(&mut self, option: SenderOption) -> Result<(), AUTDDriverError> { tracing::info!("Closing controller"); if !self.link.is_open() { @@ -143,16 +151,19 @@ impl Controller { } self.geometry.iter_mut().for_each(|dev| dev.enable = true); + + let mut sender = self.sender(option); + [ - self.send(Silencer { + sender.send(Silencer { config: FixedCompletionSteps { strict_mode: false, ..Default::default() }, target: autd3_driver::firmware::fpga::SilencerTarget::Intensity, }), - self.send((Static::default(), Null::default())), - self.send(Clear {}), + sender.send((Static::default(), Null::default())), + sender.send(Clear {}), Ok(self.link.close()?), ] .into_iter() @@ -162,7 +173,7 @@ impl Controller { /// Closes the controller. #[tracing::instrument(level = "debug", skip(self))] pub fn close(mut self) -> Result<(), AUTDDriverError> { - self.close_impl() + self.close_impl(SenderOption::::default()) } fn fetch_firminfo(&mut self, ty: FirmwareVersionType) -> Result, AUTDError> { @@ -278,7 +289,6 @@ impl Controller { /// # Safety /// /// This function must be used only when converting an instance created by [`Controller::into_boxed_link`] back to the original [`Controller`]. - /// pub unsafe fn from_boxed_link(cnt: Controller>) -> Controller { let cnt = std::mem::ManuallyDrop::new(cnt); let link = unsafe { std::ptr::read(&cnt.link) }; @@ -299,7 +309,7 @@ impl Drop for Controller { if !self.link.is_open() { return; } - let _ = self.close_impl(); + let _ = self.close_impl(SenderOption::::default()); } } @@ -471,7 +481,7 @@ pub(crate) mod tests { fn close() -> anyhow::Result<()> { { let mut autd = create_controller(1)?; - autd.close_impl()?; + autd.close_impl(SenderOption::::default())?; autd.close()?; } @@ -557,12 +567,22 @@ pub(crate) mod tests { } #[test] - fn into_boxed_link() -> anyhow::Result<()> { - let autd = create_controller(1)?; + fn into_boxed_link_unsafe() -> anyhow::Result<()> { + let option = SenderOption { + sleeper: StdSleeper { + timer_resolution: None, + }, + ..Default::default() + }; + let autd = Controller::open_with_option( + [AUTD3::default()], + Audit::builder(AuditOption::default()), + option, + )?; let mut autd = autd.into_boxed_link(); - autd.send(( + autd.sender(option).send(( Sine { freq: 150. * Hz, option: Default::default(), @@ -583,7 +603,7 @@ pub(crate) mod tests { }, ))?; // GRCOV_EXCL_LINE - let autd = unsafe { Controller::::from_boxed_link(autd) }; + let mut autd = unsafe { Controller::::from_boxed_link(autd) }; autd.iter().try_for_each(|dev| { assert_eq!( @@ -617,7 +637,7 @@ pub(crate) mod tests { anyhow::Ok(()) })?; - autd.close()?; + autd.close_impl(option)?; Ok(()) } diff --git a/autd3/src/controller/sender/mod.rs b/autd3/src/controller/sender/mod.rs index 3d5c6b04..e5845e1a 100644 --- a/autd3/src/controller/sender/mod.rs +++ b/autd3/src/controller/sender/mod.rs @@ -6,7 +6,10 @@ pub use sleep::WaitableSleeper; pub use sleep::{SpinSleeper, StdSleeper}; pub use spin_sleep::SpinStrategy; -use std::time::{Duration, Instant}; +use std::{ + fmt::Debug, + time::{Duration, Instant}, +}; use autd3_core::{datagram::Datagram, derive::DatagramOption, geometry::Geometry, link::Link}; use autd3_driver::{ @@ -21,7 +24,7 @@ use itertools::Itertools; /// The option of [`Sender`]. #[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct SenderOption { +pub struct SenderOption { /// The duration between sending operations. pub send_interval: Duration, /// The duration between receiving operations. @@ -38,7 +41,7 @@ pub struct SenderOption { pub sleeper: S, } -impl Default for SenderOption { +impl Default for SenderOption { fn default() -> Self { Self { send_interval: Duration::from_millis(1), diff --git a/autd3/src/controller/sender/sleep.rs b/autd3/src/controller/sender/sleep.rs index d3d36236..c58f124e 100644 --- a/autd3/src/controller/sender/sleep.rs +++ b/autd3/src/controller/sender/sleep.rs @@ -3,7 +3,7 @@ use std::time::Instant; use autd3_core::utils::timer::TimerResolutionGurad; pub use spin_sleep::SpinSleeper; -pub trait Sleep { +pub trait Sleep: std::fmt::Debug { fn sleep_until(&self, deadline: Instant); } diff --git a/autd3/src/datagram/gain/group.rs b/autd3/src/datagram/gain/group.rs index 304ef838..136bba3d 100644 --- a/autd3/src/datagram/gain/group.rs +++ b/autd3/src/datagram/gain/group.rs @@ -181,29 +181,36 @@ where let f = &self.f; if geometry.num_devices() > option.parallel_threshold { - gain_map - .par_iter() - .try_for_each(|(k, c)| -> Result<(), GainError> { - geometry.devices().zip(c.iter()).for_each(|(dev, c)| { - let f = (f)(dev); - let r = g[&dev.idx()].as_ptr() as *mut Drive; - dev.iter() - .filter(|tr| f(tr).is_some_and(|kk| &kk == k)) - .for_each(|tr| unsafe { - r.add(tr.idx()).write(c.calc(tr)); - }) - }); - Ok(()) - })?; + macro_rules! par_try_for_each { + ($iter:expr, $f:expr) => { + if cfg!(miri) { + $iter.into_iter().try_for_each($f) + } else { + $iter.into_par_iter().try_for_each($f) + } + }; + } + par_try_for_each!(gain_map, |(k, c)| -> Result<(), GainError> { + geometry.devices().zip(c.iter()).for_each(|(dev, c)| { + let f = (f)(dev); + let r = g[&dev.idx()].as_ptr() as *mut Drive; + dev.iter() + .filter(|tr| f(tr).is_some_and(|kk| kk == k)) + .for_each(|tr| unsafe { + r.add(tr.idx()).write(c.calc(tr)); + }) + }); + Ok(()) + })? } else { gain_map - .iter() + .into_iter() .try_for_each(|(k, c)| -> Result<(), GainError> { geometry.devices().zip(c.iter()).for_each(|(dev, c)| { let f = (f)(dev); let r = g.get_mut(&dev.idx()).unwrap(); dev.iter() - .filter(|tr| f(tr).is_some_and(|kk| &kk == k)) + .filter(|tr| f(tr).is_some_and(|kk| kk == k)) .for_each(|tr| { r[tr.idx()] = c.calc(tr); }) @@ -311,7 +318,7 @@ mod tests { } #[test] - fn with_parallel() -> anyhow::Result<()> { + fn with_parallel_unsafe() -> anyhow::Result<()> { let geometry = create_geometry(5); let mut rng = rand::thread_rng(); diff --git a/autd3/tests/async/link/audit.rs b/autd3/tests/async/link/audit.rs index ee39b8c4..f1557a46 100644 --- a/autd3/tests/async/link/audit.rs +++ b/autd3/tests/async/link/audit.rs @@ -10,10 +10,13 @@ use autd3_driver::firmware::{cpu::RxMessage, fpga::FPGAState}; #[tokio::test] async fn audit_test() -> anyhow::Result<()> { - let mut autd = Controller::open_with_timeout( + let mut autd = Controller::open_with_option( [AUTD3::default()], Audit::builder(AuditOption::default()), - Duration::from_millis(10), + SenderOption:: { + timeout: Some(Duration::from_millis(10)), + ..Default::default() + }, ) .await?; assert_eq!(Some(Duration::from_millis(10)), autd.link().last_timeout()); diff --git a/autd3/tests/sync/link/audit.rs b/autd3/tests/sync/link/audit.rs index e20b9602..290c4e00 100644 --- a/autd3/tests/sync/link/audit.rs +++ b/autd3/tests/sync/link/audit.rs @@ -11,10 +11,13 @@ use spin_sleep::SpinSleeper; #[test] fn audit_test() -> anyhow::Result<()> { - let mut autd = Controller::open_with_timeout( + let mut autd = Controller::open_with_option( [AUTD3::default()], Audit::builder(AuditOption::default()), - Duration::from_millis(10), + SenderOption:: { + timeout: Some(Duration::from_millis(10)), + ..Default::default() + }, )?; assert_eq!(Some(Duration::from_millis(10)), autd.link().last_timeout()); assert_eq!(Some(usize::MAX), autd.link().last_parallel_threshold());