// Copyright 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_TEST_GEOMETRY_TEST_UTILS_H_
#define CC_TEST_GEOMETRY_TEST_UTILS_H_

namespace gfx {
class Transform;
}

namespace cc {

// These are macros instead of functions so that we get useful line numbers
// where a test failed.
#define EXPECT_FLOAT_RECT_EQ(expected, actual) \
do { \
  EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
  EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
  EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \
  EXPECT_FLOAT_EQ((expected).height(), (actual).height()); \
} while (false)

#define EXPECT_RECT_NEAR(expected, actual, abs_error) \
do { \
  EXPECT_NEAR((expected).x(), (actual).x(), (abs_error)); \
  EXPECT_NEAR((expected).y(), (actual).y(), (abs_error)); \
  EXPECT_NEAR((expected).width(), (actual).width(), (abs_error)); \
  EXPECT_NEAR((expected).height(), (actual).height(), (abs_error)); \
} while (false)

#define EXPECT_VECTOR_EQ(expected, actual) \
do { \
  EXPECT_EQ((expected).x(), (actual).x()); \
  EXPECT_EQ((expected).y(), (actual).y()); \
} while (false)

#define EXPECT_VECTOR2DF_EQ(expected, actual) \
do { \
  EXPECT_FLOAT_EQ((expected).x(), (actual).x()); \
  EXPECT_FLOAT_EQ((expected).y(), (actual).y()); \
} while (false)

#define EXPECT_VECTOR2DF_NEAR(expected, actual, abs_error)  \
  do {                                                      \
    EXPECT_NEAR((expected).x(), (actual).x(), (abs_error)); \
    EXPECT_NEAR((expected).y(), (actual).y(), (abs_error)); \
  } while (false)

#define EXPECT_FLOAT_ARRAY_EQ(expected, actual, count) \
do { \
  for (int i = 0; i < count; i++) { \
    EXPECT_FLOAT_EQ((expected)[i], (actual)[i]); \
  } \
} while (false)

// This is a function rather than a macro because when this is included as a
// macro in bulk, it causes a significant slow-down in compilation time. This
// problem exists with both gcc and clang, and bugs have been filed at
// http://llvm.org/bugs/show_bug.cgi?id=13651
// and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54337
void ExpectTransformationMatrixEq(const gfx::Transform& expected,
                                  const gfx::Transform& actual);

#define EXPECT_TRANSFORMATION_MATRIX_EQ(expected, actual) \
  do {                                                    \
    SCOPED_TRACE("");                                     \
    ExpectTransformationMatrixEq(expected, actual);       \
  } while (false)

// Should be used in test code only, for convenience. Production code should use
// the gfx::Transform::GetInverse() API.
gfx::Transform Inverse(const gfx::Transform& transform);

}  // namespace cc

#endif  // CC_TEST_GEOMETRY_TEST_UTILS_H_
