This is an automated email from the ASF dual-hosted git repository.
Jefffrey pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 64aaccfb25 Add Miri to more crates (#10507)
64aaccfb25 is described below
commit 64aaccfb250f1b8c56515817eccd91d578b14a5f
Author: Ethan Tang <[email protected]>
AuthorDate: Wed Aug 5 19:29:29 2026 -0500
Add Miri to more crates (#10507)
# Which issue does this PR close?
closes #10471
# Rationale for this change
The Miri workflow currently covers only a subset of packages. This adds
more miri coverage to detect unsafe code, Parquet crate remains excluded
because it is tracked separately in #614.
# What changes are included in this PR?
- Adds Miri testing for arrow, arrow-avro, arrow-cast, arrow-csv,
arrow-ipc, arrow-json, arrow-row, arrow-select, and arrow-string.
- Updates the gh action workflow path filters in `miri.yaml`, some
crates were missing before
- adds ignore to tests that takes too long to run
- adds ignore to tests that were failing due to inline assembly
- Sets `INSTA_WORKSPACE_ROOT` to prevent snapshot tests from invoking
unsupported subprocess operations under Miri
note: it takes about 50mins to run miri on my M3 laptop. when this pr
gets merge i think it's expected to prolong the CI time in the miri
workflow, but we can always add more parallel workers
# Are these changes tested?
i ran the following to test locally.
- `rustup run nightly bash .github/workflows/miri.sh` (runs the whole
miri suite)
- `cargo test`
- `cargo clippy --workspace --all-targets --all-features -- -D warnings`
- `git diff --check`
# Are there any user-facing changes?
no, only tests
# AI disclosure
I used codex to draft this pr after i got the project and miri tests
running on my laptop. I have reviewed all the code and have built,
tested these changes. I am happy to own follow-ups too.
---------
Co-authored-by: Jeffrey Vo <[email protected]>
---
.github/workflows/miri.sh | 27 +++++++++++++++++++++------
.github/workflows/miri.yaml | 9 +++++++--
arrow-array/src/arithmetic.rs | 8 ++++++++
arrow-array/src/array/boolean_array.rs | 8 ++++++++
arrow-avro/src/reader/mod.rs | 12 ++++++++----
arrow-avro/src/writer/mod.rs | 12 ++++++++----
arrow-cast/src/base64.rs | 1 +
arrow-cast/src/cast/mod.rs | 27 +++++++++++++++++++++++++++
arrow-cast/src/pretty.rs | 1 +
arrow-cmp/src/lib.rs | 1 +
arrow-csv/src/reader/mod.rs | 13 +++++++++++++
arrow-ipc/src/reader.rs | 5 +++--
arrow-ipc/src/writer.rs | 23 +++++++++++++++++++++--
arrow-json/src/reader/mod.rs | 1 +
arrow-json/src/writer/mod.rs | 1 +
arrow-ord/src/comparison.rs | 9 +++++++++
arrow-ord/src/sort.rs | 3 +++
arrow-select/src/coalesce.rs | 12 ++++++++++++
arrow-select/src/concat.rs | 2 ++
arrow-select/src/interleave.rs | 2 ++
arrow-select/src/nullif.rs | 1 +
arrow-select/src/union_extract.rs | 1 +
arrow-string/src/like.rs | 26 ++++++++++++++++++++++++--
23 files changed, 183 insertions(+), 22 deletions(-)
diff --git a/.github/workflows/miri.sh b/.github/workflows/miri.sh
index b1307ec305..c50073ec54 100755
--- a/.github/workflows/miri.sh
+++ b/.github/workflows/miri.sh
@@ -7,8 +7,27 @@
set -e
+CRATES="
+ -p arrow
+ -p arrow-arith
+ -p arrow-array
+ -p arrow-avro
+ -p arrow-buffer
+ -p arrow-cast
+ -p arrow-csv
+ -p arrow-data
+ -p arrow-ipc
+ -p arrow-json
+ -p arrow-ord
+ -p arrow-row
+ -p arrow-schema
+ -p arrow-select
+ -p arrow-string
+"
+
setup_miri() {
export MIRIFLAGS="-Zmiri-disable-isolation"
+ export INSTA_WORKSPACE_ROOT="$PWD"
cargo miri setup
cargo clean
}
@@ -20,9 +39,7 @@ case $# in
echo "Starting Arrow MIRI run..."
cargo miri nextest run \
- -p arrow-buffer -p arrow-data \
- -p arrow-schema -p arrow-ord \
- -p arrow-array -p arrow-arith \
+ $CRATES \
--features ffi --no-fail-fast
;;
2)
@@ -34,9 +51,7 @@ case $# in
echo "Starting Arrow MIRI run partition ${partition} out of
${total}..."
cargo miri nextest run \
--partition slice:"${partition}"/"${total}" \
- -p arrow-buffer -p arrow-data \
- -p arrow-schema -p arrow-ord \
- -p arrow-array -p arrow-arith \
+ $CRATES \
--features ffi --no-fail-fast
;;
*)
diff --git a/.github/workflows/miri.yaml b/.github/workflows/miri.yaml
index b7e3d5760f..f243890451 100644
--- a/.github/workflows/miri.yaml
+++ b/.github/workflows/miri.yaml
@@ -28,20 +28,25 @@ on:
- main
pull_request:
paths:
+ - Cargo.toml
+ - Cargo.lock
- .github/**
- rust-toolchain.toml
+ - arrow/**
+ - arrow-arith/**
- arrow-array/**
+ - arrow-avro/**
- arrow-buffer/**
- arrow-cast/**
- arrow-csv/**
- arrow-data/**
- arrow-ipc/**
- arrow-json/**
- - arrow-avro/**
+ - arrow-ord/**
+ - arrow-row/**
- arrow-schema/**
- arrow-select/**
- arrow-string/**
- - arrow/**
permissions:
contents: read
diff --git a/arrow-array/src/arithmetic.rs b/arrow-array/src/arithmetic.rs
index 08f0b968ab..413ac0b28b 100644
--- a/arrow-array/src/arithmetic.rs
+++ b/arrow-array/src/arithmetic.rs
@@ -466,6 +466,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_comparison() {
// is_eq
assert!(8_i8.is_eq(8_i8));
@@ -529,6 +530,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_add() {
// add_wrapping
assert_eq!(8_i8.add_wrapping(2_i8), 10_i8);
@@ -576,6 +578,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_sub() {
// sub_wrapping
assert_eq!(8_i8.sub_wrapping(2_i8), 6_i8);
@@ -623,6 +626,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_mul() {
// mul_wrapping
assert_eq!(8_i8.mul_wrapping(2_i8), 16_i8);
@@ -670,6 +674,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_div() {
// div_wrapping
assert_eq!(8_i8.div_wrapping(2_i8), 4_i8);
@@ -717,6 +722,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_mod() {
// mod_wrapping
assert_eq!(9_i8.mod_wrapping(2_i8), 1_i8);
@@ -764,6 +770,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_neg() {
// neg_wrapping
assert_eq!(8_i8.neg_wrapping(), -8_i8);
@@ -803,6 +810,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_native_type_pow() {
// pow_wrapping
assert_eq!(8_i8.pow_wrapping(2_u32), 64_i8);
diff --git a/arrow-array/src/array/boolean_array.rs
b/arrow-array/src/array/boolean_array.rs
index 18b8fec448..33a62f3151 100644
--- a/arrow-array/src/array/boolean_array.rs
+++ b/arrow-array/src/array/boolean_array.rs
@@ -1098,6 +1098,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_boolean_array_builder() {
// Test building a boolean array with ArrayData builder and offset
// 000011011
@@ -1349,6 +1350,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_not() {
let arr = BooleanArray::from(vec![true, false, true, false]);
let result = arr.bitwise_unary(|x| !x);
@@ -1357,6 +1359,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_preserves_nulls() {
let arr = BooleanArray::from(vec![Some(true), None, Some(false),
Some(true)]);
let result = arr.bitwise_unary(|x| !x);
@@ -1369,6 +1372,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_mut_unshared() {
let arr = BooleanArray::from(vec![true, false, true, false]);
let info = PointerInfo::new(&arr);
@@ -1379,6 +1383,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_mut_shared() {
let arr = BooleanArray::from(vec![true, false, true, false]);
let info = PointerInfo::new(&arr);
@@ -1392,6 +1397,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_mut_with_nulls() {
let arr = BooleanArray::from(vec![Some(true), None, Some(false)]);
let result = arr.bitwise_unary_mut(|x| !x).unwrap();
@@ -1573,6 +1579,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_sliced() {
// Slicing creates a non-zero offset into the underlying buffer.
let arr = BooleanArray::from(vec![true, false, true, true, false]);
@@ -1586,6 +1593,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_bitwise_unary_mut_sliced() {
// Slicing shares the buffer, so _mut must return Err.
let arr = BooleanArray::from(vec![true, false, true, true, false]);
diff --git a/arrow-avro/src/reader/mod.rs b/arrow-avro/src/reader/mod.rs
index 2767a51415..505d140831 100644
--- a/arrow-avro/src/reader/mod.rs
+++ b/arrow-avro/src/reader/mod.rs
@@ -1473,13 +1473,14 @@ mod test {
// TODO: avoid requiring snappy for this file
#[cfg(feature = "snappy")]
"avro/alltypes_plain.avro",
- #[cfg(feature = "snappy")]
+ // Compression codecs are unsupported by Miri
+ #[cfg(all(feature = "snappy", not(miri)))]
"avro/alltypes_plain.snappy.avro",
- #[cfg(feature = "zstd")]
+ #[cfg(all(feature = "zstd", not(miri)))]
"avro/alltypes_plain.zstandard.avro",
- #[cfg(feature = "bzip2")]
+ #[cfg(all(feature = "bzip2", not(miri)))]
"avro/alltypes_plain.bzip2.avro",
- #[cfg(feature = "xz")]
+ #[cfg(all(feature = "xz", not(miri)))]
"avro/alltypes_plain.xz.avro",
]
.into_iter()
@@ -3263,6 +3264,7 @@ mod test {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_skippable_types_project_each_field_individually() {
let path = "test/data/skippable_types.avro";
let full = read_file(path, 1024, false);
@@ -3640,6 +3642,7 @@ mod test {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_union_schema_resolution_all_type_combinations() {
let path = "test/data/union_fields.avro";
let baseline = read_file(path, 1024, false);
@@ -8276,6 +8279,7 @@ mod test {
);
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn comprehensive_e2e_resolution_test() {
use serde_json::Value;
use std::collections::HashMap;
diff --git a/arrow-avro/src/writer/mod.rs b/arrow-avro/src/writer/mod.rs
index 235db3f0f7..81991f7e0c 100644
--- a/arrow-avro/src/writer/mod.rs
+++ b/arrow-avro/src/writer/mod.rs
@@ -826,13 +826,14 @@ mod tests {
// TODO: avoid requiring snappy for this file
#[cfg(feature = "snappy")]
"avro/alltypes_plain.avro",
- #[cfg(feature = "snappy")]
+ // Compression codecs are unsupported by Miri
+ #[cfg(all(feature = "snappy", not(miri)))]
"avro/alltypes_plain.snappy.avro",
- #[cfg(feature = "zstd")]
+ #[cfg(all(feature = "zstd", not(miri)))]
"avro/alltypes_plain.zstandard.avro",
- #[cfg(feature = "bzip2")]
+ #[cfg(all(feature = "bzip2", not(miri)))]
"avro/alltypes_plain.bzip2.avro",
- #[cfg(feature = "xz")]
+ #[cfg(all(feature = "xz", not(miri)))]
"avro/alltypes_plain.xz.avro",
]
.into_iter()
@@ -2686,6 +2687,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn comprehensive_e2e_test_roundtrip() -> Result<(), AvroError> {
let path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("test/data/comprehensive_e2e.avro");
@@ -3521,6 +3523,7 @@ mod tests {
#[cfg(not(feature = "avro_custom_types"))]
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_roundtrip_float16_no_custom_widens_to_float32() {
assert_round_trip_widened(
Arc::new(Float16Array::from(vec![
@@ -3785,6 +3788,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn e2e_types_and_schema_alignment() -> Result<(), AvroError> {
// Values are chosen to:
// - exercise full UInt64 range when `avro_custom_types` is enabled
diff --git a/arrow-cast/src/base64.rs b/arrow-cast/src/base64.rs
index 1e85710eda..1c1b53eb20 100644
--- a/arrow-cast/src/base64.rs
+++ b/arrow-cast/src/base64.rs
@@ -103,6 +103,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_b64() {
let mut rng = rng();
let len = rng.random_range(1024..1050);
diff --git a/arrow-cast/src/cast/mod.rs b/arrow-cast/src/cast/mod.rs
index d88fd2847b..50357a5f94 100644
--- a/arrow-cast/src/cast/mod.rs
+++ b/arrow-cast/src/cast/mod.rs
@@ -3410,6 +3410,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_float16_to_decimals() {
let array = Float16Array::from(vec![
Some(f16::from_f32(1.25)),
@@ -3783,6 +3784,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_decimal32_to_numeric() {
let value_array: Vec<Option<i32>> = vec![Some(125), Some(225),
Some(325), None, Some(525)];
let array = create_decimal32_array(value_array, 8, 2).unwrap();
@@ -3791,6 +3793,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_decimal64_to_numeric() {
let value_array: Vec<Option<i64>> = vec![Some(125), Some(225),
Some(325), None, Some(525)];
let array = create_decimal64_array(value_array, 8, 2).unwrap();
@@ -3799,6 +3802,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_decimal128_to_numeric() {
let value_array: Vec<Option<i128>> = vec![Some(125), Some(225),
Some(325), None, Some(525)];
let array = create_decimal128_array(value_array, 38, 2).unwrap();
@@ -3916,6 +3920,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_decimal256_to_numeric() {
let value_array: Vec<Option<i256>> = vec![
Some(i256::from_i128(125)),
@@ -4105,6 +4110,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_decimal128_to_float16_overflow() {
let array = create_decimal128_array(
vec![
@@ -4132,6 +4138,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_decimal256_to_float16_overflow() {
let array = create_decimal256_array(
vec![
@@ -4159,6 +4166,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_decimal_to_numeric_negative_scale() {
let value_array: Vec<Option<i256>> = vec![
Some(i256::from_i128(125)),
@@ -4801,6 +4809,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_float_to_utf8view() {
let inputs = vec![
Arc::new(Float16Array::from(vec![
@@ -4858,6 +4867,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_string_to_f16() {
let arrays = [
Arc::new(StringViewArray::from(vec!["3", "4.56", "seven", "8.9"]))
as ArrayRef,
@@ -5068,6 +5078,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_floating_to_timestamp() {
let array = Int64Array::from(vec![Some(2), Some(10), None]);
let expected = cast(&array,
&DataType::Timestamp(TimeUnit::Microsecond, None)).unwrap();
@@ -5093,6 +5104,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_timestamp_to_floating() {
let array = TimestampMillisecondArray::from(vec![Some(5), Some(1),
None])
.with_timezone("UTC".to_string());
@@ -7763,6 +7775,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_f64() {
let f64_values: Vec<f64> = vec![
i64::MIN as f64,
@@ -7932,6 +7945,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_f32() {
let f32_values: Vec<f32> = vec![
i32::MIN as f32,
@@ -8076,6 +8090,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_uint64() {
let u64_values: Vec<u64> = vec![
0,
@@ -8169,6 +8184,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_uint32() {
let u32_values: Vec<u32> = vec![0, u8::MAX as u32, u16::MAX as u32,
u32::MAX];
let u32_array: ArrayRef = Arc::new(UInt32Array::from(u32_values));
@@ -8241,6 +8257,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_uint16() {
let u16_values: Vec<u16> = vec![0, u8::MAX as u16, u16::MAX];
let u16_array: ArrayRef = Arc::new(UInt16Array::from(u16_values));
@@ -8313,6 +8330,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_uint8() {
let u8_values: Vec<u8> = vec![0, u8::MAX];
let u8_array: ArrayRef = Arc::new(UInt8Array::from(u8_values));
@@ -8385,6 +8403,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_int64() {
let i64_values: Vec<i64> = vec![
i64::MIN,
@@ -8559,6 +8578,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_int32() {
let i32_values: Vec<i32> = vec![
i32::MIN,
@@ -8669,6 +8689,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_int16() {
let i16_values: Vec<i16> = vec![i16::MIN, i8::MIN as i16, 0, i8::MAX
as i16, i16::MAX];
let i16_array: ArrayRef = Arc::new(Int16Array::from(i16_values));
@@ -8778,6 +8799,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_from_int8() {
let i8_values: Vec<i8> = vec![i8::MIN, 0, i8::MAX];
let i8_array = Int8Array::from(i8_values);
@@ -9311,6 +9333,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_can_cast_fsl_to_fsl() {
let from_array = Arc::new(
FixedSizeListArray::from_iter_primitive::<Float32Type, _, _>(
@@ -10487,6 +10510,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_cast_f64_to_decimal128() {
// to reproduce https://github.com/apache/arrow-rs/issues/2997
@@ -10615,6 +10639,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_float16_to_decimal128_precision_overflow() {
let array = Float16Array::from(vec![f16::from_f32(1.1)]);
let array = Arc::new(array) as ArrayRef;
@@ -10643,6 +10668,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_float16_to_decimal256_precision_overflow() {
let array = Float16Array::from(vec![f16::from_f32(1.1)]);
let array = Arc::new(array) as ArrayRef;
@@ -10671,6 +10697,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_cast_float16_to_decimal128_non_finite() {
let array = Float16Array::from(vec![f16::NAN, f16::INFINITY,
f16::NEG_INFINITY]);
let array = Arc::new(array) as ArrayRef;
diff --git a/arrow-cast/src/pretty.rs b/arrow-cast/src/pretty.rs
index ca6f82a031..fc0a7259c0 100644
--- a/arrow-cast/src/pretty.rs
+++ b/arrow-cast/src/pretty.rs
@@ -1028,6 +1028,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_float16_display() {
let values = vec![
Some(f16::from_f32(f32::NAN)),
diff --git a/arrow-cmp/src/lib.rs b/arrow-cmp/src/lib.rs
index c49d1ae940..470c36e5db 100644
--- a/arrow-cmp/src/lib.rs
+++ b/arrow-cmp/src/lib.rs
@@ -585,6 +585,7 @@ mod tests {
assert_eq!(Ordering::Less, cmp(0, 0));
}
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
#[test]
fn test_f16() {
let array = Float16Array::from(vec![f16::from_f32(1.0),
f16::from_f32(2.0)]);
diff --git a/arrow-csv/src/reader/mod.rs b/arrow-csv/src/reader/mod.rs
index 200766eeae..a286f19f7e 100644
--- a/arrow-csv/src/reader/mod.rs
+++ b/arrow-csv/src/reader/mod.rs
@@ -1506,6 +1506,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_csv_with_schema_inference() {
let mut file =
File::open("test/data/uk_cities_with_headers.csv").unwrap();
@@ -1547,6 +1548,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_csv_with_schema_inference_no_headers() {
let mut file = File::open("test/data/uk_cities.csv").unwrap();
@@ -1586,6 +1588,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_csv_builder_with_bounds() {
let mut file = File::open("test/data/uk_cities.csv").unwrap();
@@ -1758,6 +1761,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_init_nulls_with_inference() {
let format = Format::default().with_header(true).with_delimiter(b',');
@@ -1818,6 +1822,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_nulls_with_inference() {
let mut file = File::open("test/data/various_types.csv").unwrap();
let format = Format::default().with_header(true).with_delimiter(b'|');
@@ -1876,6 +1881,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_custom_nulls_with_inference() {
let mut file = File::open("test/data/custom_null_test.csv").unwrap();
@@ -1912,6 +1918,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_scientific_notation_with_inference() {
let mut file =
File::open("test/data/scientific_notation_test.csv").unwrap();
let format = Format::default().with_header(false).with_delimiter(b',');
@@ -1993,6 +2000,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_infer_field_schema() {
assert_eq!(infer_field_schema("A"), DataType::Utf8);
assert_eq!(infer_field_schema("\"123\""), DataType::Utf8);
@@ -2136,6 +2144,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_infer_schema_from_multiple_files() {
let mut csv1 = NamedTempFile::new().unwrap();
let mut csv2 = NamedTempFile::new().unwrap();
@@ -2650,6 +2659,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_buffered() {
let tests = [
("test/data/uk_cities.csv", false, 37),
@@ -2810,6 +2820,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_inference() {
let cases: &[(&[&str], DataType)] = &[
(&[], DataType::Null),
@@ -2878,6 +2889,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_record_length_mismatch() {
let csv = "\
a,b,c\n\
@@ -2993,6 +3005,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_float_precision() {
let data = [
"f16,f32,f64",
diff --git a/arrow-ipc/src/reader.rs b/arrow-ipc/src/reader.rs
index 6e2a35690d..c25e40f2bc 100644
--- a/arrow-ipc/src/reader.rs
+++ b/arrow-ipc/src/reader.rs
@@ -3204,6 +3204,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_file_with_massive_column_count() {
// 499_999 is upper limit for default settings (1_000_000)
let limit = 600_000;
@@ -3771,7 +3772,7 @@ mod tests {
use std::sync::Arc;
use arrow_array::{ArrayRef, BooleanArray, Int32Array, RecordBatch,
make_array};
- use arrow_buffer::Buffer;
+ use arrow_buffer::{Buffer, MutableBuffer};
use arrow_data::ArrayData;
use arrow_schema::{DataType, Field, IntervalUnit, Schema, TimeUnit};
@@ -3789,7 +3790,7 @@ mod tests {
let width = data_type.primitive_width().unwrap();
let data = ArrayData::builder(data_type)
.len(len)
- .add_buffer(Buffer::from(vec![0_u8; len * width]))
+ .add_buffer(Buffer::from(MutableBuffer::from_len_zeroed(len *
width)))
.build()
.unwrap();
diff --git a/arrow-ipc/src/writer.rs b/arrow-ipc/src/writer.rs
index ae2c261324..de89f423ab 100644
--- a/arrow-ipc/src/writer.rs
+++ b/arrow-ipc/src/writer.rs
@@ -3401,6 +3401,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn truncate_ipc_record_batch() {
fn create_batch(rows: usize) -> RecordBatch {
let schema = Schema::new(vec![
@@ -3600,6 +3601,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_large_slice_string() {
let strings: Vec<_> = (0..8000)
.map(|i| {
@@ -3615,6 +3617,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_large_slice_string_list() {
let mut ls = ListBuilder::new(StringBuilder::new());
@@ -3637,6 +3640,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_large_slice_string_list_of_lists() {
// The reason for the special test is to verify reencode_offsets which
looks both at
// the starting offset and the data offset. So need a dataset where
the starting_offset
@@ -3925,6 +3929,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn reencode_offsets_when_first_offset_is_not_zero() {
let original_list = generate_list_data::<i32>();
let original_data = original_list.into_data();
@@ -3979,6 +3984,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_lists() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_list_field = Field::new("val",
DataType::List(Arc::new(val_inner)), false);
@@ -3991,6 +3997,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_empty_list() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_list_field = Field::new("val",
DataType::List(Arc::new(val_inner)), false);
@@ -4006,6 +4013,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_large_lists() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_list_field = Field::new("val",
DataType::LargeList(Arc::new(val_inner)), false);
@@ -4020,6 +4028,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_large_lists_non_zero_offset() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_list_field = Field::new("val",
DataType::LargeList(Arc::new(val_inner)), false);
@@ -4031,6 +4040,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_large_lists_string_non_zero_offset() {
let val_inner = Field::new_list_field(DataType::Utf8, true);
let val_list_field = Field::new("val",
DataType::LargeList(Arc::new(val_inner)), false);
@@ -4042,6 +4052,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_large_list_string_view_non_zero_offset() {
let val_inner = Field::new_list_field(DataType::Utf8View, true);
let val_list_field = Field::new("val",
DataType::LargeList(Arc::new(val_inner)), false);
@@ -4063,6 +4074,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_nested_lists() {
let inner_int = Arc::new(Field::new_list_field(DataType::UInt32,
true));
let inner_list_field =
Arc::new(Field::new_list_field(DataType::List(inner_int), true));
@@ -4076,6 +4088,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_nested_lists_starting_at_zero() {
let inner_int = Arc::new(Field::new("item", DataType::UInt32, true));
let inner_list_field = Arc::new(Field::new("item",
DataType::List(inner_int), true));
@@ -4089,6 +4102,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_map_array() {
let keys = Arc::new(Field::new(
Field::MAP_KEY_FIELD_DEFAULT_NAME,
@@ -4134,6 +4148,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_list_view_arrays() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_field = Field::new("val",
DataType::ListView(Arc::new(val_inner)), true);
@@ -4147,6 +4162,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_large_list_view_arrays() {
let val_inner = Field::new_list_field(DataType::UInt32, true);
let val_field = Field::new("val",
DataType::LargeListView(Arc::new(val_inner)), true);
@@ -4160,6 +4176,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn check_sliced_list_view_array() {
let inner = Field::new_list_field(DataType::UInt32, true);
let field = Field::new("val", DataType::ListView(Arc::new(inner)),
true);
@@ -4176,6 +4193,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn check_sliced_large_list_view_array() {
let inner = Field::new_list_field(DataType::UInt32, true);
let field = Field::new("val",
DataType::LargeListView(Arc::new(inner)), true);
@@ -4215,6 +4233,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn encode_nested_list_views() {
let inner_int = Arc::new(Field::new_list_field(DataType::UInt32,
true));
let inner_list_field =
Arc::new(Field::new_list_field(DataType::ListView(inner_int), true));
@@ -4604,7 +4623,7 @@ mod tests {
let out: Vec<u8> = writer.into_inner().unwrap();
- let buffer = Buffer::from_vec(out);
+ let buffer = Buffer::from_slice_ref(out);
let trailer_start = buffer.len() - 10;
let footer_len =
read_footer_length(buffer[trailer_start..].try_into().unwrap()).unwrap();
@@ -4659,7 +4678,7 @@ mod tests {
let out: Vec<u8> = writer.into_inner().unwrap();
- let buffer = Buffer::from_vec(out);
+ let buffer = Buffer::from_slice_ref(out);
let trailer_start = buffer.len() - 10;
let footer_len =
read_footer_length(buffer[trailer_start..].try_into().unwrap()).unwrap();
let footer = root_as_footer(&buffer[trailer_start -
footer_len..trailer_start]).unwrap();
diff --git a/arrow-json/src/reader/mod.rs b/arrow-json/src/reader/mod.rs
index ee8d0a542a..83864b1a4f 100644
--- a/arrow-json/src/reader/mod.rs
+++ b/arrow-json/src/reader/mod.rs
@@ -1571,6 +1571,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_timestamps() {
test_timestamp::<TimestampSecondType>();
test_timestamp::<TimestampMillisecondType>();
diff --git a/arrow-json/src/writer/mod.rs b/arrow-json/src/writer/mod.rs
index 341779afed..60a7c9469d 100644
--- a/arrow-json/src/writer/mod.rs
+++ b/arrow-json/src/writer/mod.rs
@@ -1521,6 +1521,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_write_multi_batches() {
let test_file = "test/data/basic.json";
diff --git a/arrow-ord/src/comparison.rs b/arrow-ord/src/comparison.rs
index 4d61eb8758..07f40be55e 100644
--- a/arrow-ord/src/comparison.rs
+++ b/arrow-ord/src/comparison.rs
@@ -2469,6 +2469,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_eq_dyn_neq_dyn_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(10.0)]);
let array2 = Float16Array::from(
@@ -2499,6 +2500,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_lt_dyn_lt_eq_dyn_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(11.0), f16::NAN]);
let array2 = Float16Array::from(vec![f16::NAN, f16::NAN,
f16::from_f32(8.0), f16::from_f32(9.0), f16::from_f32(10.0),
f16::from_f32(1.0)]);
@@ -2530,6 +2532,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_gt_dyn_gt_eq_dyn_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(11.0), f16::NAN]);
let array2 = Float16Array::from(vec![f16::NAN, f16::NAN,
f16::from_f32(8.0), f16::from_f32(9.0), f16::from_f32(10.0),
f16::from_f32(1.0)]);
@@ -2560,6 +2563,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_eq_dyn_scalar_neq_dyn_scalar_float_nan() {
let array = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(10.0)]);
let scalar = Float16Array::new_scalar(f16::NAN);
@@ -2588,6 +2592,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_lt_dyn_scalar_lt_eq_dyn_scalar_float_nan() {
let array = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(10.0)]);
let scalar = Float16Array::new_scalar(f16::NAN);
@@ -2617,6 +2622,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_gt_dyn_scalar_gt_eq_dyn_scalar_float_nan() {
let array = Float16Array::from(vec![
f16::NAN,
@@ -2858,6 +2864,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_eq_dyn_neq_dyn_dict_non_dict_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(10.0)]);
let values = Float16Array::from(vec![f16::NAN, f16::from_f32(8.0),
f16::from_f32(10.0)]);
@@ -2894,6 +2901,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_lt_dyn_lt_eq_dyn_dict_non_dict_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(11.0), f16::NAN]);
let values = Float16Array::from(vec![f16::NAN, f16::from_f32(8.0),
f16::from_f32(9.0), f16::from_f32(10.0), f16::from_f32(1.0)]);
@@ -2930,6 +2938,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_gt_dyn_gt_eq_dyn_dict_non_dict_float_nan() {
let array1 = Float16Array::from(vec![f16::NAN, f16::from_f32(7.0),
f16::from_f32(8.0), f16::from_f32(8.0), f16::from_f32(11.0), f16::NAN]);
let values = Float16Array::from(vec![f16::NAN, f16::from_f32(8.0),
f16::from_f32(9.0), f16::from_f32(10.0), f16::from_f32(1.0)]);
diff --git a/arrow-ord/src/sort.rs b/arrow-ord/src/sort.rs
index fea43dc1a7..f6139ad902 100644
--- a/arrow-ord/src/sort.rs
+++ b/arrow-ord/src/sort.rs
@@ -1622,6 +1622,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_sort_to_indices_primitives() {
test_sort_to_indices_primitive_arrays::<Int8Type>(
vec![None, Some(0), Some(2), Some(-1), Some(0), None],
@@ -2732,6 +2733,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_sort_primitives() {
// default case
test_sort_primitive_arrays::<UInt8Type>(
@@ -3628,6 +3630,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_sort_list() {
test_sort_list_arrays::<Int8Type>(
vec![
diff --git a/arrow-select/src/coalesce.rs b/arrow-select/src/coalesce.rs
index 248c7b05a7..e9e63d3e24 100644
--- a/arrow-select/src/coalesce.rs
+++ b/arrow-select/src/coalesce.rs
@@ -889,6 +889,7 @@ mod tests {
/// Coalesce multiple batches, 80k rows, with a 0.1% selectivity filter
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_coalesce_filtered_001() {
let mut filter_builder = RandomFilterBuilder {
num_rows: 8000,
@@ -912,6 +913,7 @@ mod tests {
/// Coalesce multiple batches, 80k rows, with a 1% selectivity filter
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_coalesce_filtered_01() {
let mut filter_builder = RandomFilterBuilder {
num_rows: 8000,
@@ -935,6 +937,7 @@ mod tests {
/// Coalesce multiple batches, 80k rows, with a 10% selectivity filter
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_coalesce_filtered_10() {
let mut filter_builder = RandomFilterBuilder {
num_rows: 8000,
@@ -958,6 +961,7 @@ mod tests {
/// Coalesce multiple batches, 8k rows, with a 90% selectivity filter
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_coalesce_filtered_90() {
let mut filter_builder = RandomFilterBuilder {
num_rows: 800,
@@ -981,6 +985,7 @@ mod tests {
/// Coalesce multiple batches, 8k rows, with mixed filers, including 100%
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_coalesce_filtered_mixed() {
let mut filter_builder = RandomFilterBuilder {
num_rows: 800,
@@ -1027,6 +1032,7 @@ mod tests {
.run();
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_utf8_split() {
Test::new("coalesce_utf8")
// 4040 rows of utf8 strings in total, split into batches of 1024
@@ -1070,6 +1076,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_string_view_batch_large_no_compact() {
// view with large strings (has buffers) but full --> no need to
compact
let batch = stringview_batch_repeated(1000, [Some("This string is
longer than 12 bytes")]);
@@ -1160,6 +1167,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_string_view_mixed() {
let large_view_batch =
stringview_batch_repeated(1000, [Some("This string is longer than
12 bytes")]);
@@ -1219,6 +1227,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_string_view_many_small_compact() {
// 200 rows alternating long (28) and short (≤12) strings.
// Only the 100 long strings go into data buffers: 100 × 28 = 2800.
@@ -1264,6 +1273,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_string_view_many_small_boundary() {
// The strings are designed to exactly fit into buffers that are
powers of 2 long
let batch = stringview_batch_repeated(100, [Some("This string is a
power of two=32")]);
@@ -1294,6 +1304,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_string_view_large_small() {
// The strings are 37 bytes long, so each batch has 100 * 28 = 2800
bytes
let mixed_batch = stringview_batch_repeated(
@@ -1345,6 +1356,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_binary_view() {
let values: Vec<Option<&[u8]>> = vec![
Some(b"foo"),
diff --git a/arrow-select/src/concat.rs b/arrow-select/src/concat.rs
index f18624c5ad..46f3095565 100644
--- a/arrow-select/src/concat.rs
+++ b/arrow-select/src/concat.rs
@@ -799,6 +799,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Unsupported inline assembly
fn test_concat_13_incompatible_datatypes_should_not_include_all_of_them() {
let re = concat(&[
&PrimitiveArray::<Int64Type>::from(vec![Some(-1), Some(2), None]),
@@ -1732,6 +1733,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn concat_many_dictionary_list_arrays() {
let number_of_unique_values = 8;
let scalars = (0..80000)
diff --git a/arrow-select/src/interleave.rs b/arrow-select/src/interleave.rs
index 8f53b4bc3c..d843709479 100644
--- a/arrow-select/src/interleave.rs
+++ b/arrow-select/src/interleave.rs
@@ -2034,6 +2034,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_interleave_bytes_offset_overflow() {
let indices: Vec<(usize, usize)> = vec![(0, 0); (i32::MAX >> 4) as
usize];
let text = ('a'..='z').collect::<String>();
@@ -2045,6 +2046,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_interleave_list_offset_overflow() {
// Build a ListArray<i32> with a single row containing many elements
let mut builder = GenericListBuilder::<i32,
_>::new(Int32Builder::new());
diff --git a/arrow-select/src/nullif.rs b/arrow-select/src/nullif.rs
index 01ff1b56e3..aa09a28631 100644
--- a/arrow-select/src/nullif.rs
+++ b/arrow-select/src/nullif.rs
@@ -524,6 +524,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn nullif_fuzz() {
let mut rng = StdRng::seed_from_u64(7337);
diff --git a/arrow-select/src/union_extract.rs
b/arrow-select/src/union_extract.rs
index 893b13554b..3d80dbf35d 100644
--- a/arrow-select/src/union_extract.rs
+++ b/arrow-select/src/union_extract.rs
@@ -442,6 +442,7 @@ mod tests {
use std::sync::Arc;
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn test_eq_scalar() {
//multiple all equal chunks, so it's loop and sum logic it's tested
//multiple chunks after, so it's loop logic it's tested
diff --git a/arrow-string/src/like.rs b/arrow-string/src/like.rs
index e9077d4b09..f12e70d387 100644
--- a/arrow-string/src/like.rs
+++ b/arrow-string/src/like.rs
@@ -464,7 +464,8 @@ mod tests {
/// - `StringViewArray`
/// - `DictionaryArray`
macro_rules! test_utf8 {
- ($test_name:ident, $left:expr, $right:expr, $op:expr, $expected:expr)
=> {
+ ($(#[$attr:meta])* $test_name:ident, $left:expr, $right:expr,
$op:expr, $expected:expr) => {
+ $(#[$attr])*
#[test]
fn $test_name() {
let expected = BooleanArray::from($expected);
@@ -554,7 +555,8 @@ mod tests {
/// - `StringViewArray`
/// - `DictionaryArray`
macro_rules! test_utf8_scalar {
- ($test_name:ident, $left:expr, $right:expr, $op:expr, $expected:expr)
=> {
+ ($(#[$attr:meta])* $test_name:ident, $left:expr, $right:expr,
$op:expr, $expected:expr) => {
+ $(#[$attr])*
#[test]
fn $test_name() {
let expected = BooleanArray::from($expected);
@@ -661,6 +663,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_like_scalar_escape_testing,
vec![
"varchar(255)",
@@ -816,6 +819,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_like_scalar_one,
vec![
"arrow",
@@ -870,6 +874,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_nlike_escape_testing,
vec![
"varchar(255)",
@@ -954,6 +959,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_nlike_scalar_one,
vec![
"arrow",
@@ -968,6 +974,7 @@ mod tests {
);
test_utf8!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike,
vec![
"arrow",
@@ -984,6 +991,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
ilike_utf8_scalar_escape_testing,
vec![
"varchar(255)",
@@ -1054,6 +1062,7 @@ mod tests {
// We only implement loose matching
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_unicode,
vec![
"FFkoß",
@@ -1072,6 +1081,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_unicode_starts,
vec![
"FFkoßsdlkdf",
@@ -1093,6 +1103,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_unicode_ends,
vec![
"sdlkdfFFkoß",
@@ -1114,6 +1125,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_unicode_contains,
vec![
"sdlkdfFkoßsdfs",
@@ -1163,6 +1175,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_unicode_complex,
vec![
"sdlkdfFooßsdfs",
@@ -1208,6 +1221,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_ilike_scalar_one,
vec![
"arrow",
@@ -1222,6 +1236,7 @@ mod tests {
);
test_utf8!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_nilike,
vec![
"arrow",
@@ -1238,6 +1253,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
nilike_utf8_scalar_escape_testing,
vec![
"varchar(255)",
@@ -1307,6 +1323,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_array_nilike_scalar_one,
vec![
"arrow",
@@ -1346,6 +1363,7 @@ mod tests {
);
test_utf8_scalar!(
+ #[cfg_attr(miri, ignore)] // Takes too long
test_utf8_scalar_nullable_nlike,
vec![
Some("Earth"),
@@ -1418,6 +1436,7 @@ mod tests {
);
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn string_null_like_pattern() {
// Different patterns have different execution code paths
for pattern in &[
@@ -1464,6 +1483,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn string_view_null_like_pattern() {
// Different patterns have different execution code paths
for pattern in &[
@@ -1576,6 +1596,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn like_escape() {
// (value, pattern, expected)
let test_cases = vec![
@@ -1817,6 +1838,7 @@ mod tests {
}
#[test]
+ #[cfg_attr(miri, ignore)] // Takes too long
fn like_escape_many() {
// (value, pattern, expected)
let test_cases = vec![