From f7c8ef8ad8edb0810cf78e87cad0b26b93ae4674 Mon Sep 17 00:00:00 2001 From: PaddiM8 Date: Fri, 14 Jan 2022 22:43:20 +0100 Subject: [PATCH] Equality comparison for matrices --- kalk/src/kalk_value/mod.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/kalk/src/kalk_value/mod.rs b/kalk/src/kalk_value/mod.rs index 3769d0c..b714ebb 100644 --- a/kalk/src/kalk_value/mod.rs +++ b/kalk/src/kalk_value/mod.rs @@ -928,6 +928,21 @@ impl KalkValue { && (imaginary.clone() - imaginary_rhs.clone()).abs() < ACCEPTABLE_COMPARISON_MARGIN, ), + (KalkValue::Matrix(rows), KalkValue::Matrix(rows_rhs)) => { + let mut matrices_are_equal = true; + for (row, row_rhs) in rows.iter().zip(rows_rhs) { + for (value, value_rhs) in row.iter().zip(row_rhs) { + if let KalkValue::Boolean(are_equal) = value.eq_without_unit(&value_rhs) { + if !are_equal { + matrices_are_equal = false; + } + } + } + } + + KalkValue::Boolean(matrices_are_equal) + } + (KalkValue::Vector(values), KalkValue::Vector(values_rhs)) => { let mut vecs_are_equal = true; for (value, value_rhs) in values.iter().zip(values_rhs) { @@ -954,6 +969,14 @@ impl KalkValue { || (imaginary.clone() - imaginary_rhs.clone()).abs() > ACCEPTABLE_COMPARISON_MARGIN, ), + (KalkValue::Vector(_), KalkValue::Vector(_)) + | (KalkValue::Matrix(_), KalkValue::Matrix(_)) => { + if let KalkValue::Boolean(boolean) = self.eq_without_unit(rhs) { + KalkValue::Boolean(!boolean) + } else { + KalkValue::nan() + } + } _ => KalkValue::nan(), } } @@ -1043,6 +1066,7 @@ fn calculate_matrix( // Make sure matrix is always first to avoid having to match // different orders in the next match expression. let (x, y) = match (&x, y) { + (KalkValue::Matrix(_), KalkValue::Matrix(_)) => (&x, y), (_, KalkValue::Matrix(_)) => (y, &x), _ => (&x, y), };