// Comparisons between Rust built-ins and memchr. // // Copyright (C) 2014-2023 Ryan Specialty, LLC. // // This file is part of TAME. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #![feature(test)] extern crate tamer; extern crate test; use tamer::iter::into_iter_while_ok; use test::Bencher; mod trip { use super::*; #[bench] fn baseline_map_while(bench: &mut Bencher) { let mut data = (0..100).map(Ok).collect::>(); data.push(Err("trip")); bench.iter(|| { data.clone() .into_iter() .map_while(Result::ok) .for_each(drop); }); } // Note that these aren't comparable feature-wise, since the above // doesn't give us access to the underlying iterator. This is just to // ensure that performance is at least pretty close, despite it doing a // little more work. (And it is.) #[bench] fn trip_iter(bench: &mut Bencher) { let mut data = (0..100).map(Ok).collect::>(); data.push(Err("trip")); bench.iter(|| { into_iter_while_ok(data.clone(), |iter| { iter.for_each(drop); Result::<_, &str>::Ok(()) }) }); } }