1use local_vec::CopyLocalVec;
2
3mod from;
4mod ux;
5mod as_ref;
6mod eq;
7
8type VlqBuf = CopyLocalVec<u8, 4>;
9
10#[doc = include_str!("../README.md")]
12#[cfg(doctest)]
13struct ReadmeDoctests;
14
15#[derive(Copy, Clone, Debug)]
24pub struct MidiVlq(VlqBuf);
25
26impl MidiVlq {
27 pub fn len(&self) -> usize {
29 self.0.len()
30 }
31
32 pub fn to_u32(&self) -> u32 {
33 <Self as Into<u32>>::into(*self)
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::MidiVlq;
40 #[test]
41 fn it_works() {
42 let vlq = MidiVlq::from(0u8);
43 assert_eq!(vlq, [0]);
44 assert_eq!(vlq.to_u32(), 0);
45
46 let vlq = MidiVlq::from(0x40u8);
47 assert_eq!(vlq, [0x40]);
48 assert_eq!(vlq.to_u32(), 0x40);
49
50 let vlq = MidiVlq::from(0x7fu8);
51 assert_eq!(vlq, [0x7f]);
52 assert_eq!(vlq.to_u32(), 0x7f);
53
54 let vlq = MidiVlq::from(0x80u8);
55 assert_eq!(vlq, [0x81, 0x00]);
56 assert_eq!(vlq.to_u32(), 0x80);
57
58 let vlq = MidiVlq::from(0x2000u16);
59 assert_eq!(vlq, [0xC0, 0x00]);
60 assert_eq!(vlq.to_u32(), 0x2000);
61
62 let vlq = MidiVlq::from(0x3fffu16);
63 assert_eq!(vlq, [0xff, 0x7f]);
64 assert_eq!(vlq.to_u32(), 0x3fff);
65
66 let vlq = MidiVlq::from(0x4000u16);
67 assert_eq!(vlq, [0x81, 0x80, 0x00]);
68 assert_eq!(vlq.to_u32(), 0x4000);
69
70 let vlq = MidiVlq::try_from(0x10_0000u32);
71 assert!(vlq.is_ok());
72 let vlq = vlq.unwrap();
73 assert_eq!(vlq, [0xc0, 0x80, 0x00]);
74 assert_eq!(vlq.to_u32(), 0x10_0000);
75
76 let vlq = MidiVlq::try_from(0x1f_ffffu32);
77 assert!(vlq.is_ok());
78 let vlq = vlq.unwrap();
79 assert_eq!(vlq, [0xff, 0xff, 0x7f]);
80 assert_eq!(vlq.to_u32(), 0x1f_ffff);
81
82 let vlq = MidiVlq::try_from(0x20_0000u32);
83 assert!(vlq.is_ok());
84 let vlq = vlq.unwrap();
85 assert_eq!(vlq, [0x81, 0x80, 0x80, 0x00]);
86 assert_eq!(vlq.to_u32(), 0x20_0000);
87
88 let vlq = MidiVlq::try_from(0x800_0000u32);
89 assert!(vlq.is_ok());
90 let vlq = vlq.unwrap();
91 assert_eq!(vlq, [0xc0, 0x80, 0x80, 0x00]);
92 assert_eq!(vlq.to_u32(), 0x800_0000);
93
94 let vlq = MidiVlq::try_from(0x0fff_ffffu32);
95 assert!(vlq.is_ok());
96 let vlq = vlq.unwrap();
97 assert_eq!(vlq, [0xff, 0xff, 0xff, 0x7f]);
98 assert_eq!(vlq.to_u32(), 0x0fff_ffff);
99 }
100}