(
index: &Field,
value: &Field,
size: usize,
null_density: f32,
true_density: f32,
)
| 240 | } |
| 241 | #[inline] |
| 242 | fn create_random_run_end_encoded_array( |
| 243 | index: &Field, |
| 244 | value: &Field, |
| 245 | size: usize, |
| 246 | null_density: f32, |
| 247 | true_density: f32, |
| 248 | ) -> Result<ArrayRef> { |
| 249 | const MIN_RUN: usize = 8; |
| 250 | const MAX_RUN: usize = 32; |
| 251 | |
| 252 | let mut rng = seedable_rng(); |
| 253 | let mut run_lengths: Vec<usize> = Vec::new(); |
| 254 | let mut remaining = size; |
| 255 | while remaining > 0 { |
| 256 | let len = rng.random_range(MIN_RUN..=MAX_RUN).min(remaining); |
| 257 | run_lengths.push(len); |
| 258 | remaining -= len; |
| 259 | } |
| 260 | let num_runs = run_lengths.len(); |
| 261 | |
| 262 | let mut cumulative: i64 = 0; |
| 263 | let run_ends_i64: Vec<i64> = run_lengths |
| 264 | .iter() |
| 265 | .map(|&l| { |
| 266 | cumulative += l as i64; |
| 267 | cumulative |
| 268 | }) |
| 269 | .collect(); |
| 270 | |
| 271 | let values = create_random_array(value, num_runs, null_density, true_density)?; |
| 272 | |
| 273 | match index.data_type() { |
| 274 | DataType::Int16 => { |
| 275 | let run_ends: Int16Array = run_ends_i64.iter().map(|&v| v as i16).collect(); |
| 276 | Ok(Arc::new(RunArray::<Int16Type>::try_new( |
| 277 | &run_ends, &values, |
| 278 | )?)) |
| 279 | } |
| 280 | DataType::Int32 => { |
| 281 | let run_ends: Int32Array = run_ends_i64.iter().map(|&v| v as i32).collect(); |
| 282 | Ok(Arc::new(RunArray::<Int32Type>::try_new( |
| 283 | &run_ends, &values, |
| 284 | )?)) |
| 285 | } |
| 286 | DataType::Int64 => { |
| 287 | let run_ends: Int64Array = run_ends_i64.iter().copied().collect(); |
| 288 | Ok(Arc::new(RunArray::<Int64Type>::try_new( |
| 289 | &run_ends, &values, |
| 290 | )?)) |
| 291 | } |
| 292 | other => Err(ArrowError::InvalidArgumentError(format!( |
| 293 | "Unsupported run-ends type for REE: {other:?}" |
| 294 | ))), |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | #[inline] |
| 299 | fn create_random_list_array( |
no test coverage detected