Add tests and clean up add/sub/mul for positions

This commit is contained in:
kageru 2021-07-08 19:58:30 +02:00
parent 123d9bd1fb
commit 4b4f4fbf80
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 25 additions and 15 deletions

View File

@ -61,9 +61,22 @@ pub fn draw_ascii<T: Display + Default, S: BuildHasher>(coordinates: &HashMap<Po
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(PositionND::from([0, 2]) + PositionND::from([-1, 0]), [-1, 2].into());
assert_eq!(PositionND::from([0, -1]) + PositionND::from(Direction::Up), [0, 0].into());
}
#[test]
fn test_sub() {
assert_eq!(PositionND::from([0, 2]) - PositionND::from([-1, 0]), [1, 2].into());
assert_eq!(PositionND::from([0, -1]) - PositionND::from([0, -1]), [0, 0].into());
}
#[test]
fn test_mul() {
assert_eq!(PositionND::from([0, 2]) * 5, [0, 10].into());
assert_eq!(PositionND::from([0, -1]) * -2, [0, 2].into());
}
}

View File

@ -117,36 +117,33 @@ impl<const DIMS: usize> PositionND<DIMS> {
impl<const D: usize> Mul<i64> for PositionND<D> {
type Output = PositionND<D>;
fn mul(self, rhs: i64) -> Self::Output {
let mut points = [0; D];
for i in 0..D {
points[i] = self.points[i] * rhs;
fn mul(mut self, rhs: i64) -> Self::Output {
for p in self.points.iter_mut() {
*p *= rhs;
}
PositionND { points }
self
}
}
impl<const D: usize> Add<PositionND<D>> for PositionND<D> {
type Output = PositionND<D>;
fn add(self, rhs: PositionND<D>) -> Self::Output {
let mut points = [0; D];
for i in 0..D {
points[i] = self.points[i] + rhs.points[i];
fn add(mut self, rhs: PositionND<D>) -> Self::Output {
for (x, y) in self.points.iter_mut().zip(rhs.points) {
*x += y;
}
PositionND { points }
self
}
}
impl<const D: usize> Sub<PositionND<D>> for PositionND<D> {
type Output = PositionND<D>;
fn sub(self, rhs: PositionND<D>) -> Self::Output {
let mut points = [0; D];
for i in 0..D {
points[i] = self.points[i] - rhs.points[i];
fn sub(mut self, rhs: PositionND<D>) -> Self::Output {
for (x, y) in self.points.iter_mut().zip(rhs.points) {
*x -= y;
}
PositionND { points }
self
}
}