updated tests for rlp and indention in benches

This commit is contained in:
debris 2015-11-28 10:50:41 +01:00
parent 111fc70d0b
commit 07f3e6d5a5
2 changed files with 112 additions and 74 deletions

View File

@ -1,7 +1,7 @@
//! benchmarking for rlp //! benchmarking for rlp
//! should be started with: //! should be started with:
//! ```bash //! ```bash
//! multirust run nightly cargo bench //! multirust run nightly cargo bench
//! ``` //! ```
#![feature(test)] #![feature(test)]
@ -16,80 +16,81 @@ use ethcore_util::uint::U256;
#[bench] #[bench]
fn bench_stream_u64_value(b: &mut Bencher) { fn bench_stream_u64_value(b: &mut Bencher) {
b.iter( || { b.iter(|| {
//1029 // u64
let mut stream = RlpStream::new(); let mut stream = RlpStream::new();
stream.append(&0x1023456789abcdefu64); stream.append(&0x1023456789abcdefu64);
let _ = stream.out().unwrap(); let _ = stream.out().unwrap();
}); });
} }
#[bench] #[bench]
fn bench_decode_u64_value(b: &mut Bencher) { fn bench_decode_u64_value(b: &mut Bencher) {
b.iter( || { b.iter(|| {
// 1029 // u64
let data = vec![0x88, 0x10, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]; let data = vec![0x88, 0x10, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef];
let rlp = Rlp::new(&data); let rlp = Rlp::new(&data);
let _ = u64::decode(&rlp).unwrap(); let _ = u64::decode(&rlp).unwrap();
}); });
} }
#[bench] #[bench]
fn bench_stream_u256_value(b: &mut Bencher) { fn bench_stream_u256_value(b: &mut Bencher) {
b.iter( || { b.iter(|| {
//u256 // u256
let mut stream = RlpStream::new(); let mut stream = RlpStream::new();
stream.append(&U256::from_str("8090a0b0c0d0e0f00910203040506077000000000000000100000000000012f0").unwrap()); stream.append(&U256::from_str("8090a0b0c0d0e0f009102030405060770000000000000001000000000\
let _ = stream.out().unwrap(); 00012f0")
}); .unwrap());
let _ = stream.out().unwrap();
});
} }
#[bench] #[bench]
fn bench_decode_u256_value(b: &mut Bencher) { fn bench_decode_u256_value(b: &mut Bencher) {
b.iter( || { b.iter(|| {
// u256 // u256
let data = vec![0xa0, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, let data = vec![0xa0, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x09, 0x10, 0x20,
0x09, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x77, 0x30, 0x40, 0x50, 0x60, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xf0];
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xf0]; let rlp = Rlp::new(&data);
let rlp = Rlp::new(&data); let _ = U256::decode(&rlp).unwrap();
let _ = U256::decode(&rlp).unwrap(); });
});
} }
#[bench] #[bench]
fn bench_stream_nested_empty_lists(b: &mut Bencher) { fn bench_stream_nested_empty_lists(b: &mut Bencher) {
b.iter( || { b.iter(|| {
// [ [], [[]], [ [], [[]] ] ] // [ [], [[]], [ [], [[]] ] ]
let mut stream = RlpStream::new_list(3); let mut stream = RlpStream::new_list(3);
stream.append_list(0); stream.append_list(0);
stream.append_list(1).append_list(0); stream.append_list(1).append_list(0);
stream.append_list(2).append_list(0).append_list(1).append_list(0); stream.append_list(2).append_list(0).append_list(1).append_list(0);
let _ = stream.out().unwrap(); let _ = stream.out().unwrap();
}); });
} }
#[bench] #[bench]
fn bench_decode_nested_empty_lists(b: &mut Bencher) { fn bench_decode_nested_empty_lists(b: &mut Bencher) {
b.iter( || { b.iter(|| {
// [ [], [[]], [ [], [[]] ] ] // [ [], [[]], [ [], [[]] ] ]
let data = vec![0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0]; let data = vec![0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0];
let rlp = Rlp::new(&data); let rlp = Rlp::new(&data);
let _v0: Vec<u8> = Decodable::decode(&rlp.at(0).unwrap()).unwrap(); let _v0: Vec<u8> = Decodable::decode(&rlp.at(0).unwrap()).unwrap();
let _v1: Vec<Vec<u8>> = Decodable::decode(&rlp.at(1).unwrap()).unwrap(); let _v1: Vec<Vec<u8>> = Decodable::decode(&rlp.at(1).unwrap()).unwrap();
let nested_rlp = rlp.at(2).unwrap(); let nested_rlp = rlp.at(2).unwrap();
let _v2a: Vec<u8> = Decodable::decode(&nested_rlp.at(0).unwrap()).unwrap(); let _v2a: Vec<u8> = Decodable::decode(&nested_rlp.at(0).unwrap()).unwrap();
let _v2b: Vec<Vec<u8>> = Decodable::decode(&nested_rlp.at(1).unwrap()).unwrap(); let _v2b: Vec<Vec<u8>> = Decodable::decode(&nested_rlp.at(1).unwrap()).unwrap();
}); });
} }
#[bench] #[bench]
fn bench_stream_1000_empty_lists(b: &mut Bencher) { fn bench_stream_1000_empty_lists(b: &mut Bencher) {
b.iter( || { b.iter(|| {
let mut stream = RlpStream::new_list(1000); let mut stream = RlpStream::new_list(1000);
for _ in 0..1000 { for _ in 0..1000 {
stream.append_list(0); stream.append_list(0);
} }
let _ = stream.out().unwrap(); let _ = stream.out().unwrap();
}); });
} }

View File

@ -7,38 +7,75 @@
//! //!
//! ```rust //! ```rust
//! extern crate ethcore_util; //! extern crate ethcore_util;
//! use ethcore_util::rlp::{RlpStream}; //! use ethcore_util::rlp::{Rlp, RlpStream, Decodable};
//! //!
//! fn encode_value() { //! fn encode_value() {
//! // 1029 //! // 1029
//! let mut stream = RlpStream::new(); //! let mut stream = RlpStream::new();
//! stream.append(&1029u32); //! stream.append(&1029u32);
//! let out = stream.out().unwrap(); //! let out = stream.out().unwrap();
//! assert_eq!(out, vec![0x82, 0x04, 0x05]); //! assert_eq!(out, vec![0x82, 0x04, 0x05]);
//! } //! }
//! //!
//! fn encode_list() { //! fn encode_list() {
//! // [ "cat", "dog" ] //! // [ "cat", "dog" ]
//! let mut stream = RlpStream::new_list(2); //! let mut stream = RlpStream::new_list(2);
//! stream.append(&"cat").append(&"dog"); //! stream.append(&"cat").append(&"dog");
//! let out = stream.out().unwrap(); //! let out = stream.out().unwrap();
//! assert_eq!(out, vec![0xc8, 0x83, b'c', b'a', b't', 0x83, b'd', b'o', b'g']); //! assert_eq!(out, vec![0xc8, 0x83, b'c', b'a', b't', 0x83, b'd', b'o', b'g']);
//! } //! }
//! //!
//! fn encode_list2() { //! fn encode_list2() {
//! // [ [], [[]], [ [], [[]] ] ] //! // [ [], [[]], [ [], [[]] ] ]
//! let mut stream = RlpStream::new_list(3); //! let mut stream = RlpStream::new_list(3);
//! stream.append_list(0); //! stream.append_list(0);
//! stream.append_list(1).append_list(0); //! stream.append_list(1).append_list(0);
//! stream.append_list(2).append_list(0).append_list(1).append_list(0); //! stream.append_list(2).append_list(0).append_list(1).append_list(0);
//! let out = stream.out().unwrap(); //! let out = stream.out().unwrap();
//! assert_eq!(out, vec![0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0]); //! assert_eq!(out, vec![0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0]);
//! }
//!
//! fn decode_value() {
//! // 0x102456789abcdef
//! let data = vec![0x88, 0x10, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef];
//! let rlp = Rlp::new(&data);
//! let _ = u64::decode(&rlp).unwrap();
//! }
//!
//! fn decode_string() {
//! // "cat"
//! let data = vec![0x83, b'c', b'a', b't'];
//! let rlp = Rlp::new(&data);
//! let _ = String::decode(&rlp).unwrap();
//! }
//!
//! fn decode_list() {
//! // ["cat", "dog"]
//! let data = vec![0xc8, 0x83, b'c', b'a', b't', 0x83, b'd', b'o', b'g'];
//! let rlp = Rlp::new(&data);
//! let _ : Vec<String> = Decodable::decode(&rlp).unwrap();
//! }
//!
//! fn decode_list2() {
//! // [ [], [[]], [ [], [[]] ] ]
//! let data = vec![0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0];
//! let rlp = Rlp::new(&data);
//! let _v0: Vec<u8> = Decodable::decode(&rlp.at(0).unwrap()).unwrap();
//! let _v1: Vec<Vec<u8>> = Decodable::decode(&rlp.at(1).unwrap()).unwrap();
//! let nested_rlp = rlp.at(2).unwrap();
//! let _v2a: Vec<u8> = Decodable::decode(&nested_rlp.at(0).unwrap()).unwrap();
//! let _v2b: Vec<Vec<u8>> = Decodable::decode(&nested_rlp.at(1).unwrap()).unwrap();
//! } //! }
//! //!
//! fn main() { //! fn main() {
//! encode_value(); //! encode_value();
//! encode_list(); //! encode_list();
//! encode_list2(); //! encode_list2();
//!
//! decode_value();
//! decode_string();
//! decode_list();
//! decode_list2();
//! } //! }
//! ``` //! ```
//! //!