This commit is contained in:
		@@ -504,4 +504,40 @@ mod test {
 | 
				
			|||||||
            assert_eq!(pair.0, pair.1);
 | 
					            assert_eq!(pair.0, pair.1);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// sharing Reader instance between threads
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_share_reader() {
 | 
				
			||||||
 | 
					        use std::thread;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let dir = tempdir().expect("tempdir");
 | 
				
			||||||
 | 
					        let tmpfile = dir.path().join("test.tmp");
 | 
				
			||||||
 | 
					        let opts = WriterOpts {
 | 
				
			||||||
 | 
					            compress_lvl: 1,
 | 
				
			||||||
 | 
					            data_buf_size: 10 * 1024 * 1024,
 | 
				
			||||||
 | 
					            out_buf_size: 10 * 1024 * 1024,
 | 
				
			||||||
 | 
					            current_buf_size: 4096,
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        let mut writer: Writer<TestData> = Writer::new(&tmpfile, opts).expect("new writer");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let items_iter = gen_data(10);
 | 
				
			||||||
 | 
					        let items: Vec<TestData> = items_iter.collect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        writer.load(&mut items.clone().into_iter()).expect("load");
 | 
				
			||||||
 | 
					        writer.finish().expect("finish write");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let reader: Reader<TestData> = Reader::new(&tmpfile, 2048).expect("new reader");
 | 
				
			||||||
 | 
					        assert_eq!(items.len(), reader.len());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let reader = Arc::new(reader);
 | 
				
			||||||
 | 
					        for _ in 0..=3 {
 | 
				
			||||||
 | 
					            let cur_items = items.clone();
 | 
				
			||||||
 | 
					            let cur_reader = Arc::clone(&reader);
 | 
				
			||||||
 | 
					            thread::spawn(move || {
 | 
				
			||||||
 | 
					                cur_items.into_iter().zip(cur_reader.iter()).for_each(|pair| {
 | 
				
			||||||
 | 
					                    assert_eq!(pair.0, pair.1);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user