Home | History | Annotate | Download | only in test
      1 // Copyright 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CC_TEST_GEOMETRY_TEST_UTILS_H_
      6 #define CC_TEST_GEOMETRY_TEST_UTILS_H_
      7 
      8 namespace gfx {
      9 class Transform;
     10 }
     11 
     12 namespace cc {
     13 
     14 // These are macros instead of functions so that we get useful line numbers
     15 // where a test failed.
     16 #define EXPECT_FLOAT_RECT_EQ(expected, actual) \
     17 do { \
     18   EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
     19   EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
     20   EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \
     21   EXPECT_FLOAT_EQ((expected).height(), (actual).height()); \
     22 } while (false)
     23 
     24 #define EXPECT_RECT_NEAR(expected, actual, abs_error) \
     25 do { \
     26   EXPECT_NEAR((expected).x(), (actual).x(), (abs_error)); \
     27   EXPECT_NEAR((expected).y(), (actual).y(), (abs_error)); \
     28   EXPECT_NEAR((expected).width(), (actual).width(), (abs_error)); \
     29   EXPECT_NEAR((expected).height(), (actual).height(), (abs_error)); \
     30 } while (false)
     31 
     32 #define EXPECT_RECT_EQ(expected, actual) \
     33 do { \
     34   EXPECT_EQ((expected).x(), (actual).x()); \
     35   EXPECT_EQ((expected).y(), (actual).y()); \
     36   EXPECT_EQ((expected).width(), (actual).width()); \
     37   EXPECT_EQ((expected).height(), (actual).height()); \
     38 } while (false)
     39 
     40 #define EXPECT_SIZE_EQ(expected, actual) \
     41 do { \
     42   EXPECT_EQ((expected).width(), (actual).width()); \
     43   EXPECT_EQ((expected).height(), (actual).height()); \
     44 } while (false)
     45 
     46 #define EXPECT_POINT_EQ(expected, actual) \
     47 do { \
     48   EXPECT_EQ((expected).x(), (actual).x()); \
     49   EXPECT_EQ((expected).y(), (actual).y()); \
     50 } while (false)
     51 
     52 #define EXPECT_POINT3F_EQ(expected, actual) \
     53 do { \
     54   EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
     55   EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
     56   EXPECT_FLOAT_EQ((expected).z(), (actual).z()); \
     57 } while (false)
     58 
     59 #define EXPECT_VECTOR_EQ(expected, actual) \
     60 do { \
     61   EXPECT_EQ((expected).x(), (actual).x()); \
     62   EXPECT_EQ((expected).y(), (actual).y()); \
     63 } while (false)
     64 
     65 #define EXPECT_VECTOR2DF_EQ(expected, actual) \
     66 do { \
     67   EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
     68   EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
     69 } while (false)
     70 
     71 #define EXPECT_FLOAT_ARRAY_EQ(expected, actual, count) \
     72 do { \
     73   for (int i = 0; i < count; i++) { \
     74     EXPECT_FLOAT_EQ((expected)[i], (actual)[i]); \
     75   } \
     76 } while (false)
     77 
     78 // This is a function rather than a macro because when this is included as a
     79 // macro in bulk, it causes a significant slow-down in compilation time. This
     80 // problem exists with both gcc and clang, and bugs have been filed at
     81 // http://llvm.org/bugs/show_bug.cgi?id=13651
     82 // and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54337
     83 void ExpectTransformationMatrixEq(const gfx::Transform& expected,
     84                                   const gfx::Transform& actual);
     85 
     86 #define EXPECT_TRANSFORMATION_MATRIX_EQ(expected, actual) \
     87   do {                                                    \
     88     SCOPED_TRACE("");                                     \
     89     ExpectTransformationMatrixEq(expected, actual);       \
     90   } while (false)
     91 
     92 // Should be used in test code only, for convenience. Production code should use
     93 // the gfx::Transform::GetInverse() API.
     94 gfx::Transform Inverse(const gfx::Transform& transform);
     95 
     96 }  // namespace cc
     97 
     98 #endif  // CC_TEST_GEOMETRY_TEST_UTILS_H_
     99