#[cfg(feature = "parallel")]
#[cfg(test)]
mod tests {
use std::fs::File;
use std::io::{Read, Seek, SeekFrom};
#[test]
fn test_par_decompress_less_than_chunk_size() {
let laz_path = "tests/data/extra-bytes.laz";
let las_path = "tests/data/extra-bytes.las";
let mut laz_file = File::open(laz_path).unwrap();
let laz_header = laz::las::file::QuickHeader::read_from(&mut laz_file).unwrap();
let laz_vlr =
laz::las::file::read_vlrs_and_get_laszip_vlr(&mut laz_file, &laz_header).unwrap();
laz_file
.seek(SeekFrom::Start(laz_header.offset_to_points as u64))
.unwrap();
let mut decompressor = laz::ParLasZipDecompressor::new(laz_file, laz_vlr).unwrap();
let mut las_file = File::open(las_path).unwrap();
let las_header = laz::las::file::QuickHeader::read_from(&mut las_file).unwrap();
las_file
.seek(SeekFrom::Start(las_header.offset_to_points as u64))
.unwrap();
assert_eq!(las_header.point_size, laz_header.point_size);
assert_eq!(las_header.num_points, laz_header.num_points);
let num_points_per_iter = 50;
let mut num_point_left = las_header.num_points;
let mut points = vec![0u8; las_header.point_size as usize * num_points_per_iter];
let mut expected_points = vec![0u8; las_header.point_size as usize * num_points_per_iter];
while num_point_left > 0 {
let points_to_read = num_points_per_iter.min(num_point_left as usize);
let end = points_to_read * las_header.point_size as usize;
decompressor.decompress_many(&mut points[..end]).unwrap();
las_file.read_exact(&mut expected_points[..end]).unwrap();
assert_eq!(&expected_points[..end], &points[..end]);
num_point_left -= points_to_read as u64;
}
}
#[cfg(feature = "parallel")]
#[test]
fn test_parallel_seek() {
let laz_path = "tests/data/extra-bytes.laz";
let las_path = "tests/data/extra-bytes.las";
let mut laz_file = File::open(laz_path).unwrap();
let laz_header = laz::las::file::QuickHeader::read_from(&mut laz_file).unwrap();
let laz_vlr =
laz::las::file::read_vlrs_and_get_laszip_vlr(&mut laz_file, &laz_header).unwrap();
laz_file
.seek(SeekFrom::Start(laz_header.offset_to_points as u64))
.unwrap();
let mut decompressor = laz::ParLasZipDecompressor::new(laz_file, laz_vlr).unwrap();
let mut las_file = File::open(las_path).unwrap();
let las_header = laz::las::file::QuickHeader::read_from(&mut las_file).unwrap();
las_file
.seek(SeekFrom::Start(las_header.offset_to_points as u64))
.unwrap();
assert_eq!(las_header.point_size, laz_header.point_size);
assert_eq!(las_header.num_points, laz_header.num_points);
let mut point = vec![0u8; las_header.point_size as usize];
let mut expected_point = vec![0u8; las_header.point_size as usize];
decompressor.seek(5).unwrap();
las_file
.seek(SeekFrom::Start(
las_header.offset_to_points as u64 + (5 * las_header.point_size as u64),
))
.unwrap();
for _ in 0..5 {
decompressor.decompress_many(&mut point).unwrap();
las_file.read_exact(&mut expected_point).unwrap();
assert_eq!(point, expected_point);
}
}
}