added mapping to grid
This commit is contained in:
@@ -3,8 +3,10 @@ use std::{
|
|||||||
ops::{Index, IndexMut},
|
ops::{Index, IndexMut},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
/// A grid structure, indexed by (x, y) tuples. The top-left coordinate is (0, 0).
|
/// A grid structure, indexed by (x, y) tuples. The top-left coordinate is (0, 0).
|
||||||
#[derive(Eq, PartialEq, Debug)]
|
#[derive(Eq, PartialEq, Debug, Clone)]
|
||||||
pub struct Grid<T> {
|
pub struct Grid<T> {
|
||||||
pub content_width: i64,
|
pub content_width: i64,
|
||||||
pub content_height: i64,
|
pub content_height: i64,
|
||||||
@@ -85,10 +87,16 @@ impl<T> Grid<T> {
|
|||||||
val,
|
val,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
// .collect_vec()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: map from T to U
|
pub fn map_values<U>(self, f: fn(T) -> U) -> Grid<U> {
|
||||||
|
let new_content = self.content.into_iter().map(f).collect_vec();
|
||||||
|
Grid {
|
||||||
|
content_width: self.content_width,
|
||||||
|
content_height: self.content_height,
|
||||||
|
content: new_content,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Grid<char> {
|
impl Grid<char> {
|
||||||
@@ -193,10 +201,16 @@ mod test {
|
|||||||
|
|
||||||
#[should_panic]
|
#[should_panic]
|
||||||
#[test]
|
#[test]
|
||||||
fn out_of_bounds_panics() {
|
fn out_of_bounds_panics1() {
|
||||||
generate()[(-1, 3)];
|
generate()[(-1, 3)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[should_panic]
|
||||||
|
#[test]
|
||||||
|
fn out_of_bounds_panics2() {
|
||||||
|
generate()[(1, 3)];
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn option_success() {
|
fn option_success() {
|
||||||
assert_eq!(Some(&'.'), generate().get((0, 0)));
|
assert_eq!(Some(&'.'), generate().get((0, 0)));
|
||||||
@@ -206,4 +220,11 @@ mod test {
|
|||||||
fn option_out_of_bounds() {
|
fn option_out_of_bounds() {
|
||||||
assert_eq!(None, generate().get((30, 0)));
|
assert_eq!(None, generate().get((30, 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn value_mapping() {
|
||||||
|
let a: Grid<char> = generate();
|
||||||
|
let b: Grid<String> = a.map_values(|old| format!("{old}string"));
|
||||||
|
assert_eq!(".string".to_string(), b[(0, 0)]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user