Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![feature(test)]
- extern crate test;
- use std::time::{Instant, Duration};
- use test::black_box;
- pub fn iterate() -> u32 {
- #[inline(never)]
- fn inner() -> u32 {
- let divisor: f32 = black_box(5.25);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32);
- black_box(black_box(25.0 / divisor).round() as u32)
- }
- black_box(inner());
- black_box(inner());
- inner()
- }
- pub fn main() {
- const PERIOD: Duration = Duration::from_nanos(558);
- let start = Instant::now();
- let mut cycles: u32 = 0;
- let mut offset = Duration::from_nanos(0);
- let mut missed = 0;
- loop {
- cycles += iterate();
- if cycles >= 5000000 { break; }
- let target = start + offset + (PERIOD * cycles);
- let mut now = Instant::now();
- if now < target {
- while now < target {
- now = Instant::now();
- }
- } else {
- offset += now - target;
- missed += 1;
- }
- }
- println!("{}", missed);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement