use super::CSVBinaryMatrix;
impl PartialEq for CSVBinaryMatrix {
fn eq(self: &CSVBinaryMatrix, other: &CSVBinaryMatrix) -> bool {
if self.number_of_rows != other.number_of_rows {
return false;
}
if self.number_of_columns != other.number_of_columns {
return false;
}
if self.distances.len() != other.distances.len() {
return false;
}
if self.is_reversed == other.is_reversed {
return self.distances == other.distances;
}
let mut distance_index = 0;
let mut rev_distance_index = other.distances.len();
while distance_index < self.distances.len() {
if self.distances[distance_index] != other.distances[rev_distance_index - 1] {
return false;
}
distance_index += 1;
rev_distance_index -= 1;
}
true
}
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use rstest::rstest;
use super::super::ops::tests::matrix_a_rev;
use super::super::tests::{matrix_a, matrix_a_bis};
use super::super::CSVBinaryMatrix;
#[rstest]
fn no_equal_number_of_rows(matrix_a: CSVBinaryMatrix) {
let matrix_b = CSVBinaryMatrix::try_from(&[[1, 1, 1]]).unwrap();
assert!(matrix_a != matrix_b);
}
#[rstest]
fn no_equal_number_of_columns(matrix_a: CSVBinaryMatrix) {
let matrix_b = CSVBinaryMatrix::try_from(&[[1, 1], [1, 0], [0, 1]]).unwrap();
assert!(matrix_a != matrix_b);
}
#[rstest]
fn no_equal_distances(matrix_a: CSVBinaryMatrix) {
let matrix_b = CSVBinaryMatrix::try_from(&[[1, 1, 1], [1, 0, 1], [0, 1, 0]]).unwrap();
assert!(matrix_a != matrix_b);
}
#[rstest]
fn equal_when_rev_bools_equal(matrix_a: CSVBinaryMatrix) {
let matrix_b = matrix_a.clone();
assert_eq!(matrix_a, matrix_b);
}
#[rstest]
fn equal_when_rev_bools_differ(matrix_a: CSVBinaryMatrix, matrix_a_bis: CSVBinaryMatrix) {
assert_eq!(matrix_a, matrix_a_bis);
}
#[rstest]
fn no_equal_when_rev_bools_differ(matrix_a: CSVBinaryMatrix, matrix_a_rev: CSVBinaryMatrix) {
assert!(matrix_a != matrix_a_rev);
}
}