fitsio_sys_bindgen/
lib.rs1#![allow(
52 non_upper_case_globals,
53 non_camel_case_types,
54 non_snake_case,
55 improper_ctypes
56)]
57#![allow(
59 clippy::unreadable_literal,
60 clippy::transmute_ptr_to_ptr,
61 clippy::redundant_static_lifetimes,
62 clippy::missing_safety_doc,
63 clippy::useless_transmute,
64 clippy::trivially_copy_pass_by_ref,
65 clippy::too_many_arguments,
66 clippy::should_implement_trait,
67 clippy::upper_case_acronyms
68)]
69
70include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
71
72#[cfg(test)]
73mod test {
74 use super::*;
75 use libc::c_char;
76 use std::ffi;
77 use std::ptr;
78
79 #[test]
80 fn raw_opening_an_existing_file() {
81 let mut fptr = ptr::null_mut();
82 let mut status = -1;
83 let c_filename = ffi::CString::new("../testdata/full_example.fits").unwrap();
84
85 unsafe {
86 ffopen(
87 &mut fptr as *mut *mut fitsfile,
88 c_filename.as_ptr(),
89 0,
90 &mut status,
91 );
92 ffclos(fptr, &mut status);
93 }
94
95 assert_eq!(status, 0);
96 }
97
98 #[test]
99 fn raw_creating_a_new_file() {
100 let tdir = tempfile::Builder::new()
102 .prefix("fitsio-")
103 .tempdir()
104 .unwrap();
105 let filename = tdir.path().join("test.fits");
106 assert!(!filename.exists());
107
108 let mut fptr = ptr::null_mut();
109 let mut status = 0;
110 let c_filename = ffi::CString::new(filename.to_str().unwrap()).unwrap();
111
112 unsafe {
113 ffinit(
114 &mut fptr as *mut *mut fitsfile,
115 c_filename.as_ptr(),
116 &mut status,
117 );
118 }
119
120 assert!(filename.exists());
121 }
122
123 #[test]
124 fn getting_current_hdu_number() {
125 let mut fptr = ptr::null_mut();
126 let mut status = -1;
127 let c_filename = ffi::CString::new("../testdata/full_example.fits").unwrap();
128 let mut hdu_num = -1;
129
130 unsafe {
131 ffopen(
132 &mut fptr as *mut *mut fitsfile,
133 c_filename.as_ptr(),
134 0,
135 &mut status,
136 );
137 ffghdn(fptr, &mut hdu_num);
138 ffclos(fptr, &mut status);
139 }
140
141 assert_eq!(hdu_num, 1);
142 }
143
144 #[test]
145 fn changing_hdu_by_absolute_number() {
146 let mut fptr = ptr::null_mut();
147 let mut status = -1;
148 let c_filename = ffi::CString::new("../testdata/full_example.fits").unwrap();
149
150 let mut hdu_type = 0;
151 let mut hdu_num = 0;
152
153 unsafe {
154 ffopen(
155 &mut fptr as *mut *mut fitsfile,
156 c_filename.as_ptr(),
157 0,
158 &mut status,
159 );
160 ffmahd(fptr, 2, &mut hdu_type, &mut status);
161 ffghdn(fptr, &mut hdu_num);
162 ffclos(fptr, &mut status);
163 }
164
165 assert_eq!(hdu_num, 2);
166 }
167
168 #[test]
169 fn reading_header_key_value() {
170 let mut fptr = ptr::null_mut();
171 let mut status = -1;
172 let c_filename = ffi::CString::new("../testdata/full_example.fits").unwrap();
173
174 let mut long_value = 0;
175 let mut float_value = 0.0;
176 let mut double_value = 0.0;
177 let keyname = ffi::CString::new("INTTEST").unwrap();
178 let double_keyname = ffi::CString::new("DBLTEST").unwrap();
179 let mut comment: Vec<c_char> = vec![0; 73];
180 unsafe {
181 ffopen(
182 &mut fptr as *mut *mut fitsfile,
183 c_filename.as_ptr(),
184 0,
185 &mut status,
186 );
187 ffgkyj(
188 fptr,
189 keyname.as_ptr(),
190 &mut long_value,
191 ptr::null_mut(),
192 &mut status,
193 );
194 ffgkye(
195 fptr,
196 keyname.as_ptr(),
197 &mut float_value,
198 ptr::null_mut(),
199 &mut status,
200 );
201
202 ffgkyd(
204 fptr,
205 double_keyname.as_ptr(),
206 &mut double_value,
207 comment.as_mut_ptr(),
208 &mut status,
209 );
210 ffclos(fptr, &mut status);
211 }
212
213 assert_eq!(long_value, 42);
214 assert_eq!(float_value, 42.0);
215 assert_eq!(double_value, 3. / 32.);
216
217 let comment: Vec<u8> = comment
219 .iter()
220 .map(|&x| x as u8)
221 .filter(|&x| x != 0)
222 .collect();
223 let comment = String::from_utf8(comment).unwrap();
224 assert_eq!(comment, "Double value");
225 }
226
227 }