()
| 535 | |
| 536 | #[test] |
| 537 | fn test_cache_sharing() { |
| 538 | let metrics = ArrowReaderMetrics::disabled(); |
| 539 | let cache = Arc::new(RwLock::new(RowGroupCache::new(5, usize::MAX))); // Batch size 5 |
| 540 | |
| 541 | // First reader - populate cache |
| 542 | let mock_reader1 = MockArrayReader::new(vec![1, 2, 3, 4, 5]); |
| 543 | let mut cached_reader1 = CachedArrayReader::new( |
| 544 | Box::new(mock_reader1), |
| 545 | cache.clone(), |
| 546 | 0, |
| 547 | CacheRole::Producer, |
| 548 | metrics.clone(), |
| 549 | ); |
| 550 | |
| 551 | cached_reader1.read_records(3).unwrap(); |
| 552 | let array1 = cached_reader1.consume_batch().unwrap(); |
| 553 | assert_eq!(array1.len(), 3); |
| 554 | |
| 555 | // Second reader with different column index should not interfere |
| 556 | let mock_reader2 = MockArrayReader::new(vec![10, 20, 30, 40, 50]); |
| 557 | let mut cached_reader2 = CachedArrayReader::new( |
| 558 | Box::new(mock_reader2), |
| 559 | cache.clone(), |
| 560 | 1, |
| 561 | CacheRole::Consumer, |
| 562 | metrics.clone(), |
| 563 | ); |
| 564 | |
| 565 | cached_reader2.read_records(2).unwrap(); |
| 566 | let array2 = cached_reader2.consume_batch().unwrap(); |
| 567 | assert_eq!(array2.len(), 2); |
| 568 | |
| 569 | // Verify the second reader got its own data, not from cache |
| 570 | let int32_array = array2.as_any().downcast_ref::<Int32Array>().unwrap(); |
| 571 | assert_eq!(int32_array.values(), &[10, 20]); |
| 572 | } |
| 573 | |
| 574 | #[test] |
| 575 | fn test_consumer_removes_batches() { |
nothing calls this directly
no test coverage detected