Skip to content

Commit 353e4ce

Browse files
committed
bench: add Duration epoch cases with small values and nulls
1 parent c76ed53 commit 353e4ce

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

  • datafusion/functions/benches/datetime_expressions

‎datafusion/functions/benches/datetime_expressions/date_part.rs‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const BATCH_SIZE: usize = 1000;
3939
const TS_BOUND: i64 = 2_006_463_600;
4040
const SEC_DAY: i64 = 86_400;
4141
const DAYS_SINCE_EPOCH: i64 = TS_BOUND / SEC_DAY;
42+
const NULL_DENSITY: f64 = 0.1;
4243

4344
fn generate_timestamp_ns_array(rng: &mut StdRng) -> TimestampNanosecondArray {
4445
TimestampNanosecondArray::from(
@@ -162,6 +163,31 @@ fn generate_duration_nanosecond_array(rng: &mut StdRng) -> DurationNanosecondArr
162163
)
163164
}
164165

166+
// Durations under `i32::MAX` nanoseconds (about 2.1 seconds)
167+
fn generate_duration_nanosecond_small_array(rng: &mut StdRng) -> DurationNanosecondArray {
168+
DurationNanosecondArray::from(
169+
(0..BATCH_SIZE)
170+
.map(|_| rng.random_range(0..i32::MAX as i64))
171+
.collect::<Vec<_>>(),
172+
)
173+
}
174+
175+
fn generate_duration_nanosecond_array_with_nulls(
176+
rng: &mut StdRng,
177+
) -> DurationNanosecondArray {
178+
DurationNanosecondArray::from(
179+
(0..BATCH_SIZE)
180+
.map(|_| {
181+
if rng.random_bool(NULL_DENSITY) {
182+
None
183+
} else {
184+
Some(rng.random_range(0..TS_BOUND * 1_000_000_000))
185+
}
186+
})
187+
.collect::<Vec<_>>(),
188+
)
189+
}
190+
165191
fn bench_date_part(
166192
c: &mut Criterion,
167193
udf: &Arc<ScalarUDF>,
@@ -213,6 +239,10 @@ fn criterion_benchmark(c: &mut Criterion) {
213239
let duration_ns = Arc::new(generate_duration_nanosecond_array(&mut rng)) as ArrayRef;
214240
let date32 = Arc::new(generate_date32_array(&mut rng)) as ArrayRef;
215241
let date64 = Arc::new(generate_date64_array(&mut rng)) as ArrayRef;
242+
let duration_ns_small =
243+
Arc::new(generate_duration_nanosecond_small_array(&mut rng)) as ArrayRef;
244+
let duration_ns_nulls =
245+
Arc::new(generate_duration_nanosecond_array_with_nulls(&mut rng)) as ArrayRef;
216246

217247
let udf = date_part();
218248

@@ -322,6 +352,8 @@ fn criterion_benchmark(c: &mut Criterion) {
322352
("interval_dt", &interval_dt),
323353
("interval_mdn", &interval_mdn),
324354
("duration_ns", &duration_ns),
355+
("duration_ns_small", &duration_ns_small),
356+
("duration_ns_nulls", &duration_ns_nulls),
325357
] {
326358
bench_date_part(
327359
c,

0 commit comments

Comments
 (0)