15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "cc/test/geometry_test_utils.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// NOTE: even though transform data types use double precision, we only check 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// for equality within single-precision error bounds because many transforms 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// originate from single-precision data types such as quads/rects/etc. 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ExpectTransformationMatrixEq(const gfx::Transform& expected, 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& actual) { 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(0, 0), (actual).matrix().get(0, 0)); 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(1, 0), (actual).matrix().get(1, 0)); 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(2, 0), (actual).matrix().get(2, 0)); 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(3, 0), (actual).matrix().get(3, 0)); 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(0, 1), (actual).matrix().get(0, 1)); 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(1, 1), (actual).matrix().get(1, 1)); 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(2, 1), (actual).matrix().get(2, 1)); 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(3, 1), (actual).matrix().get(3, 1)); 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(0, 2), (actual).matrix().get(0, 2)); 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(1, 2), (actual).matrix().get(1, 2)); 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(2, 2), (actual).matrix().get(2, 2)); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(3, 2), (actual).matrix().get(3, 2)); 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(0, 3), (actual).matrix().get(0, 3)); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(1, 3), (actual).matrix().get(1, 3)); 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(2, 3), (actual).matrix().get(2, 3)); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FLOAT_EQ((expected).matrix().get(3, 3), (actual).matrix().get(3, 3)); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Transform Inverse(const gfx::Transform& transform) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform result(gfx::Transform::kSkipInitialization); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool inverted_successfully = transform.GetInverse(&result); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(inverted_successfully); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 45