#![feature(test)]
extern crate test;
extern crate marksman_escape;
use test::Bencher;
use marksman_escape::{Unescape, get_named_ref};
use std::str::StrExt;
static NO_ESCAPES : &'static str = r##"abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabcdefa
fabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdeffabcdefabcdefabcdefabcdefabcdefabcdefabc"##;
#[bench]
fn unescape_no_spec(b: &mut Bencher){
b.bytes = NO_ESCAPES.len() as u64;
b.iter(||{
for _ in Unescape::new(NO_ESCAPES.bytes()) {}
});
}
static ALL_ESCAPES_NAMED : &'static str = r##"<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&
<>&<>&<>&<>&<>&<>&<>&<>&"##;
#[bench]
fn unescape_spec_named(b: &mut Bencher){
b.bytes = ALL_ESCAPES_NAMED.len() as u64;
b.iter(||{
for _ in Unescape::new(ALL_ESCAPES_NAMED.bytes()) {}
});
}
static ALL_ESCAPES_NUM : &'static str = r##"[]{}[]{}[]
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{}
[]{}[]{}[][]{}[]{"##;
#[bench]
fn unescape_spec_num(b: &mut Bencher){
b.bytes = ALL_ESCAPES_NUM.len() as u64;
b.iter(||{
for _ in Unescape::new(ALL_ESCAPES_NUM.bytes()) {}
});
}
static ALL_ESCAPES_HEX : &'static str = r##"[]{d;[]{d;[
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{d;
[]{d;[]{d;[[]{d;[]{"##;
#[bench]
fn unescape_spec_hex(b: &mut Bencher){
b.bytes = ALL_ESCAPES_HEX.len() as u64;
b.iter(||{
for _ in Unescape::new(ALL_ESCAPES_HEX.bytes()) {}
});
}
#[bench]
fn named_ref_various(b: &mut Bencher){
b.iter(||{
get_named_ref(b"amp;").unwrap();
get_named_ref(b"lt;").unwrap();
get_named_ref(b"gt;").unwrap();
get_named_ref(b"zwj;").unwrap();
get_named_ref(b"ZeroWidthSpace;").unwrap();
get_named_ref(b"Yacute;").unwrap();
});
}
#[bench]
fn named_ref_simple_common(b: &mut Bencher){
b.iter(||{
get_named_ref(b"amp;").unwrap();
get_named_ref(b"lt;").unwrap();
get_named_ref(b"gt;").unwrap();
get_named_ref(b"amp;").unwrap();
get_named_ref(b"lt;").unwrap();
get_named_ref(b"gt;").unwrap();
});
}
#[bench]
fn named_ref_rare(b: &mut Bencher){
b.iter(||{
get_named_ref(b"zwj;").unwrap();
get_named_ref(b"ZeroWidthSpace;").unwrap();
get_named_ref(b"Yacute;").unwrap();
get_named_ref(b"zwj;").unwrap();
get_named_ref(b"ZeroWidthSpace;").unwrap();
get_named_ref(b"Yacute;").unwrap();
});
}