Mercurial > lbo > hg > rcombinators
changeset 15:36e01274a263
primitives: Benchmark for integer parsing.
author | Lewin Bormann <lewin@lewin-bormann.info> |
---|---|
date | Mon, 03 Jun 2019 23:14:25 +0200 |
parents | 4122b5f7562b |
children | 9ad913fdbef1 |
files | Cargo.toml src/lib.rs src/primitives.rs |
diffstat | 3 files changed, 43 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/Cargo.toml Mon Jun 03 23:14:01 2019 +0200 +++ b/Cargo.toml Mon Jun 03 23:14:25 2019 +0200 @@ -7,4 +7,5 @@ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -utf8reader = "0.1.0" +time-test = "0.2" +utf8reader = "0.1"
--- a/src/lib.rs Mon Jun 03 23:14:01 2019 +0200 +++ b/src/lib.rs Mon Jun 03 23:14:25 2019 +0200 @@ -1,5 +1,8 @@ #![allow(dead_code)] +#[macro_use] +extern crate time_test; + mod combinators; mod parser; mod primitives;
--- a/src/primitives.rs Mon Jun 03 23:14:01 2019 +0200 +++ b/src/primitives.rs Mon Jun 03 23:14:25 2019 +0200 @@ -206,6 +206,7 @@ #[cfg(test)] mod tests { use super::*; + use crate::combinators::Sequence; #[test] fn test_parse_string() { @@ -217,7 +218,7 @@ #[test] fn test_parse_int() { - let mut s = ParseState::new("-1252 353 354 -1253"); + let mut s = ParseState::new("-1252 353 354 -1253 422345"); let mut ip = Int64::new(); let mut up = Uint64::new(); let mut sp = StringParser::new(" ".to_string()); @@ -228,6 +229,9 @@ assert_eq!(Ok(354), up.parse(&mut s)); assert_eq!(Ok(" ".to_string()), sp.parse(&mut s)); assert!(up.parse(&mut s).is_err()); + assert_eq!(Ok(-1253), ip.parse(&mut s)); + assert_eq!(Ok(" ".to_string()), sp.parse(&mut s)); + assert_eq!(Ok(422345), up.parse(&mut s)); } #[test] @@ -250,4 +254,37 @@ let mut p = string_none_of("xyz", RepeatSpec::Min(1)); assert_eq!(Ok("aaabc".to_string()), p.parse(&mut st)); } + + use std::iter; + + #[test] + fn bench_integer_medium() { + let piece = "-422345 "; + let repeats = 1000; + let mut input = String::with_capacity(piece.len() * repeats); + input.extend(iter::repeat(piece).take(repeats)); + let mut ps = ParseState::new(&input); + let mut p = Sequence::new((Int64::new(), StringParser::new(" "))); + { + time_test!("parse-int with static buffer"); + for i in 0..1000 { + let h = ps.hold(); + let r = p.parse(&mut ps); + ps.reset(h); + } + } + + let piece = "-42234511 "; + let mut input = String::with_capacity(piece.len() * repeats); + input.extend(iter::repeat(piece).take(repeats)); + let mut ps = ParseState::new(&input); + { + time_test!("parse-int with dynamic buffer"); + for i in 0..1000 { + let h = ps.hold(); + let r = p.parse(&mut ps); + ps.reset(h); + } + } + } }