@@ -216,15 +216,14 @@ mod tests {
216216 const PAGE_SIZE : usize = 128 ;
217217
218218 #[ rstest]
219- #[ case( 50 , 64 ) ]
220- #[ case( 100 , 128 ) ]
221- #[ case( 1024 , 1024 ) ]
222- #[ case( 1025 , 512 ) ]
223- #[ case( 2048 , 512 ) ]
224- #[ case( 3000 , 1000 ) ]
225- #[ case( 5120 , 256 ) ]
226- #[ case( 10000 , 2048 ) ]
227- fn test_pco_pipeline_roundtrip ( #[ case] array_size : usize , #[ case] page_size : usize ) {
219+ #[ case( 50 ) ]
220+ #[ case( 100 ) ]
221+ #[ case( 1024 ) ]
222+ #[ case( 1025 ) ]
223+ #[ case( 2048 ) ]
224+ #[ case( 3000 ) ]
225+ #[ case( 5120 ) ]
226+ fn test_pco_pipeline_roundtrip ( #[ case] array_size : usize ) {
228227 let values: Vec < i32 > = ( 0 ..array_size) . map ( |i| i32:: try_from ( i) . unwrap ( ) ) . collect ( ) ;
229228 let primitive = PrimitiveArray :: from_iter ( values) ;
230229
@@ -240,29 +239,21 @@ mod tests {
240239 let result = pco_array. to_array ( ) . execute_with_selection ( & mask) . unwrap ( ) ;
241240 assert_eq ! ( result. len( ) , array_size) ;
242241
243- let pvector_i32 = result. as_primitive ( ) . into_i32 ( ) ;
244- let elements = pvector_i32. elements ( ) . as_slice ( ) ;
245-
246- for idx in 0 ..array_size {
247- assert_eq ! (
248- elements[ idx] ,
249- i32 :: try_from( idx) . unwrap( ) ,
250- "Mismatch at index {} for array_size={}, page_size={}" ,
251- idx,
252- array_size,
253- page_size
254- ) ;
255- }
242+ let pvector = result. as_primitive ( ) . into_i32 ( ) ;
243+ let result_vec: Vec < i32 > = pvector. elements ( ) . to_vec ( ) ;
244+ let expected_vec: Vec < i32 > = primitive. as_slice :: < i32 > ( ) . to_vec ( ) ;
245+ assert_eq ! ( result_vec, expected_vec) ;
256246 }
257247
258248 #[ rstest]
259- #[ case( 50 , 64 ) ]
260- #[ case( 100 , 128 ) ]
261- #[ case( 1024 , 1024 ) ]
262- #[ case( 1025 , 512 ) ]
263- #[ case( 2048 , 512 ) ]
264- #[ case( 3000 , 1000 ) ]
265- fn test_pco_pipeline_with_mixed_mask ( #[ case] array_size : usize , #[ case] page_size : usize ) {
249+ #[ case( 50 ) ]
250+ #[ case( 100 ) ]
251+ #[ case( 1024 ) ]
252+ #[ case( 1025 ) ]
253+ #[ case( 2048 ) ]
254+ #[ case( 3000 ) ]
255+ #[ case( 5120 ) ]
256+ fn test_pco_pipeline_with_mixed_mask ( #[ case] array_size : usize ) {
266257 let values: Vec < i32 > = ( 0 ..array_size) . map ( |i| i32:: try_from ( i) . unwrap ( ) ) . collect ( ) ;
267258 let primitive = PrimitiveArray :: from_iter ( values) ;
268259
@@ -283,21 +274,23 @@ mod tests {
283274 assert_eq ! ( result. len( ) , expected_len) ;
284275 let pvector_i32 = result. as_primitive ( ) . into_i32 ( ) ;
285276
286- for ( idx, & value) in pvector_i32. elements ( ) . iter ( ) . enumerate ( ) {
287- let expected = i32:: try_from ( idx * 2 ) . unwrap ( ) ;
288- assert_eq ! (
289- value, expected,
290- "Mismatch at result index {} for array_size={}, page_size={}" ,
291- idx, array_size, page_size
292- ) ;
293- }
277+ let expected_values: Vec < i32 > = ( 0 ..array_size)
278+ . filter ( |i| i % 2 == 0 )
279+ . map ( |i| i32:: try_from ( i) . unwrap ( ) )
280+ . collect ( ) ;
281+ let result_vec: Vec < i32 > = pvector_i32. elements ( ) . to_vec ( ) ;
282+ assert_eq ! ( result_vec, expected_values) ;
294283 }
295284
296285 #[ rstest]
297- #[ case( 10 , 64 ) ]
298- #[ case( 50 , 128 ) ]
299- #[ case( 100 , 256 ) ]
300- fn test_pco_pipeline_with_validity ( #[ case] array_size : usize , #[ case] page_size : usize ) {
286+ #[ case( 50 ) ]
287+ #[ case( 100 ) ]
288+ #[ case( 1024 ) ]
289+ #[ case( 1025 ) ]
290+ #[ case( 2048 ) ]
291+ #[ case( 3000 ) ]
292+ #[ case( 5120 ) ]
293+ fn test_pco_pipeline_with_validity ( #[ case] array_size : usize ) {
301294 // Create array with alternating null values: [0, null, 2, null, 4, null, ...]
302295 let values: Vec < Option < i32 > > = ( 0 ..array_size)
303296 . map ( |i| ( i % 2 == 0 ) . then ( || i32:: try_from ( i) . unwrap ( ) ) )
@@ -316,39 +309,27 @@ mod tests {
316309 let result = pco_array. to_array ( ) . execute_with_selection ( & mask) . unwrap ( ) ;
317310 assert_eq ! ( result. len( ) , array_size) ;
318311
319- let pvector_i32 = result. as_primitive ( ) . into_i32 ( ) ;
320- let elements = pvector_i32. elements ( ) . as_slice ( ) ;
321- let validity = pvector_i32. validity ( ) ;
322-
323- for idx in 0 ..array_size {
324- if idx % 2 == 0 {
325- assert ! ( validity. value( idx) , "Position {} should be valid" , idx) ;
326- assert_eq ! (
327- elements[ idx] ,
328- i32 :: try_from( idx) . unwrap( ) ,
329- "Mismatch at valid position {} for array_size={}, page_size={}" ,
330- idx,
331- array_size,
332- page_size
333- ) ;
334- } else {
335- assert ! ( !validity. value( idx) , "Position {} should be null" , idx) ;
336- }
337- }
312+ let pvector = result. as_primitive ( ) . into_i32 ( ) ;
313+ let result_slice = pvector. elements ( ) ;
314+ let expected_slice = primitive. as_slice :: < i32 > ( ) ;
315+
316+ assert_eq ! ( result_slice. as_slice( ) , expected_slice) ;
338317 }
339318
340319 #[ rstest]
341- #[ case( 100 , 128 , 10 , 50 ) ]
342- #[ case( 100 , 128 , 0 , 50 ) ]
343- #[ case( 100 , 128 , 50 , 100 ) ]
344- #[ case( 256 , 64 , 20 , 100 ) ]
345- #[ case( 512 , 256 , 100 , 300 ) ]
346- #[ case( 1024 , 256 , 0 , 256 ) ]
347- #[ case( 1024 , 256 , 512 , 768 ) ]
348- #[ case( 1024 , 256 , 768 , 1024 ) ]
320+ #[ case( 100 , 10 , 50 ) ]
321+ #[ case( 100 , 0 , 50 ) ]
322+ #[ case( 100 , 50 , 100 ) ]
323+ #[ case( 256 , 20 , 100 ) ]
324+ #[ case( 512 , 100 , 300 ) ]
325+ #[ case( 1024 , 0 , 256 ) ]
326+ #[ case( 1024 , 512 , 768 ) ]
327+ #[ case( 1024 , 768 , 1024 ) ]
328+ #[ case( 4000 , 0 , 256 ) ]
329+ #[ case( 4000 , 512 , 768 ) ]
330+ #[ case( 4000 , 768 , 1024 ) ]
349331 fn test_pco_pipeline_with_slice_offsets (
350332 #[ case] array_size : usize ,
351- #[ case] page_size : usize ,
352333 #[ case] slice_start : usize ,
353334 #[ case] slice_end : usize ,
354335 ) {
@@ -369,22 +350,10 @@ mod tests {
369350 let decompressed = sliced_pco_array. to_primitive ( ) ;
370351 assert_eq ! ( decompressed. len( ) , slice_end - slice_start) ;
371352
372- for ( result_idx, & value) in decompressed. as_slice :: < i32 > ( ) . iter ( ) . enumerate ( ) {
373- let expected_idx = slice_start + result_idx;
374- let expected_value = i32:: try_from ( expected_idx) . unwrap ( ) ;
375- assert_eq ! (
376- value,
377- expected_value,
378- "Mismatch at result index {}: got {}, expected {} (original index {}) for array_size={}, page_size={}, slice=[{}..{}]" ,
379- result_idx,
380- value,
381- expected_value,
382- expected_idx,
383- array_size,
384- page_size,
385- slice_start,
386- slice_end
387- ) ;
388- }
353+ let expected_values: Vec < i32 > = ( slice_start..slice_end)
354+ . map ( |i| i32:: try_from ( i) . unwrap ( ) )
355+ . collect ( ) ;
356+ let result_slice = decompressed. as_slice :: < i32 > ( ) ;
357+ assert_eq ! ( result_slice, expected_values. as_slice( ) ) ;
389358 }
390359}
0 commit comments