|
16 | 16 | }
|
17 | 17 | Some(Self { sector_size, data })
|
18 | 18 | }
|
| 19 | + |
| 20 | + pub fn data(&self) -> &T { |
| 21 | + &self.data |
| 22 | + } |
19 | 23 | }
|
20 | 24 |
|
21 | 25 | impl<T> BlockDevice for MemoryBlockDevice<T>
|
|
53 | 57 |
|
54 | 58 | #[cfg(test)]
|
55 | 59 | mod tests {
|
| 60 | + use alloc::vec; |
| 61 | + |
56 | 62 | use crate::block::mem::MemoryBlockDevice;
|
57 | 63 | use crate::BlockDevice;
|
58 |
| - use alloc::vec; |
59 | 64 |
|
60 | 65 | #[test]
|
61 | 66 | fn test_read_at_short() {
|
@@ -111,4 +116,53 @@ mod tests {
|
111 | 116 | let expected = [1_u8, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
112 | 117 | assert_eq!(expected, buf);
|
113 | 118 | }
|
| 119 | + |
| 120 | + #[test] |
| 121 | + fn test_write_at() { |
| 122 | + let data = vec![0xFF_u8; 16]; |
| 123 | + let mut device = MemoryBlockDevice::try_new(4, data).unwrap(); |
| 124 | + |
| 125 | + device.write_at(0, &[1, 2, 3, 4, 5, 6, 7, 8]).unwrap(); |
| 126 | + assert_eq!(&[1, 2, 3, 4, 5, 6, 7, 8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 127 | + } |
| 128 | + |
| 129 | + #[test] |
| 130 | + fn test_write_at_unaligned() { |
| 131 | + let data = vec![0xFF_u8; 16]; |
| 132 | + let mut device = MemoryBlockDevice::try_new(4, data).unwrap(); |
| 133 | + |
| 134 | + device.write_at(1, &[1, 2, 3, 4, 5, 6, 7, 8]).unwrap(); |
| 135 | + assert_eq!(&[0xFF, 1, 2, 3, 4, 5, 6, 7, 8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 136 | + } |
| 137 | + |
| 138 | + #[test] |
| 139 | + fn test_write_at_aligned_short() { |
| 140 | + let data = vec![0xFF_u8; 16]; |
| 141 | + let mut device = MemoryBlockDevice::try_new(4, data).unwrap(); |
| 142 | + |
| 143 | + device.write_at(0, &[1, 2]).unwrap(); |
| 144 | + assert_eq!(&[1, 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 145 | + device.write_at(0, &[1, 2, 3]).unwrap(); |
| 146 | + assert_eq!(&[1, 2, 3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 147 | + } |
| 148 | + |
| 149 | + #[test] |
| 150 | + fn test_write_at_unaligned_short() { |
| 151 | + let data = vec![0xFF_u8; 16]; |
| 152 | + let mut device = MemoryBlockDevice::try_new(4, data).unwrap(); |
| 153 | + |
| 154 | + device.write_at(1, &[1, 2]).unwrap(); |
| 155 | + assert_eq!(&[0xFF, 1, 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 156 | + device.write_at(1, &[1, 2, 3]).unwrap(); |
| 157 | + assert_eq!(&[0xFF, 1, 2, 3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 158 | + } |
| 159 | + |
| 160 | + #[test] |
| 161 | + fn test_write_at_aligned_one_sector() { |
| 162 | + let data = vec![0xFF_u8; 16]; |
| 163 | + let mut device = MemoryBlockDevice::try_new(4, data).unwrap(); |
| 164 | + |
| 165 | + device.write_at(0, &[1, 2, 3, 4]).unwrap(); |
| 166 | + assert_eq!(&[1, 2, 3, 4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], device.data().as_slice()); |
| 167 | + } |
114 | 168 | }
|
0 commit comments