1#![no_std]
40#[warn(missing_debug_implementations, missing_docs)]
41pub mod parse;
42pub mod render;
43pub mod render_slice;
44
45pub use midi_types;
46
47#[cfg(test)]
48pub(crate) mod test {
49 use {
50 crate::{parse::MidiTryParseSlice, render_slice::MidiRenderSlice},
51 midi_types::{Channel, Control, MidiMessage, Note, Program, QuarterFrame, Value14, Value7},
52 };
53
54 lazy_static::lazy_static! {
55 pub(crate) static ref TEST_1BYTE: [MidiMessage; 7] = [
56 MidiMessage::TuneRequest,
57 MidiMessage::TimingClock,
58 MidiMessage::Start,
59 MidiMessage::Continue,
60 MidiMessage::Stop,
61 MidiMessage::ActiveSensing,
62 MidiMessage::Reset,
63 ];
64 pub(crate) static ref TEST_2BYTE: [MidiMessage; 4] = [
65 MidiMessage::ProgramChange(Channel::from(0), Program::from(0)),
66 MidiMessage::ChannelPressure(Channel::from(1), Value7::from(2)),
67 MidiMessage::QuarterFrame(QuarterFrame::from(23)),
68 MidiMessage::SongSelect(Value7::from(3)),
69 ];
70 pub(crate) static ref TEST_3BYTE: [MidiMessage; 6] = [
71 MidiMessage::NoteOff(Channel::from(2), Note::from(3), Value7::from(1)),
72 MidiMessage::NoteOn(Channel::from(3), Note::from(120), Value7::from(120)),
73 MidiMessage::KeyPressure(Channel::from(3), Note::from(120), Value7::from(1)),
74 MidiMessage::ControlChange(Channel::from(5), Control::from(23), Value7::from(23)),
75 MidiMessage::PitchBendChange(Channel::from(15), Value14::from((23, 23))),
76 MidiMessage::SongPositionPointer(Value14::from((0, 0))),
77 ];
78 }
79
80 #[test]
81 fn parse_rendered() {
82 let mut buf3 = [0, 0, 0];
83 let mut buf100 = [0; 100];
84 for v in (*TEST_1BYTE).iter() {
85 assert_eq!(1, v.render_slice(&mut buf3), "{:?}", v);
86 assert_eq!(Ok(v.clone()), MidiMessage::try_parse_slice(buf3.as_slice()));
87 assert_eq!(1, v.render_slice(&mut buf100), "{:?}", v);
88 assert_eq!(
89 Ok(v.clone()),
90 MidiMessage::try_parse_slice(buf100.as_slice())
91 );
92 }
93
94 for v in (*TEST_2BYTE).iter() {
95 assert_eq!(2, v.render_slice(&mut buf3), "{:?}", v);
96 assert_eq!(Ok(v.clone()), MidiMessage::try_parse_slice(buf3.as_slice()));
97 assert_eq!(2, v.render_slice(&mut buf100), "{:?}", v);
98 assert_eq!(
99 Ok(v.clone()),
100 MidiMessage::try_parse_slice(buf100.as_slice())
101 );
102 }
103
104 for v in (*TEST_3BYTE).iter() {
105 assert_eq!(3, v.render_slice(&mut buf3), "{:?}", v);
106 assert_eq!(Ok(v.clone()), MidiMessage::try_parse_slice(buf3.as_slice()));
107 assert_eq!(3, v.render_slice(&mut buf100), "{:?}", v);
108 assert_eq!(
109 Ok(v.clone()),
110 MidiMessage::try_parse_slice(buf100.as_slice())
111 );
112 }
113 }
114}