pub struct Img<T> {
width: usize,
heigth: usize,
depth: usize,
spectrum: usize,
data: Vec<T>,
}
impl<T: Copy> Img<T> {
pub fn new(width: usize, heigth: usize, depth: usize, spectrum: usize, value: T) -> Img<T> {
let data_size = width * heigth * depth * spectrum;
let mut data: Vec<T> = Vec::with_capacity(data_size);
for _i in 0..data_size {
data.push(value);
}
Img::<T> {
width,
heigth,
depth,
spectrum,
data
}
}
pub fn heigth(&self) -> usize {
self.heigth
}
pub fn width(&self) -> usize {
self.width
}
pub fn depth(&self) -> usize {
self.depth
}
pub fn spectrum(&self) -> usize {
self.spectrum
}
}
#[cfg(test)]
mod tests {
use crate::Img;
fn create_img() -> Img<u8> {
Img::new(128, 256, 1, 3, 0)
}
#[test]
fn test_width() {
let img = create_img();
assert_eq!(128, img.width());
}
#[test]
fn test_heigth() {
let img = create_img();
assert_eq!(256, img.heigth());
}
#[test]
fn test_depth() {
let img = create_img();
assert_eq!(1, img.depth());
}
#[test]
fn test_spectrum() {
let img = create_img();
assert_eq!(3, img.spectrum());
}
}