| #![feature(test)] |
| |
| extern crate pulldown_cmark; |
| extern crate test; |
| |
| mod to_html { |
| use pulldown_cmark::{html, Options, Parser}; |
| |
| fn render_html(text: &str, opts: Options) -> String { |
| let mut s = String::with_capacity(text.len() * 3 / 2); |
| let p = Parser::new_ext(text, opts); |
| html::push_html(&mut s, p); |
| s |
| } |
| |
| #[bench] |
| fn pathological_codeblocks1(b: &mut test::Bencher) { |
| // Note that `buf` grows quadratically with number of |
| // iterations. The point here is that the render time shouldn't |
| // grow faster than that. |
| let mut buf = String::new(); |
| for i in 1..1000 { |
| for _ in 0..i { |
| buf.push('`'); |
| } |
| buf.push(' '); |
| } |
| |
| b.iter(|| render_html(&buf, Options::empty())); |
| } |
| |
| #[bench] |
| fn advanced_pathological_codeblocks(b: &mut test::Bencher) { |
| let mut buf = String::new(); |
| let mut i = 1; |
| while buf.len() < 1250 { |
| for _ in 0..i { |
| buf.push('`'); |
| } |
| buf.push(' '); |
| i += 1; |
| } |
| for _ in 0..buf.len() { |
| buf.push_str("*a* "); |
| } |
| |
| b.iter(|| render_html(&buf, Options::empty())); |
| } |
| } |