#[doc(hidden)]
#[macro_export]
macro_rules! base_matrix_eq {
($failure_handler:expr, $x:expr, $y:expr) => {
{
use $crate::{compare_matrices};
use $crate::comparators::ExactElementwiseComparator;
let comp = ExactElementwiseComparator;
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}\n
Please see the documentation for ways to compare matrices approximately.\n",
failure);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = exact) => {
{
use $crate::{compare_matrices};
use $crate::comparators::ExactElementwiseComparator;
let comp = ExactElementwiseComparator;
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}\n", failure);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = abs, tol = $tol:expr) => {
{
use $crate::{compare_matrices};
use $crate::comparators::AbsoluteElementwiseComparator;
let comp = AbsoluteElementwiseComparator { tol: $tol };
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}\n", failure);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = ulp, tol = $tol:expr) => {
{
use $crate::{compare_matrices};
use $crate::comparators::UlpElementwiseComparator;
let comp = UlpElementwiseComparator { tol: $tol };
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}\n", failure);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = float) => {
{
use $crate::{compare_matrices};
use $crate::comparators::FloatElementwiseComparator;
let comp = FloatElementwiseComparator::default();
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}", failure);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = float, $($key:ident = $val:expr),+) => {
{
use $crate::{compare_matrices};
use $crate::comparators::FloatElementwiseComparator;
let comp = FloatElementwiseComparator::default()$(.$key($val))+;
let result = compare_matrices(&$x, &$y, &comp);
if let Err(failure) = result {
let message = format!("{}", failure);
return $failure_handler(message);
}
}
};
}
#[macro_export]
macro_rules! assert_matrix_eq {
($($args:tt)*) => {
$crate::base_matrix_eq!(|msg| panic!("{}", msg), $($args)*);
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! base_scalar_eq {
($failure_handler:expr, $x:expr, $y:expr) => {
{
use $crate::{compare_scalars};
use $crate::comparators::ExactElementwiseComparator;
use std::borrow::Borrow;
let comp = ExactElementwiseComparator;
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n
Please see the documentation for ways to compare scalars approximately.\n",
error);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = exact) => {
{
use $crate::{compare_scalars};
use $crate::comparators::ExactElementwiseComparator;
use std::borrow::Borrow;
let comp = ExactElementwiseComparator;
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n", error);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = abs, tol = $tol:expr) => {
{
use $crate::{compare_scalars};
use $crate::comparators::AbsoluteElementwiseComparator;
use std::borrow::Borrow;
let comp = AbsoluteElementwiseComparator { tol: $tol.clone() };
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n", error);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = ulp, tol = $tol:expr) => {
{
use $crate::{compare_scalars};
use $crate::comparators::UlpElementwiseComparator;
use std::borrow::Borrow;
let comp = UlpElementwiseComparator { tol: $tol.clone() };
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n", error);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = float) => {
{
use $crate::{compare_scalars};
use $crate::comparators::FloatElementwiseComparator;
use std::borrow::Borrow;
let comp = FloatElementwiseComparator::default();
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n", error);
return $failure_handler(message);
}
}
};
($failure_handler:expr, $x:expr, $y:expr, comp = float, $($key:ident = $val:expr),+) => {
{
use $crate::{compare_scalars};
use $crate::comparators::FloatElementwiseComparator;
use std::borrow::Borrow;
let comp = FloatElementwiseComparator::default()$(.$key($val))+;
let result = compare_scalars($x.borrow(), $y.borrow(), comp);
if let Err(error) = result {
let message = format!("{}\n", error);
return $failure_handler(message);
}
}
};
}
#[macro_export]
macro_rules! assert_scalar_eq {
($($args:tt)*) => {
$crate::base_scalar_eq!(|msg| panic!("{}", msg), $($args)*);
};
}