1extern crate link_cplusplus;
2
3pub mod error;
4mod functions;
5mod handle;
6mod interop;
7mod misc;
8pub mod sys;
9
10pub use functions::*;
11pub use handle::*;
12pub use interop::*;
13pub use misc::{Dimension, PixelType, RawDataType};
14
15#[cfg(test)]
16mod tests {
17 use crate::handle::{CziReader, InputStream};
18 use crate::interop::{LibCZIBuildInformation, ReaderOpenInfo};
19 use crate::misc::Dimension;
20 use std::env;
21 use std::path::PathBuf;
22
23 #[test]
24 fn test_read_shape() -> Result<(), Box<dyn std::error::Error>> {
25 let path = env::home_dir()
26 .unwrap()
27 .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
28 assert!(path.exists());
29 let czi = CziReader::create()?;
30 let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
31 let open_info = ReaderOpenInfo::new(&stream);
32 czi.open(open_info)?;
33 println!("pyramid statistics: {:?}", czi.get_pyramid_statistics()?);
34 println!("file header info: {:?}", czi.get_file_header_info()?);
35 let statistics_simple = czi.get_statistics_simple()?;
36 println!("statistics simple: {:?}", czi.get_statistics_simple()?);
37 let bounding_box = statistics_simple.get_bounding_box();
38 let dim_bounds = statistics_simple.get_dim_bounds();
39 let dimensions = Dimension::vec_from_bitflags(dim_bounds.get_dimensions_valid());
40 let size = dim_bounds.get_size();
41 for (i, d) in dimensions.iter().enumerate() {
42 println!("{:?}: {}", d, size[i]);
43 }
44 println!("X: {}", bounding_box.get_w());
45 println!("Y: {}", bounding_box.get_h());
46 Ok(())
47 }
48
49 #[test]
50 fn test_read_bytes() -> Result<(), Box<dyn std::error::Error>> {
51 let path = env::home_dir()
52 .unwrap()
53 .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
54 assert!(path.exists());
55 let czi = CziReader::create()?;
56 let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
57 let open_info = ReaderOpenInfo::new(&stream);
58 czi.open(open_info)?;
59 let sub_block = czi.read_sub_block(0)?;
60 let bitmap = sub_block.create_bitmap()?.lock()?;
61 let bitmap_info = bitmap.get_info()?;
62 println!(
63 "height: {}, width: {} pixel type: {:#?}",
64 bitmap_info.get_height(),
65 bitmap_info.get_width(),
66 bitmap_info.get_pixel_type()?
67 );
68 let bytes = bitmap.lock_info.get_data_roi();
69 println!("bytes: {:?}", bytes.as_slice()[..100].to_vec());
70 Ok(())
71 }
72
73 #[test]
74 fn test_libczi_xml() -> Result<(), Box<dyn std::error::Error>> {
75 let path = env::home_dir()
76 .unwrap()
77 .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
78 assert!(path.exists());
79 let czi = CziReader::create()?;
80 let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
81 let open_info = ReaderOpenInfo::new(&stream);
82 czi.open(open_info)?;
83 let metadata_segment = czi.get_metadata_segment()?;
84 let xml = metadata_segment.get_metadata_as_xml()?;
85 let s = String::try_from(&xml)?;
86 println!("xml: {}", &s[..s.len().min(100)]);
87 Ok(())
88 }
89
90 #[test]
91 fn test_libczi_pyramid_statistics() -> Result<(), Box<dyn std::error::Error>> {
92 let path = PathBuf::from("test-files/Experiment-2029.czi");
93 assert!(path.exists());
94 let czi = CziReader::create()?;
95 let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
96 let open_info = ReaderOpenInfo::new(&stream);
97 czi.open(open_info)?;
98 let s = czi.get_pyramid_statistics()?;
99 println!("xml: {}", &s[..s.len().min(100)]);
100 Ok(())
101 }
102
103 #[test]
104 fn test_libczi_document_info() -> Result<(), Box<dyn std::error::Error>> {
105 let path = PathBuf::from("test-files/Experiment-2029.czi");
106 assert!(path.exists());
107 let czi = CziReader::create()?;
108 let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
109 let open_info = ReaderOpenInfo::new(&stream);
110 czi.open(open_info)?;
111 let metadata_segment = czi.get_metadata_segment()?;
112 let document_info = metadata_segment.get_czi_document_info()?;
113 let general_document_info = document_info.get_general_document_info()?;
114 println!(
115 "xml: {}",
116 &general_document_info[..general_document_info.len().min(100)]
117 );
118 Ok(())
119 }
120
121 #[test]
122 fn test_lib_czi_build_information() -> Result<(), Box<dyn std::error::Error>> {
123 let build_info = LibCZIBuildInformation::get()?;
124 println!(
125 "compiler information: {:?}",
126 build_info.get_compiler_information()
127 );
128 println!("repository url: {:?}", build_info.get_repository_url());
129 println!(
130 "repository branch: {:?}",
131 build_info.get_repository_branch()
132 );
133 println!("repository tag: {:?}", build_info.get_repository_tag());
134 Ok(())
135 }
136}