1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
7
8#[cfg(test)]
9mod tests {
10 use super::*;
11 use std::ffi::{CStr, CString};
12 use std::fs;
13 use std::os::raw::c_char;
14 use std::path::Path;
15
16 #[test]
17 fn test_writer_and_reader() {
18 let filename_str = "test_rust.mdf";
19 let filename = CString::new(filename_str).unwrap();
20
21 if Path::new(filename_str).exists() {
23 fs::remove_file(filename_str).unwrap();
24 }
25
26 unsafe {
27 let writer = MdfWriterInit(MdfWriterType::Mdf4Basic, filename.as_ptr());
29 assert!(!writer.is_null(), "Failed to initialize MdfWriter");
30
31 let file = MdfWriterGetFile(writer);
32 assert!(!file.is_null(), "Failed to get MdfFile from writer");
33
34 let data_group = MdfFileCreateDataGroup(file);
35 assert!(!data_group.is_null(), "Failed to create IDataGroup");
36
37 let channel_group = DataGroupCreateChannelGroup(data_group);
38 assert!(!channel_group.is_null(), "Failed to create IChannelGroup");
39
40 let channel_name = CString::new("TestChannel").unwrap();
41 let channel = ChannelGroupCreateChannel(channel_group);
42 assert!(!channel.is_null(), "Failed to create IChannel");
43 ChannelSetName(channel, channel_name.as_ptr());
44 ChannelSetDataType(channel, ChannelDataType::UnsignedIntegerLe as u8);
45 ChannelSetDataBytes(channel, 4);
46
47 assert!(
48 MdfWriterInitMeasurement(writer),
49 "Failed to init measurement"
50 );
51
52 let value: u32 = 12345;
54 ChannelSetChannelValue(channel, value, true);
55 MdfWriterSaveSample(writer, channel_group, 0);
56
57 assert!(
58 MdfWriterFinalizeMeasurement(writer),
59 "Failed to finalize measurement"
60 );
61 MdfWriterUnInit(writer);
62
63 let reader = MdfReaderInit(filename.as_ptr());
65 assert!(!reader.is_null(), "Failed to initialize MdfReader");
66 assert!(MdfReaderIsOk(reader), "MdfReader is not OK");
67
68 assert!(
69 MdfReaderReadEverythingButData(reader),
70 "Failed to read file metadata"
71 );
72
73 let read_file = MdfReaderGetFile(reader);
74 assert!(!read_file.is_null());
75
76 let dg_count = MdfFileGetDataGroupCount(read_file);
77 assert_eq!(dg_count, 1, "Expected 1 data group");
78
79 let read_dg = MdfFileGetDataGroupByIndex(read_file, 0);
80 assert!(!read_dg.is_null());
81
82 let cg_count = DataGroupGetChannelGroupCount(read_dg);
83 assert_eq!(cg_count, 1, "Expected 1 channel group");
84
85 let read_cg = DataGroupGetChannelGroupByIndex(read_dg, 0);
86 assert!(!read_cg.is_null());
87
88 let ch_count = ChannelGroupGetChannelCount(read_cg);
89 assert_eq!(ch_count, 1, "Expected 1 channel");
90
91 let read_ch = ChannelGroupGetChannelByIndex(read_cg, 0);
92 assert!(!read_ch.is_null());
93
94 let mut buffer: [c_char; 128] = [0; 128];
95 ChannelGetName(read_ch, buffer.as_mut_ptr(), buffer.len());
96 let read_channel_name = CStr::from_ptr(buffer.as_ptr()).to_str().unwrap();
97
98 assert_eq!(
99 read_channel_name, "TestChannel",
100 "Channel name does not match"
101 );
102
103 MdfReaderUnInit(reader);
104 }
105
106 if Path::new(filename_str).exists() {
108 fs::remove_file(filename_str).unwrap();
109 }
110 }
111}