19#include <gtest/gtest.h>
41template <
typename X,
typename Y>
42::testing::AssertionResult
complex_are_close(X
const &x, Y
const &y,
double precision = 1.e-10) {
44 if (abs(x - y) < precision)
45 return ::testing::AssertionSuccess();
47 return ::testing::AssertionFailure() <<
"abs(x - y) = " << abs(x - y) <<
"\n x = " << x <<
"\n y = " << y;
51#define EXPECT_COMPLEX_NEAR(X, ...) EXPECT_TRUE(complex_are_close(X, __VA_ARGS__))
63template <
typename X,
typename Y>
65 if (x.shape() != y.shape())
66 return ::testing::AssertionFailure() <<
"Comparing two arrays of different size "
67 <<
"\n X = " << x <<
"\n Y = " << y;
69 return ::testing::AssertionSuccess();
71 return ::testing::AssertionFailure() <<
"Arrays have different elements\n X = " << x <<
"\n Y = " << y;
75#define EXPECT_EQ_ARRAY(X, Y) EXPECT_TRUE(array_are_equal(X, Y));
78#define EXPECT_ARRAY_EQ(X, Y) EXPECT_TRUE(array_are_equal(X, Y));
92template <
typename X,
typename Y>
93::testing::AssertionResult
array_are_close(X
const &x, Y
const &y,
double precision = 1.e-10) {
99 return ::testing::AssertionFailure() <<
"Comparing two arrays of different size "
100 <<
"\n X = " << x_reg <<
"\n Y = " << y_reg;
103 if (x_reg.
size() == 0) return ::testing::AssertionSuccess();
106 const auto maxdiff = max_element(abs(make_regular(x_reg - y_reg)));
107 if (maxdiff < precision)
108 return ::testing::AssertionSuccess();
110 return ::testing::AssertionFailure() <<
"max_element(abs(X - Y)) = " << maxdiff <<
"\n X = " << x_reg <<
"\n Y = " << y_reg;
114#define EXPECT_ARRAY_NEAR(X, ...) EXPECT_TRUE(array_are_close(X, __VA_ARGS__))
128 constexpr double eps = 1.e-10;
129 const auto max = max_element(abs(x_reg));
130 if (x_reg.
size() == 0 || max < eps)
131 return ::testing::AssertionSuccess();
133 return ::testing::AssertionFailure() <<
"max_element(abs(X)) = " << max <<
"\n X = " << x_reg;
137#define EXPECT_ARRAY_ZERO(X) EXPECT_TRUE(array_almost_zero(X))
149template <
typename X,
typename Y>
151 double precision = 1.e-12;
153 if (abs(x - y) > precision)
154 return ::testing::AssertionFailure() <<
"X = " << x <<
" and Y = " << y <<
" are different. \n Difference is: " << abs(x - y);
155 return ::testing::AssertionSuccess();
159#define EXPECT_CLOSE(X, Y) EXPECT_TRUE(generic_are_near(X, Y));
auto const & shape() const noexcept
Get the shape of the view/array.
long size() const noexcept
Get the total size of the view/array.
basic_array< ValueType, Rank, Layout, 'A', ContainerPolicy > array
Alias template of an nda::basic_array with an 'A' algebra.
constexpr int get_rank
Constexpr variable that specifies the rank of an nda::Array or of a contiguous 1-dimensional range.
::testing::AssertionResult array_almost_zero(X const &x)
Check that an array/view is close to zero, i.e. that its largest absolute element is less than 1e-10.
::testing::AssertionResult generic_are_near(X const &x, Y const &y)
Check that that two generic objects are close, i.e. that their absolute difference is less than 1e-12...
::testing::AssertionResult array_are_close(X const &x, Y const &y, double precision=1.e-10)
Check that two arrays/views are close, i.e. that they have the same shape and that the largest elemen...
::testing::AssertionResult array_are_equal(X const &x, Y const &y)
Check that two arrays/views are equal, i.e. that they have the same shape and the same elements.
::testing::AssertionResult complex_are_close(X const &x, Y const &y, double precision=1.e-10)
Check the absolute difference of two (complex) numbers.
Includes all relevant headers for the core nda library.