UI: multi word filtering in search menu
[blender.git] / tests / gtests / testing / testing.h
1 #ifndef __BLENDER_TESTING_H__
2 #define __BLENDER_TESTING_H__
3
4 #include "glog/logging.h"
5 #include "gflags/gflags.h"
6 #include "gtest/gtest.h"
7
8 #define EXPECT_V3_NEAR(a, b, eps) \
9   { \
10     EXPECT_NEAR(a[0], b[0], eps); \
11     EXPECT_NEAR(a[1], b[1], eps); \
12     EXPECT_NEAR(a[2], b[2], eps); \
13   } (void) 0
14
15 #define EXPECT_MATRIX_NEAR(a, b, tolerance) \
16 do { \
17   bool dims_match = (a.rows() == b.rows()) && (a.cols() == b.cols()); \
18   EXPECT_EQ(a.rows(), b.rows()) << "Matrix rows don't match."; \
19   EXPECT_EQ(a.cols(), b.cols()) << "Matrix cols don't match."; \
20   if (dims_match) { \
21     for (int r = 0; r < a.rows(); ++r) { \
22       for (int c = 0; c < a.cols(); ++c) { \
23         EXPECT_NEAR(a(r, c), b(r, c), tolerance) \
24           << "r=" << r << ", c=" << c << "."; \
25       } \
26     } \
27   } \
28 } while(false);
29
30 #define EXPECT_MATRIX_NEAR_ZERO(a, tolerance) \
31 do { \
32   for (int r = 0; r < a.rows(); ++r) { \
33     for (int c = 0; c < a.cols(); ++c) { \
34       EXPECT_NEAR(0.0, a(r, c), tolerance) \
35         << "r=" << r << ", c=" << c << "."; \
36     } \
37   } \
38 } while(false);
39
40 #define EXPECT_MATRIX_EQ(a, b) \
41 do { \
42   bool dims_match = (a.rows() == b.rows()) && (a.cols() == b.cols()); \
43   EXPECT_EQ(a.rows(), b.rows()) << "Matrix rows don't match."; \
44   EXPECT_EQ(a.cols(), b.cols()) << "Matrix cols don't match."; \
45   if (dims_match) { \
46     for (int r = 0; r < a.rows(); ++r) { \
47       for (int c = 0; c < a.cols(); ++c) { \
48         EXPECT_EQ(a(r, c), b(r, c)) \
49           << "r=" << r << ", c=" << c << "."; \
50       } \
51     } \
52   } \
53 } while(false);
54
55 // Check that sin(angle(a, b)) < tolerance.
56 #define EXPECT_MATRIX_PROP(a, b, tolerance) \
57 do { \
58   bool dims_match = (a.rows() == b.rows()) && (a.cols() == b.cols()); \
59   EXPECT_EQ(a.rows(), b.rows()) << "Matrix rows don't match."; \
60   EXPECT_EQ(a.cols(), b.cols()) << "Matrix cols don't match."; \
61   if (dims_match) { \
62     double c = CosinusBetweenMatrices(a, b); \
63     if (c * c < 1) { \
64       double s = sqrt(1 - c * c); \
65       EXPECT_NEAR(0, s, tolerance); \
66     } \
67   } \
68 } while(false);
69
70 #ifdef LIBMV_NUMERIC_NUMERIC_H
71 template<class TMat>
72 double CosinusBetweenMatrices(const TMat &a, const TMat &b) {
73   return (a.array() * b.array()).sum() /
74       libmv::FrobeniusNorm(a) / libmv::FrobeniusNorm(b);
75 }
76 #endif
77
78 template <typename T>
79 inline void EXPECT_EQ_ARRAY(const T *expected, T *actual, const size_t N) {
80   for(size_t i = 0; i < N; ++i) {
81     EXPECT_EQ(expected[i], actual[i]);
82   }
83 }
84
85 template <typename T>
86 inline void EXPECT_EQ_ARRAY_ND(const T *expected, T *actual, const size_t N, const size_t D) {
87   for(size_t i = 0; i < N; ++i) {
88     for(size_t j = 0; j < D; ++j) {
89       EXPECT_EQ(expected[i][j], actual[i][j]);
90     }
91   }
92 }
93
94 #endif  // __BLENDER_TESTING_H__