Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion rust/arrow/benches/aggregate_kernels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ extern crate arrow;

use arrow::array::*;
use arrow::compute::kernels::aggregate::*;
use arrow::util::test_util::seedable_rng;

fn create_array(size: usize, with_nulls: bool) -> ArrayRef {
// use random numbers to avoid spurious compiler optimizations wrt to branching
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let mut builder = Float32Builder::new(size);

for _ in 0..size {
Expand Down
3 changes: 2 additions & 1 deletion rust/arrow/benches/arithmetic_kernels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ extern crate arrow;
use arrow::array::*;
use arrow::compute::kernels::arithmetic::*;
use arrow::compute::kernels::limit::*;
use arrow::util::test_util::seedable_rng;

fn create_array(size: usize, with_nulls: bool) -> ArrayRef {
// use random numbers to avoid spurious compiler optimizations wrt to branching
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let mut builder = Float32Builder::new(size);

for _ in 0..size {
Expand Down
5 changes: 3 additions & 2 deletions rust/arrow/benches/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ use std::mem::size_of;

use criterion::*;
use rand::distributions::Standard;
use rand::{thread_rng, Rng};

use arrow::array::*;
use arrow::util::test_util::seedable_rng;
use rand::Rng;

// Build arrays with 512k elements.
const BATCH_SIZE: usize = 8 << 10;
Expand All @@ -51,7 +52,7 @@ fn bench_primitive(c: &mut Criterion) {
}

fn bench_bool(c: &mut Criterion) {
let data: Vec<bool> = thread_rng()
let data: Vec<bool> = seedable_rng()
.sample_iter(&Standard)
.take(BATCH_SIZE)
.collect();
Expand Down
7 changes: 4 additions & 3 deletions rust/arrow/benches/equal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,18 @@ use std::sync::Arc;
extern crate arrow;

use arrow::array::*;
use arrow::util::test_util::seedable_rng;

fn create_string_array(size: usize, with_nulls: bool) -> ArrayRef {
// use random numbers to avoid spurious compiler optimizations wrt to branching
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let mut builder = StringBuilder::new(size);

for _ in 0..size {
if with_nulls && rng.gen::<f32>() > 0.5 {
builder.append_null().unwrap();
} else {
let string = rand::thread_rng()
let string = seedable_rng()
.sample_iter(&Alphanumeric)
.take(10)
.collect::<String>();
Expand All @@ -48,7 +49,7 @@ fn create_string_array(size: usize, with_nulls: bool) -> ArrayRef {

fn create_array(size: usize, with_nulls: bool) -> ArrayRef {
// use random numbers to avoid spurious compiler optimizations wrt to branching
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let mut builder = Float32Builder::new(size);

for _ in 0..size {
Expand Down
3 changes: 2 additions & 1 deletion rust/arrow/benches/sort_kernel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ extern crate arrow;

use arrow::array::*;
use arrow::compute::kernels::sort::{lexsort, SortColumn};
use arrow::util::test_util::seedable_rng;

fn create_array(size: usize, with_nulls: bool) -> ArrayRef {
// use random numbers to avoid spurious compiler optimizations wrt to branching
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let mut builder = Float32Builder::new(size);

for _ in 0..size {
Expand Down
5 changes: 3 additions & 2 deletions rust/arrow/benches/take_kernels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ extern crate arrow;
use arrow::array::*;
use arrow::compute::{cast, take};
use arrow::datatypes::*;
use arrow::util::test_util::seedable_rng;

// cast array from specified primitive array type to desired data type
fn create_numeric<T>(size: usize) -> ArrayRef
Expand All @@ -44,7 +45,7 @@ where
fn create_strings(size: usize) -> ArrayRef {
let v = (0..size)
.map(|_| {
rand::thread_rng()
seedable_rng()
.sample_iter(&Alphanumeric)
.take(5)
.collect::<String>()
Expand All @@ -57,7 +58,7 @@ fn create_strings(size: usize) -> ArrayRef {
}

fn create_random_index(size: usize) -> UInt32Array {
let mut rng = rand::thread_rng();
let mut rng = seedable_rng();
let ints = Int32Array::from(vec![rng.gen_range(-24i32, size as i32); size]);
// cast to u32, conveniently marking negative values as nulls
UInt32Array::from(
Expand Down
13 changes: 7 additions & 6 deletions rust/arrow/src/util/bit_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,11 @@ where

#[cfg(test)]
mod tests {
use rand::{thread_rng, Rng};
use std::collections::HashSet;

use super::*;
use crate::util::test_util::seedable_rng;
use rand::Rng;

#[test]
fn test_round_upto_multiple_of_64() {
Expand Down Expand Up @@ -246,7 +247,7 @@ mod tests {
const NUM_BYTE: usize = 10;
let mut buf = vec![0; NUM_BYTE];
let mut expected = vec![];
let mut rng = thread_rng();
let mut rng = seedable_rng();
for i in 0..8 * NUM_BYTE {
let b = rng.gen_bool(0.5);
expected.push(b);
Expand Down Expand Up @@ -290,7 +291,7 @@ mod tests {
const NUM_BYTE: usize = 10;
let mut buf = vec![0; NUM_BYTE];
let mut expected = vec![];
let mut rng = thread_rng();
let mut rng = seedable_rng();
for i in 0..8 * NUM_BYTE {
let b = rng.gen_bool(0.5);
expected.push(b);
Expand All @@ -314,7 +315,7 @@ mod tests {
const NUM_BYTE: usize = 10;
let mut buf = vec![255; NUM_BYTE];
let mut expected = vec![];
let mut rng = thread_rng();
let mut rng = seedable_rng();
for i in 0..8 * NUM_BYTE {
let b = rng.gen_bool(0.5);
expected.push(b);
Expand Down Expand Up @@ -343,7 +344,7 @@ mod tests {
let mut expected = Vec::with_capacity(NUM_BYTE * 8);
expected.resize(NUM_BYTE * 8, false);

let mut rng = thread_rng();
let mut rng = seedable_rng();

for _ in 0..NUM_BLOCKS {
let start = rng.gen_range(0, NUM_BYTE * 8 - MAX_BLOCK_SIZE);
Expand Down Expand Up @@ -371,7 +372,7 @@ mod tests {

let mut buffer: [u8; NUM_BYTES * 8] = [0; NUM_BYTES * 8];
let mut v = HashSet::new();
let mut rng = thread_rng();
let mut rng = seedable_rng();
for _ in 0..NUM_SETS {
let offset = rng.gen_range(0, 8 * NUM_BYTES);
v.insert(offset);
Expand Down
9 changes: 7 additions & 2 deletions rust/arrow/src/util/test_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@

//! Utils to make testing easier

use rand::{thread_rng, Rng};
use rand::{rngs::StdRng, Rng, SeedableRng};
use std::{env, fs, io::Write};

/// Returns a vector of size `n`, filled with randomly generated bytes.
pub fn random_bytes(n: usize) -> Vec<u8> {
let mut result = vec![];
let mut rng = thread_rng();
let mut rng = seedable_rng();
for _ in 0..n {
result.push(rng.gen_range(0, 255));
}
result
}

/// Returns fixed seedable RNG
pub fn seedable_rng() -> StdRng {
StdRng::seed_from_u64(42)
}

/// Returns file handle for a temp file in 'target' directory with a provided content
///
/// TODO: Originates from `parquet` utils, can be merged in [ARROW-4064]
Expand Down