diff --git a/arrow/benches/array_from_vec.rs b/arrow/benches/array_from_vec.rs index ab39a3fb845..59bef65a18c 100644 --- a/arrow/benches/array_from_vec.rs +++ b/arrow/benches/array_from_vec.rs @@ -87,20 +87,11 @@ fn decimal128_array_from_vec(array: &[Option]) { ); } -fn decimal256_array_from_vec() { - // bench decimal256array - // create option> array - let size = 1 << 10; - let mut array = vec![]; - let mut rng = rand::thread_rng(); - for _ in 0..size { - let decimal = - Decimal256::from(BigInt::from(rng.gen_range::(0..9999999999999))); - array.push(Some(decimal)); - } +fn decimal256_array_from_vec(array: &[Option]) { criterion::black_box( array - .into_iter() + .iter() + .copied() .collect::() .with_precision_and_scale(70, 2) .unwrap(), @@ -120,9 +111,20 @@ fn decimal_benchmark(c: &mut Criterion) { b.iter(|| decimal128_array_from_vec(array.as_slice())) }); + // bench decimal256array + // create option> array + let size = 1 << 10; + let mut array = vec![]; + let mut rng = rand::thread_rng(); + for _ in 0..size { + let decimal = + Decimal256::from(BigInt::from(rng.gen_range::(0..9999999999999))); + array.push(Some(decimal)); + } + // bench decimal256 array c.bench_function("decimal256_array_from_vec 32768", |b| { - b.iter(|| decimal256_array_from_vec) + b.iter(|| decimal256_array_from_vec(array.as_slice())) }); } diff --git a/arrow/src/util/decimal.rs b/arrow/src/util/decimal.rs index 043e37ddb9e..2e5cddc876d 100644 --- a/arrow/src/util/decimal.rs +++ b/arrow/src/util/decimal.rs @@ -26,7 +26,7 @@ use num::bigint::BigInt; use num::Signed; use std::cmp::{min, Ordering}; -#[derive(Debug)] +#[derive(Debug, Clone, Copy)] pub struct BasicDecimal { precision: usize, scale: usize, @@ -247,7 +247,7 @@ impl Decimal256 { } /// Constructs a `BigInt` from this `Decimal256` value. - pub(crate) fn to_big_int(&self) -> BigInt { + pub(crate) fn to_big_int(self) -> BigInt { BigInt::from_signed_bytes_le(&self.value) } }