Commit 23a292df authored by Stanislav Tkach's avatar Stanislav Tkach Committed by Bastian Köcher
Browse files

Update byte-slice-cast version and add bitvec benches (#95)

parent ca696fdc
Pipeline #40067 passed with stages
in 26 minutes and 6 seconds
......@@ -35,7 +35,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "byte-slice-cast"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
......@@ -235,7 +235,7 @@ version = "1.0.0"
dependencies = [
"arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
"bitvec 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-slice-cast 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-slice-cast 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"criterion 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-scale-codec-derive 1.0.0",
"serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)",
......@@ -495,7 +495,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf"
"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
"checksum bitvec 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c28d4291b516ccfbb897d45de3c468c135e6af7c4f1f1aacfaae0a5bc2e6ea2c"
"checksum byte-slice-cast 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d6eec63fe0fb4f9f0f8011d32ab1586c123f1248c930a35237ff4ef08beaf1"
"checksum byte-slice-cast 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6cb79b824ad8026dfaf918b0f3f072a6faf916fe843aff07321a738babfd575"
"checksum byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a019b10a2a7cdeb292db131fc8113e57ea2a908f6e7894b0c3c671893b65dbeb"
"checksum cast 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "926013f2860c46252efceabb19f4a6b308197505082c609025aa6706c011d427"
"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
......
......@@ -13,12 +13,13 @@ arrayvec = { version = "0.4", default-features = false, features = ["array-sizes
serde = { version = "1.0", optional = true }
parity-scale-codec-derive = { path = "derive", version = "1.0", default-features = false, optional = true }
bitvec = { version = "0.11", default-features = false, features = ["alloc"], optional = true }
byte-slice-cast = { version = "0.3", optional = true }
byte-slice-cast = { version = "0.3.1", optional = true }
[dev-dependencies]
serde_derive = { version = "1.0" }
parity-scale-codec-derive = { path = "derive", version = "1.0", default-features = false }
criterion = "0.2"
bitvec = "0.11"
[[bench]]
name = "benches"
......
......@@ -16,6 +16,7 @@ use parity_scale_codec::*;
use parity_scale_codec_derive::{Encode, Decode};
use criterion::{Criterion, black_box, Bencher, criterion_group, criterion_main};
use bitvec::vec::BitVec;
use std::time::Duration;
......@@ -91,7 +92,7 @@ fn vec_append_with_encode_append(b: &mut Bencher) {
encoded_events_vec = events.encode();
for _ in 1..1000 {
encoded_events_vec = <Vec::<Event> as EncodeAppend>::append(
encoded_events_vec = <Vec<Event> as EncodeAppend>::append(
encoded_events_vec,
&[Event::ComplexEvent(data.to_vec(), 4, 5, 6, 9)],
).unwrap();
......@@ -134,9 +135,39 @@ fn bench_fn(c: &mut Criterion) {
c.bench_function("array_vec_write_u128", array_vec_write_u128);
}
fn encode_decode_bitvec_u8(c: &mut Criterion) {
c.bench_function_over_inputs("bitvec_u8_encode - BitVec<u8>", |b, &size| {
let vec: BitVec = [true, false]
.iter()
.cloned()
.cycle()
.take(size)
.collect();
let vec = black_box(vec);
b.iter(|| vec.encode())
}, vec![1, 2, 5, 32, 1024]);
c.bench_function_over_inputs("bitvec_u8_decode - BitVec<u8>", |b, &size| {
let vec: BitVec = [true, false]
.iter()
.cloned()
.cycle()
.take(size)
.collect();
let vec = vec.encode();
let vec = black_box(vec);
b.iter(|| {
let _: BitVec = Decode::decode(&mut &vec[..]).unwrap();
})
}, vec![1, 2, 5, 32, 1024]);
}
criterion_group!{
name = benches;
config = Criterion::default().warm_up_time(Duration::from_millis(500)).without_plots();
targets = encode_decode_vec_u8, bench_fn
targets = encode_decode_vec_u8, bench_fn, encode_decode_bitvec_u8
}
criterion_main!(benches);
......@@ -53,14 +53,10 @@ impl<C: Cursor, T: Bits + FromByteSlice> Decode for BitVec<C, T> {
let mut vec = vec![0; required_bytes::<T>(bits)];
input.read(&mut vec)?;
Ok(if vec.is_empty() {
Self::new()
} else {
let mut result = Self::from_slice(T::from_byte_slice(&vec)?);
assert!(bits <= result.len());
unsafe { result.set_len(bits); }
result
})
let mut result = Self::from_slice(T::from_byte_slice(&vec)?);
assert!(bits <= result.len());
unsafe { result.set_len(bits); }
Ok(result)
})
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment