85 lines
1.8 KiB
Rust
85 lines
1.8 KiB
Rust
#![feature(test)]
|
|
|
|
extern crate test;
|
|
extern crate rustc_serialize;
|
|
|
|
use std::string;
|
|
use rustc_serialize::json::{Json, Parser};
|
|
use test::Bencher;
|
|
|
|
#[bench]
|
|
fn bench_streaming_small(b: &mut Bencher) {
|
|
b.iter( || {
|
|
let mut parser = Parser::new(
|
|
r#"{
|
|
"a": 1.0,
|
|
"b": [
|
|
true,
|
|
"foo\nbar",
|
|
{ "c": {"d": null} }
|
|
]
|
|
}"#.chars()
|
|
);
|
|
loop {
|
|
match parser.next() {
|
|
None => return,
|
|
_ => {}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
#[bench]
|
|
fn bench_small(b: &mut Bencher) {
|
|
b.iter( || {
|
|
let _ = Json::from_str(r#"{
|
|
"a": 1.0,
|
|
"b": [
|
|
true,
|
|
"foo\nbar",
|
|
{ "c": {"d": null} }
|
|
]
|
|
}"#);
|
|
});
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_decode_hex_escape(b: &mut Bencher) {
|
|
let mut src = "\"".to_string();
|
|
for _ in 0..10 {
|
|
src.push_str("\\uF975\\uf9bc\\uF9A0\\uF9C4\\uF975\\uf9bc\\uF9A0\\uF9C4");
|
|
}
|
|
src.push_str("\"");
|
|
b.iter( || {
|
|
let _ = Json::from_str(&src);
|
|
});
|
|
}
|
|
|
|
fn big_json() -> string::String {
|
|
let mut src = "[\n".to_string();
|
|
for _ in 0..500 {
|
|
src.push_str(r#"{ "a": true, "b": null, "c":3.1415, "d": "Hello world", "e": \
|
|
[1,2,3]},"#);
|
|
}
|
|
src.push_str("{}]");
|
|
return src;
|
|
}
|
|
|
|
#[bench]
|
|
fn bench_streaming_large(b: &mut Bencher) {
|
|
let src = big_json();
|
|
b.iter( || {
|
|
let mut parser = Parser::new(src.chars());
|
|
loop {
|
|
match parser.next() {
|
|
None => return,
|
|
_ => {}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
#[bench]
|
|
fn bench_large(b: &mut Bencher) {
|
|
let src = big_json();
|
|
b.iter( || { let _ = Json::from_str(&src); });
|
|
}
|