// 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. #include "config.h" #include "CCMathUtil.h" #include "FloatQuad.h" #include "testing/gtest/include/gtest/gtest.h" #include using namespace cc; using WebKit::WebTransformationMatrix; namespace { TEST(FloatQuadTest, IsRectilinearTest) { const int numRectilinear = 8; WebTransformationMatrix rectilinearTrans[numRectilinear]; rectilinearTrans[1].rotate(90); rectilinearTrans[2].rotate(180); rectilinearTrans[3].rotate(270); rectilinearTrans[4].skewX(0.00000000001); rectilinearTrans[5].skewY(0.00000000001); rectilinearTrans[6].scale(0.00001); rectilinearTrans[6].rotate(180); rectilinearTrans[7].scale(100000); rectilinearTrans[7].rotate(180); for (int i = 0; i < numRectilinear; ++i) { bool clipped = false; FloatQuad quad = CCMathUtil::mapQuad(rectilinearTrans[i], FloatRect(0.01010101f, 0.01010101f, 100.01010101f, 100.01010101f), clipped); ASSERT_TRUE(!clipped); EXPECT_TRUE(quad.isRectilinear()); } const int numNonRectilinear = 10; WebTransformationMatrix nonRectilinearTrans[numNonRectilinear]; nonRectilinearTrans[0].rotate(359.999); nonRectilinearTrans[1].rotate(0.0000001); nonRectilinearTrans[2].rotate(89.999999); nonRectilinearTrans[3].rotate(90.0000001); nonRectilinearTrans[4].rotate(179.999999); nonRectilinearTrans[5].rotate(180.0000001); nonRectilinearTrans[6].rotate(269.999999); nonRectilinearTrans[7].rotate(270.0000001); nonRectilinearTrans[8].skewX(0.00001); nonRectilinearTrans[9].skewY(0.00001); for (int i = 0; i < numNonRectilinear; ++i) { bool clipped = false; FloatQuad quad = CCMathUtil::mapQuad(nonRectilinearTrans[i], FloatRect(0.01010101f, 0.01010101f, 100.01010101f, 100.01010101f), clipped); ASSERT_TRUE(!clipped); EXPECT_FALSE(quad.isRectilinear()); } } } // empty namespace