use std::str; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::Arc; use std::thread;
#[test] fn test_exhaustive() { const BATCH_SIZE: u32 = 1_000_000; let counter = Arc::new(AtomicUsize::new(0)); let finished = Arc::new(AtomicUsize::new(0));
letmut workers = Vec::new(); for _ in0..num_cpus::get() { let counter = counter.clone(); let finished = finished.clone();
workers.push(thread::spawn(move || loop { let batch = counter.fetch_add(1, Ordering::Relaxed) as u32; if batch > u32::max_value() / BATCH_SIZE { return;
}
let min = batch * BATCH_SIZE; let max = if batch == u32::max_value() / BATCH_SIZE {
u32::max_value()
} else {
min + BATCH_SIZE - 1
};
letmut bytes = [0u8; 24]; letmut buffer = ryu::Buffer::new(); for u in min..=max { let f = f32::from_bits(u); if !f.is_finite() { continue;
} let n = unsafe { ryu::raw::format32(f, &mut bytes[0]) };
assert_eq!(Ok(Ok(f)), str::from_utf8(&bytes[..n]).map(str::parse));
assert_eq!(Ok(f), buffer.format_finite(f).parse());
}
let increment = (max - min + 1) as usize; let update = finished.fetch_add(increment, Ordering::Relaxed);
println!("{}", update + increment);
}));
}
for w in workers {
w.join().unwrap();
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-20)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.