#![feature(test)] extern crate openat; extern crate test; use std::fs::read_dir; use std::os::unix::ffi::OsStrExt; use std::str::from_utf8; use test::Bencher; use openat::Dir; #[bench] fn procs_stdlib(b: &mut Bencher) { b.iter(|| { read_dir("/proc") .unwrap() .filter(|r| { r.as_ref() .ok() .and_then(|e| { from_utf8(e.file_name().as_bytes()) .ok() // pid is everything that can be parsed as a number .and_then(|s| s.parse::().ok()) }) .is_some() }) .count() }); } #[bench] fn procs_openat(b: &mut Bencher) { b.iter(|| { Dir::open("/proc") .unwrap() .list_dir(".") .unwrap() .filter(|r| { r.as_ref() .ok() .and_then(|e| { from_utf8(e.file_name().as_bytes()) .ok() // pid is everything that can be parsed as a number .and_then(|s| s.parse::().ok()) }) .is_some() }) .count() }); }