use alloc::vec::Vec;
use super::Storage;
pub struct DynamicStorage<T> {
data: Vec<T>,
}
impl<T> DynamicStorage<T> {
pub fn new(data: Vec<T>) -> Self {
Self { data }
}
}
impl<T> Storage for DynamicStorage<T> {
type Item = T;
fn len(&self) -> usize {
self.data.len()
}
fn get(&self, index: usize) -> Option<&T> {
self.data.get(index)
}
}
#[cfg(test)]
mod tests {
use super::{DynamicStorage, Storage};
#[test]
fn len_and_is_empty() {
let storage = DynamicStorage::new(vec![1, 2, 3]);
assert_eq!(storage.len(), 3);
assert!(!storage.is_empty());
let empty: DynamicStorage<i32> = DynamicStorage::new(vec![]);
assert_eq!(empty.len(), 0);
assert!(empty.is_empty());
}
#[test]
fn get_in_and_out_of_bounds() {
let storage = DynamicStorage::new(vec![1, 2, 3]);
assert_eq!(storage.get(0), Some(&1));
assert_eq!(storage.get(2), Some(&3));
assert_eq!(storage.get(3), None);
}
}