use crate::test::ram::{make_config, RamStorage, BLOCK_SIZE};
use crate::{lfs_format, lfs_mount, lfs_unmount, Lfs, LfsConfig};
use core::mem::MaybeUninit;
const DEFAULT_BLOCK_COUNT: u32 = 128;
pub struct TestContext {
pub ram: RamStorage,
pub config: LfsConfig,
lfs: MaybeUninit<Lfs>,
_read_buf: alloc::vec::Vec<u8>,
_prog_buf: alloc::vec::Vec<u8>,
_lookahead_buf: alloc::vec::Vec<u8>,
}
impl TestContext {
pub fn new(block_count: u32) -> Self {
let block_size = BLOCK_SIZE;
let ram = RamStorage::new(block_size, block_count);
let read_buf = alloc::vec![0u8; block_size as usize];
let prog_buf = alloc::vec![0u8; block_size as usize];
let lookahead_buf = alloc::vec![0u8; block_size as usize];
let mut config = make_config(block_count, &ram);
config.read_buffer = read_buf.as_ptr() as *mut core::ffi::c_void;
config.prog_buffer = prog_buf.as_ptr() as *mut core::ffi::c_void;
config.lookahead_buffer = lookahead_buf.as_ptr() as *mut core::ffi::c_void;
let mut ctx = Self {
ram,
config,
lfs: MaybeUninit::zeroed(),
_read_buf: read_buf,
_prog_buf: prog_buf,
_lookahead_buf: lookahead_buf,
};
ctx.config.context = &mut ctx.ram as *mut RamStorage as *mut core::ffi::c_void;
ctx.config.read_buffer = ctx._read_buf.as_mut_ptr() as *mut core::ffi::c_void;
ctx.config.prog_buffer = ctx._prog_buf.as_mut_ptr() as *mut core::ffi::c_void;
ctx.config.lookahead_buffer = ctx._lookahead_buf.as_mut_ptr() as *mut core::ffi::c_void;
ctx
}
pub fn default_blocks() -> Self {
Self::new(DEFAULT_BLOCK_COUNT)
}
pub fn config(&self) -> *const LfsConfig {
&self.config as *const LfsConfig
}
pub fn lfs_mut(&mut self) -> *mut Lfs {
self.lfs.as_mut_ptr()
}
pub fn format(&mut self) {
let err = lfs_format(self.lfs_mut(), self.config());
assert_eq!(err, 0, "lfs_format failed: {}", err);
}
pub fn mount(&mut self) {
let err = lfs_mount(self.lfs_mut(), self.config());
assert_eq!(err, 0, "lfs_mount failed: {}", err);
}
pub fn unmount(&mut self) {
let err = lfs_unmount(self.lfs_mut());
assert_eq!(err, 0, "lfs_unmount failed: {}", err);
}
}