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"));
6
7#[cfg(test)]
8mod tests {
9 use super::*;
10 use std::mem;
11 use std::ptr;
12
13 #[test]
14 fn convert_pattern_data() {
15 let mut parts = [unsafe { mem::zeroed::<VolcaSample_Part_Data>() }; VOLCASAMPLE_NUM_OF_PART as usize];
16 for i in 0..VOLCASAMPLE_NUM_OF_PART as usize {
17 parts[i] = VolcaSample_Part_Data {
18 SampleNum: i as u16,
19 StepOn: 1 << i,
20 Accent: 0,
21 Reserved: 0,
22 Level: 127,
23 Param: [
24 100,
26 64,
28 64,
31 0,
33 127,
35 64,
37 0,
39 127,
41 0,
43 127,
45 127
47 ],
48 FuncMemoryPart: 0,
49 Padding1: [0; 11],
50 Motion: [[0; VOLCASAMPLE_NUM_OF_STEP as usize]; VOLCASAMPLE_NUM_OF_MOTION as usize]
51 }
52 }
53
54 let mut pattern = VolcaSample_Pattern_Data {
55 Header: VOLCASAMPLE_PATTERN_HEADER,
56 DevCode: VOLCASAMPLE_PATTERN_DEVCODE as u16,
57 Reserved: [0; 2],
58 ActiveStep: 0b1111_1111_1111_1111,
59 Padding1: [0; 22],
60 Part: parts,
61 Padding2: [0; 28],
62 Footer: VOLCASAMPLE_PATTERN_FOOTER
63 };
64
65 let mut data = SyroData {
66 DataType: DataType_Pattern,
67 pData: &mut pattern as *mut _ as *mut u8,
68 Number: 0,
69 Size: mem::size_of::<VolcaSample_Pattern_Data>() as u32,
70 Quality: 16,
71 Fs: 0,
72 SampleEndian: LittleEndian
73 };
74
75 let mut handle: SyroHandle = ptr::null_mut();
76 let mut n_frames: u32 = 0;
77
78 let status = unsafe { SyroVolcaSample_Start(
79 &mut handle,
80 &mut data,
81 1,
82 0,
83 &mut n_frames
84 ) };
85 assert_eq!(status, Status_Success);
86 assert_eq!(n_frames, 138448);
87
88 for _ in 0..n_frames {
89 let mut left: i16 = 0;
90 let mut right: i16 = 0;
91 let status = unsafe { SyroVolcaSample_GetSample(handle, &mut left, &mut right) };
92 assert_eq!(status, Status_Success);
93 }
94
95 let status = unsafe { SyroVolcaSample_End(handle) };
96 assert_eq!(status, Status_Success);
97 }
98}