WinCairo build fails to link.
[WebKit-https.git] / Source / WebKit / chromium / tests / TilingDataTest.cpp
1 /*
2  * Copyright (C) 2010 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32
33 #include "IntSize.h"
34 #include "TilingData.h"
35 #include <wtf/Assertions.h>
36
37 #include <gtest/gtest.h>
38
39 using namespace WebCore;
40
41 namespace {
42
43 class TestTiling : public TilingData {
44 public:
45     TestTiling(IntSize maxTextureSize, IntSize totalSize, bool hasBorderTexels)
46         : TilingData(maxTextureSize, totalSize, hasBorderTexels)
47     {
48     }
49
50     // This function only available for testing because of potential overflow.
51     int numTiles() const
52     {
53         int numTiles = numTilesX() * numTilesY();
54
55         // Assert no overflow.
56         EXPECT_GE(numTiles, 0);
57         if (numTiles > 0)
58             EXPECT_EQ(numTiles / numTilesX(), numTilesY());
59
60         return numTiles;
61     }
62 };
63
64 TEST(TilingDataTest, numTiles_NoTiling)
65 {
66     EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), false).numTiles());
67     EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(15, 15), true).numTiles());
68     EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), true).numTiles());
69     EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(1, 16), false).numTiles());
70     EXPECT_EQ(1, TestTiling(IntSize(15, 15), IntSize(15, 15), true).numTiles());
71     EXPECT_EQ(1, TestTiling(IntSize(32, 16), IntSize(32, 16), false).numTiles());
72     EXPECT_EQ(1, TestTiling(IntSize(32, 16), IntSize(32, 16), true).numTiles());
73 }
74
75 TEST(TilingDataTest, numTiles_TilingNoBorders)
76 {
77     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  0), false).numTiles());
78     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(4,  0), false).numTiles());
79     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  4), false).numTiles());
80     EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(4,  0), false).numTiles());
81     EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(0,  4), false).numTiles());
82     EXPECT_EQ(0, TestTiling(IntSize(-8, -8), IntSize(1,  1), false).numTiles());
83     EXPECT_EQ(0, TestTiling(IntSize(-1, -1), IntSize(1,  1), false).numTiles());
84     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(1,  1), false).numTiles());
85
86     EXPECT_EQ(1, TestTiling(IntSize(1, 1), IntSize(1,  1), false).numTiles());
87     EXPECT_EQ(2, TestTiling(IntSize(1, 1), IntSize(1,  2), false).numTiles());
88     EXPECT_EQ(2, TestTiling(IntSize(1, 1), IntSize(2,  1), false).numTiles());
89     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  1), false).numTiles());
90     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  2), false).numTiles());
91     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  1), false).numTiles());
92     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  2), false).numTiles());
93     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3,  3), false).numTiles());
94
95     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(1,  4), false).numTiles());
96     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(2,  4), false).numTiles());
97     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(3,  4), false).numTiles());
98     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(4,  4), false).numTiles());
99     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(5,  4), false).numTiles());
100     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(6,  4), false).numTiles());
101     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(7,  4), false).numTiles());
102     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(8,  4), false).numTiles());
103     EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(9,  4), false).numTiles());
104     EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(10,  4), false).numTiles());
105     EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(11,  4), false).numTiles());
106
107     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(1,  5), false).numTiles());
108     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(2,  5), false).numTiles());
109     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(3,  5), false).numTiles());
110     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(4,  5), false).numTiles());
111     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(5,  5), false).numTiles());
112     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  5), false).numTiles());
113     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(7,  5), false).numTiles());
114     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(8,  5), false).numTiles());
115     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(9,  5), false).numTiles());
116     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(10,  5), false).numTiles());
117     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(11,  5), false).numTiles());
118
119     EXPECT_EQ(1, TestTiling(IntSize(16, 16), IntSize(16, 16), false).numTiles());
120     EXPECT_EQ(1, TestTiling(IntSize(17, 17), IntSize(16, 16), false).numTiles());
121     EXPECT_EQ(4, TestTiling(IntSize(15, 15), IntSize(16, 16), false).numTiles());
122     EXPECT_EQ(4, TestTiling(IntSize(8, 8), IntSize(16, 16), false).numTiles());
123     EXPECT_EQ(6, TestTiling(IntSize(8, 8), IntSize(17, 16), false).numTiles());
124
125     EXPECT_EQ(8, TestTiling(IntSize(5, 8), IntSize(17, 16), false).numTiles());
126 }
127
128 TEST(TilingDataTest, numTiles_TilingWithBorders)
129 {
130     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  0), true).numTiles());
131     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(4,  0), true).numTiles());
132     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(0,  4), true).numTiles());
133     EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(4,  0), true).numTiles());
134     EXPECT_EQ(0, TestTiling(IntSize(4, 4), IntSize(0,  4), true).numTiles());
135     EXPECT_EQ(0, TestTiling(IntSize(-8, -8), IntSize(1,  1), true).numTiles());
136     EXPECT_EQ(0, TestTiling(IntSize(-1, -1), IntSize(1,  1), true).numTiles());
137     EXPECT_EQ(0, TestTiling(IntSize(0, 0), IntSize(1,  1), true).numTiles());
138
139     EXPECT_EQ(1, TestTiling(IntSize(1, 1), IntSize(1,  1), true).numTiles());
140     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1,  2), true).numTiles());
141     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(2,  1), true).numTiles());
142     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  1), true).numTiles());
143     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(1,  2), true).numTiles());
144     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  1), true).numTiles());
145     EXPECT_EQ(1, TestTiling(IntSize(2, 2), IntSize(2,  2), true).numTiles());
146
147     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,  3), true).numTiles());
148     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(2,  3), true).numTiles());
149     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3,  3), true).numTiles());
150     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(4,  3), true).numTiles());
151     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(5,  3), true).numTiles());
152     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,  3), true).numTiles());
153     EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(7,  3), true).numTiles());
154
155     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(1,  4), true).numTiles());
156     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(2,  4), true).numTiles());
157     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(3,  4), true).numTiles());
158     EXPECT_EQ(1, TestTiling(IntSize(4, 4), IntSize(4,  4), true).numTiles());
159     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(5,  4), true).numTiles());
160     EXPECT_EQ(2, TestTiling(IntSize(4, 4), IntSize(6,  4), true).numTiles());
161     EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(7,  4), true).numTiles());
162     EXPECT_EQ(3, TestTiling(IntSize(4, 4), IntSize(8,  4), true).numTiles());
163     EXPECT_EQ(4, TestTiling(IntSize(4, 4), IntSize(9,  4), true).numTiles());
164     EXPECT_EQ(4, TestTiling(IntSize(4, 4), IntSize(10,  4), true).numTiles());
165     EXPECT_EQ(5, TestTiling(IntSize(4, 4), IntSize(11,  4), true).numTiles());
166
167     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(1,  5), true).numTiles());
168     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(2,  5), true).numTiles());
169     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(3,  5), true).numTiles());
170     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(4,  5), true).numTiles());
171     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(5,  5), true).numTiles());
172     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  5), true).numTiles());
173     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(7,  5), true).numTiles());
174     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(8,  5), true).numTiles());
175     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(9,  5), true).numTiles());
176     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10,  5), true).numTiles());
177     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(11,  5), true).numTiles());
178
179     EXPECT_EQ(30, TestTiling(IntSize(8, 5), IntSize(16, 32), true).numTiles());
180 }
181
182 TEST(TilingDataTest, tileXIndexFromSrcCoord)
183 {
184     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(0));
185     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(1));
186     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(2));
187     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(3));
188     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(4));
189     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(5));
190     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(6));
191     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(7));
192     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(8));
193     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(9));
194     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(10));
195     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileXIndexFromSrcCoord(11));
196
197     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(0));
198     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(1));
199     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(2));
200     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(3));
201     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(4));
202     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(5));
203     EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(6));
204     EXPECT_EQ(6, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(7));
205     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(8));
206     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(9));
207     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(10));
208     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileXIndexFromSrcCoord(11));
209
210     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), false).tileXIndexFromSrcCoord(0));
211     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileXIndexFromSrcCoord(0));
212     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileXIndexFromSrcCoord(1));
213     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(0));
214     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(1));
215     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileXIndexFromSrcCoord(2));
216
217     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(0));
218     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(1));
219     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(2));
220     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), false).tileXIndexFromSrcCoord(3));
221
222     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), true).tileXIndexFromSrcCoord(0));
223     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileXIndexFromSrcCoord(0));
224     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileXIndexFromSrcCoord(1));
225     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(0));
226     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(1));
227     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileXIndexFromSrcCoord(2));
228
229     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(0));
230     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(1));
231     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(2));
232     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(4, 3), true).tileXIndexFromSrcCoord(3));
233 }
234 TEST(TilingDataTest, tileYIndexFromSrcCoord)
235 {
236     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(0));
237     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(1));
238     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(2));
239     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(3));
240     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(4));
241     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(5));
242     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(6));
243     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(7));
244     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(8));
245     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(9));
246     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(10));
247     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), false).tileYIndexFromSrcCoord(11));
248
249     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(0));
250     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(1));
251     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(2));
252     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(3));
253     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(4));
254     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(5));
255     EXPECT_EQ(5, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(6));
256     EXPECT_EQ(6, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(7));
257     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(8));
258     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(9));
259     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(10));
260     EXPECT_EQ(7, TestTiling(IntSize(3, 3), IntSize(10, 10), true).tileYIndexFromSrcCoord(11));
261
262     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), false).tileYIndexFromSrcCoord(0));
263     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileYIndexFromSrcCoord(0));
264     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), false).tileYIndexFromSrcCoord(1));
265     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(0));
266     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(1));
267     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), false).tileYIndexFromSrcCoord(2));
268
269     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(0));
270     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(1));
271     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(2));
272     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), false).tileYIndexFromSrcCoord(3));
273
274     EXPECT_EQ(0, TestTiling(IntSize(1, 1), IntSize(1, 1), true).tileYIndexFromSrcCoord(0));
275     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileYIndexFromSrcCoord(0));
276     EXPECT_EQ(0, TestTiling(IntSize(2, 2), IntSize(2, 2), true).tileYIndexFromSrcCoord(1));
277     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(0));
278     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(1));
279     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 3), true).tileYIndexFromSrcCoord(2));
280
281     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(0));
282     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(1));
283     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(2));
284     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(3, 4), true).tileYIndexFromSrcCoord(3));
285 }
286
287 TEST(TilingDataTest, tileSizeX)
288 {
289     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), false).tileSizeX(0));
290     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), true).tileSizeX(0));
291
292     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeX(0));
293     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeX(1));
294     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeX(0));
295     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeX(1));
296
297     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeX(0));
298     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeX(1));
299     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeX(0));
300     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeX(1));
301
302     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeX(0));
303     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeX(1));
304     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(0));
305     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(1));
306     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeX(2));
307
308     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(11, 11), true).tileSizeX(2));
309     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(12, 12), true).tileSizeX(2));
310
311     EXPECT_EQ(3, TestTiling(IntSize(5, 9), IntSize(12, 17), true).tileSizeX(2));
312 }
313
314 TEST(TilingDataTest, tileSizeY)
315 {
316     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), false).tileSizeY(0));
317     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(5,  5), true).tileSizeY(0));
318
319     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeY(0));
320     EXPECT_EQ(1, TestTiling(IntSize(5, 5), IntSize(6,  6), false).tileSizeY(1));
321     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeY(0));
322     EXPECT_EQ(2, TestTiling(IntSize(5, 5), IntSize(6,  6), true).tileSizeY(1));
323
324     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeY(0));
325     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(8,  8), false).tileSizeY(1));
326     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeY(0));
327     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(8,  8), true).tileSizeY(1));
328
329     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeY(0));
330     EXPECT_EQ(5, TestTiling(IntSize(5, 5), IntSize(10, 10), false).tileSizeY(1));
331     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(0));
332     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(1));
333     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(10, 10), true).tileSizeY(2));
334
335     EXPECT_EQ(4, TestTiling(IntSize(5, 5), IntSize(11, 11), true).tileSizeY(2));
336     EXPECT_EQ(3, TestTiling(IntSize(5, 5), IntSize(12, 12), true).tileSizeY(2));
337
338     EXPECT_EQ(3, TestTiling(IntSize(9, 5), IntSize(17, 12), true).tileSizeY(2));
339 }
340
341 TEST(TilingDataTest, tileSizeX_and_tilePositionX)
342 {
343     // Single tile cases:
344     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,   1), false).tileSizeX(0));
345     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1,   1), false).tilePositionX(0));
346     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 100), false).tileSizeX(0));
347     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 100), false).tilePositionX(0));
348     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3,   1), false).tileSizeX(0));
349     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3,   1), false).tilePositionX(0));
350     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3, 100), false).tileSizeX(0));
351     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 100), false).tilePositionX(0));
352     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1,   1), true).tileSizeX(0));
353     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1,   1), true).tilePositionX(0));
354     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 100), true).tileSizeX(0));
355     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 100), true).tilePositionX(0));
356     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3,   1), true).tileSizeX(0));
357     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3,   1), true).tilePositionX(0));
358     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(3, 100), true).tileSizeX(0));
359     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(3, 100), true).tilePositionX(0));
360
361     // Multiple tiles:
362     // no border
363     // positions 0, 3
364     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), false).numTiles());
365     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tileSizeX(0));
366     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tileSizeX(1));
367     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tilePositionX(0));
368     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), false).tilePositionX(1));
369     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tileSizeX(0));
370     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tileSizeX(1));
371     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tilePositionX(0));
372     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6, 100), false).tilePositionX(1));
373
374     // Multiple tiles:
375     // with border
376     // positions 0, 2, 3, 4
377     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,   1), true).numTiles());
378     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(0));
379     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(1));
380     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(2));
381     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tileSizeX(3));
382     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(0));
383     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(1));
384     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(2));
385     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(6,   1), true).tilePositionX(3));
386     EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(0));
387     EXPECT_EQ(1, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(1));
388     EXPECT_EQ(1, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(2));
389     EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tileSizeX(3));
390     EXPECT_EQ(0, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(0));
391     EXPECT_EQ(2, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(1));
392     EXPECT_EQ(3, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(2));
393     EXPECT_EQ(4, TestTiling(IntSize(3, 7), IntSize(6, 100), true).tilePositionX(3));
394 }
395
396 TEST(TilingDataTest, tileSizeY_and_tilePositionY)
397 {
398     // Single tile cases:
399     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 1), false).tileSizeY(0));
400     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 1), false).tilePositionY(0));
401     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(100, 1), false).tileSizeY(0));
402     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 1), false).tilePositionY(0));
403     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 3), false).tileSizeY(0));
404     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 3), false).tilePositionY(0));
405     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 3), false).tileSizeY(0));
406     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 3), false).tilePositionY(0));
407     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 1), true).tileSizeY(0));
408     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 1), true).tilePositionY(0));
409     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(100, 1), true).tileSizeY(0));
410     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 1), true).tilePositionY(0));
411     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 3), true).tileSizeY(0));
412     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 3), true).tilePositionY(0));
413     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 3), true).tileSizeY(0));
414     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 3), true).tilePositionY(0));
415
416     // Multiple tiles:
417     // no border
418     // positions 0, 3
419     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), false).numTiles());
420     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tileSizeY(0));
421     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tileSizeY(1));
422     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tilePositionY(0));
423     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), false).tilePositionY(1));
424     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tileSizeY(0));
425     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tileSizeY(1));
426     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tilePositionY(0));
427     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(100, 6), false).tilePositionY(1));
428
429     // Multiple tiles:
430     // with border
431     // positions 0, 2, 3, 4
432     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(1, 6), true).numTiles());
433     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(0));
434     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(1));
435     EXPECT_EQ(1, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(2));
436     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tileSizeY(3));
437     EXPECT_EQ(0, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(0));
438     EXPECT_EQ(2, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(1));
439     EXPECT_EQ(3, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(2));
440     EXPECT_EQ(4, TestTiling(IntSize(3, 3), IntSize(1, 6), true).tilePositionY(3));
441     EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(0));
442     EXPECT_EQ(1, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(1));
443     EXPECT_EQ(1, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(2));
444     EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tileSizeY(3));
445     EXPECT_EQ(0, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(0));
446     EXPECT_EQ(2, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(1));
447     EXPECT_EQ(3, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(2));
448     EXPECT_EQ(4, TestTiling(IntSize(7, 3), IntSize(100, 6), true).tilePositionY(3));
449 }
450
451 TEST(TilingDataTest, setTotalSize)
452 {
453     TestTiling data(IntSize(5, 5), IntSize(5, 5), false);
454     EXPECT_EQ(5, data.totalSize().width());
455     EXPECT_EQ(5, data.totalSize().height());
456     EXPECT_EQ(1, data.numTilesX());
457     EXPECT_EQ(5, data.tileSizeX(0));
458     EXPECT_EQ(1, data.numTilesY());
459     EXPECT_EQ(5, data.tileSizeY(0));
460
461     data.setTotalSize(IntSize(6, 5));
462     EXPECT_EQ(6, data.totalSize().width());
463     EXPECT_EQ(5, data.totalSize().height());
464     EXPECT_EQ(2, data.numTilesX());
465     EXPECT_EQ(5, data.tileSizeX(0));
466     EXPECT_EQ(1, data.tileSizeX(1));
467     EXPECT_EQ(1, data.numTilesY());
468     EXPECT_EQ(5, data.tileSizeY(0));
469
470     data.setTotalSize(IntSize(5, 12));
471     EXPECT_EQ(5, data.totalSize().width());
472     EXPECT_EQ(12, data.totalSize().height());
473     EXPECT_EQ(1, data.numTilesX());
474     EXPECT_EQ(5, data.tileSizeX(0));
475     EXPECT_EQ(3, data.numTilesY());
476     EXPECT_EQ(5, data.tileSizeY(0));
477     EXPECT_EQ(5, data.tileSizeY(1));
478     EXPECT_EQ(2, data.tileSizeY(2));
479 }
480
481 TEST(TilingDataTest, setMaxTextureSizeNoBorders)
482 {
483     TestTiling data(IntSize(8, 8), IntSize(16, 32), false);
484     EXPECT_EQ(2, data.numTilesX());
485     EXPECT_EQ(4, data.numTilesY());
486
487     data.setMaxTextureSize(IntSize(32, 32));
488     EXPECT_EQ(IntSize(32, 32), data.maxTextureSize());
489     EXPECT_EQ(1, data.numTilesX());
490     EXPECT_EQ(1, data.numTilesY());
491
492     data.setMaxTextureSize(IntSize(2, 2));
493     EXPECT_EQ(IntSize(2, 2), data.maxTextureSize());
494     EXPECT_EQ(8, data.numTilesX());
495     EXPECT_EQ(16, data.numTilesY());
496
497     data.setMaxTextureSize(IntSize(5, 5));
498     EXPECT_EQ(IntSize(5, 5), data.maxTextureSize());
499     EXPECT_EQ(4, data.numTilesX());
500     EXPECT_EQ(7, data.numTilesY());
501
502     data.setMaxTextureSize(IntSize(8, 5));
503     EXPECT_EQ(IntSize(8, 5), data.maxTextureSize());
504     EXPECT_EQ(2, data.numTilesX());
505     EXPECT_EQ(7, data.numTilesY());
506 }
507
508 TEST(TilingDataTest, setMaxTextureSizeBorders)
509 {
510     TestTiling data(IntSize(8, 8), IntSize(16, 32), true);
511     EXPECT_EQ(3, data.numTilesX());
512     EXPECT_EQ(5, data.numTilesY());
513
514     data.setMaxTextureSize(IntSize(32, 32));
515     EXPECT_EQ(IntSize(32, 32), data.maxTextureSize());
516     EXPECT_EQ(1, data.numTilesX());
517     EXPECT_EQ(1, data.numTilesY());
518
519     data.setMaxTextureSize(IntSize(2, 2));
520     EXPECT_EQ(IntSize(2, 2), data.maxTextureSize());
521     EXPECT_EQ(0, data.numTilesX());
522     EXPECT_EQ(0, data.numTilesY());
523
524     data.setMaxTextureSize(IntSize(5, 5));
525     EXPECT_EQ(IntSize(5, 5), data.maxTextureSize());
526     EXPECT_EQ(5, data.numTilesX());
527     EXPECT_EQ(10, data.numTilesY());
528
529     data.setMaxTextureSize(IntSize(8, 5));
530     EXPECT_EQ(IntSize(8, 5), data.maxTextureSize());
531     EXPECT_EQ(3, data.numTilesX());
532     EXPECT_EQ(10, data.numTilesY());
533 }
534
535 TEST(TilingDataTest, assignment)
536 {
537     {
538         TestTiling source(IntSize(8, 8), IntSize(16, 32), true);
539         TestTiling dest = source;
540         EXPECT_EQ(source.borderTexels(), dest.borderTexels());
541         EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
542         EXPECT_EQ(source.numTilesX(), dest.numTilesX());
543         EXPECT_EQ(source.numTilesY(), dest.numTilesY());
544         EXPECT_EQ(source.totalSize().width(), dest.totalSize().width());
545         EXPECT_EQ(source.totalSize().height(), dest.totalSize().height());
546     }
547     {
548         TestTiling source(IntSize(7, 3), IntSize(6, 100), false);
549         TestTiling dest(source);
550         EXPECT_EQ(source.borderTexels(), dest.borderTexels());
551         EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
552         EXPECT_EQ(source.numTilesX(), dest.numTilesX());
553         EXPECT_EQ(source.numTilesY(), dest.numTilesY());
554         EXPECT_EQ(source.totalSize().width(), dest.totalSize().width());
555         EXPECT_EQ(source.totalSize().height(), dest.totalSize().height());
556     }
557 }
558
559 TEST(TilingDataTest, setBorderTexels)
560 {
561     TestTiling data(IntSize(8, 8), IntSize(16, 32), false);
562     EXPECT_EQ(2, data.numTilesX());
563     EXPECT_EQ(4, data.numTilesY());
564
565     data.setHasBorderTexels(true);
566     EXPECT_EQ(3, data.numTilesX());
567     EXPECT_EQ(5, data.numTilesY());
568
569     data.setHasBorderTexels(true);
570     EXPECT_EQ(3, data.numTilesX());
571     EXPECT_EQ(5, data.numTilesY());
572
573     data.setHasBorderTexels(false);
574     EXPECT_EQ(2, data.numTilesX());
575     EXPECT_EQ(4, data.numTilesY());
576 }
577
578 } // namespace