Changeset 112432 in webkit


Ignore:
Timestamp:
Mar 28, 2012 1:20:23 PM (12 years ago)
Author:
enne@google.com
Message:

[chromium] Fix tiled layer assert for huge layers
https://bugs.webkit.org/show_bug.cgi?id=82486

Reviewed by James Robinson.

Source/WebCore:

Test: TiledLayerChromiumTest.hugeLayerUpdateCrash

TilingData::numTiles() is calculated as the product of two ints and so
can potentially overflow, causing numTiles() to be incorrect. To avoid
calling code accidentally falling into this trap, remove this function
and all code that uses tile index from TilingData. This requires
fixing up a bunch of callers of TilingData and CCLayerTilingData.

Additionally, TilingData::numTiles() has long been a confusing
function name in some contexts, so rename to bool hasEmptyBounds().

Also, remove TilingData::intersectDrawQuad because there are no
clients of that function.

  • platform/graphics/chromium/TiledLayerChromium.cpp:

(WebCore::TiledLayerChromium::drawsContent):
(WebCore::TiledLayerChromium::reserveTextures):
(WebCore::TiledLayerChromium::prepareToUpdate):
(WebCore::TiledLayerChromium::prepareToUpdateIdle):
(WebCore::TiledLayerChromium::needsIdlePaint):
(WebCore::TiledLayerChromium::idlePaintRect):

  • platform/graphics/chromium/cc/CCLayerTilingData.cpp:

(WebCore::CCLayerTilingData::tileRect):

  • platform/graphics/chromium/cc/CCLayerTilingData.h:

(WebCore::CCLayerTilingData::hasEmptyBounds):
(WebCore::CCLayerTilingData::tileBounds):
(WebCore::CCLayerTilingData::isEmpty):

  • platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:

(WebCore::CCTiledLayerImpl::bindContentsTexture):
(WebCore::CCTiledLayerImpl::appendQuads):

  • platform/graphics/gpu/Texture.cpp:

(WebCore::Texture::create):
(WebCore::Texture::updateSubRect):

  • platform/graphics/gpu/TilingData.cpp:

(WebCore::TilingData::tileBounds):
(WebCore::TilingData::tileBoundsWithBorder):
(WebCore::TilingData::tileBoundsNormalized):

  • platform/graphics/gpu/TilingData.h:

(WebCore::TilingData::hasEmptyBounds):
(TilingData):
(WebCore::TilingData::assertTile):

Source/WebKit/chromium:

Add test for updating a huge layer that would assert prior to this
code. Fix up TilingData tests to use a testing class that provides a
safe version of numTiles().

  • tests/TiledLayerChromiumTest.cpp:

(WTF::TEST):
(WTF):

  • tests/TilingDataTest.cpp:

(TestTiling):
(WebCore::TestTiling::TestTiling):
(WebCore::TestTiling::numTiles):
(WebCore):
(WebCore::TEST):

Location:
trunk/Source
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r112428 r112432  
     12012-03-28  Adrienne Walker  <enne@google.com>
     2
     3        [chromium] Fix tiled layer assert for huge layers
     4        https://bugs.webkit.org/show_bug.cgi?id=82486
     5
     6        Reviewed by James Robinson.
     7
     8        Test: TiledLayerChromiumTest.hugeLayerUpdateCrash
     9
     10        TilingData::numTiles() is calculated as the product of two ints and so
     11        can potentially overflow, causing numTiles() to be incorrect. To avoid
     12        calling code accidentally falling into this trap, remove this function
     13        and all code that uses tile index from TilingData.  This requires
     14        fixing up a bunch of callers of TilingData and CCLayerTilingData.
     15
     16        Additionally, TilingData::numTiles() has long been a confusing
     17        function name in some contexts, so rename to bool hasEmptyBounds().
     18
     19        Also, remove TilingData::intersectDrawQuad because there are no
     20        clients of that function.
     21
     22        * platform/graphics/chromium/TiledLayerChromium.cpp:
     23        (WebCore::TiledLayerChromium::drawsContent):
     24        (WebCore::TiledLayerChromium::reserveTextures):
     25        (WebCore::TiledLayerChromium::prepareToUpdate):
     26        (WebCore::TiledLayerChromium::prepareToUpdateIdle):
     27        (WebCore::TiledLayerChromium::needsIdlePaint):
     28        (WebCore::TiledLayerChromium::idlePaintRect):
     29        * platform/graphics/chromium/cc/CCLayerTilingData.cpp:
     30        (WebCore::CCLayerTilingData::tileRect):
     31        * platform/graphics/chromium/cc/CCLayerTilingData.h:
     32        (WebCore::CCLayerTilingData::hasEmptyBounds):
     33        (WebCore::CCLayerTilingData::tileBounds):
     34        (WebCore::CCLayerTilingData::isEmpty):
     35        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
     36        (WebCore::CCTiledLayerImpl::bindContentsTexture):
     37        (WebCore::CCTiledLayerImpl::appendQuads):
     38        * platform/graphics/gpu/Texture.cpp:
     39        (WebCore::Texture::create):
     40        (WebCore::Texture::updateSubRect):
     41        * platform/graphics/gpu/TilingData.cpp:
     42        (WebCore::TilingData::tileBounds):
     43        (WebCore::TilingData::tileBoundsWithBorder):
     44        (WebCore::TilingData::tileBoundsNormalized):
     45        * platform/graphics/gpu/TilingData.h:
     46        (WebCore::TilingData::hasEmptyBounds):
     47        (TilingData):
     48        (WebCore::TilingData::assertTile):
     49
    1502012-03-28  Peter Rybin  <peter.rybin@gmail.com>
    251
  • trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp

    r112327 r112432  
    167167        return false;
    168168
    169     if (m_tilingOption == NeverTile && m_tiler->numTiles() > 1)
     169    bool hasMoreThanOneTile = m_tiler->numTilesX() > 1 || m_tiler->numTilesY() > 1;
     170    if (m_tilingOption == NeverTile && hasMoreThanOneTile)
    170171        return false;
    171172
     
    557558
    558559    const IntRect& layerRect = visibleLayerRect();
    559     if (layerRect.isEmpty() || !m_tiler->numTiles())
     560    if (layerRect.isEmpty() || m_tiler->hasEmptyBounds())
    560561        return;
    561562
     
    610611    resetUpdateState();
    611612
    612     if (layerRect.isEmpty() || !m_tiler->numTiles())
     613    if (layerRect.isEmpty() || m_tiler->hasEmptyBounds())
    613614        return;
    614615
     
    629630    updateBounds();
    630631
    631     if (!m_tiler->numTiles())
     632    if (m_tiler->hasEmptyBounds())
    632633        return;
    633634
     
    702703        return false;
    703704
    704     if (!m_tiler->numTiles())
     705    if (m_tiler->hasEmptyBounds())
    705706        return false;
    706707
     
    732733    // ones we avoid prepainting the layer at all.
    733734    if (visibleLayerRect.isEmpty()) {
    734         if ((drawTransformIsAnimating() || screenSpaceTransformIsAnimating()) && m_tiler->numTiles() <= 9)
     735        bool isSmallLayer = m_tiler->numTilesX() <= 9 && m_tiler->numTilesY() <= 9 && m_tiler->numTilesX() * m_tiler->numTilesY() <= 9;
     736        if ((drawTransformIsAnimating() || screenSpaceTransformIsAnimating()) && isSmallLayer)
    735737            return IntRect(IntPoint(), contentBounds());
    736738        return IntRect();
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.cpp

    r110317 r112432  
    107107IntRect CCLayerTilingData::tileRect(const Tile* tile) const
    108108{
    109     const int index = m_tilingData.tileIndex(tile->i(), tile->j());
    110     IntRect tileRect = m_tilingData.tileBoundsWithBorder(index);
     109    IntRect tileRect = m_tilingData.tileBoundsWithBorder(tile->i(), tile->j());
    111110    tileRect.setSize(m_tileSize);
    112111    return tileRect;
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTilingData.h

    r110317 r112432  
    4545    static PassOwnPtr<CCLayerTilingData> create(const IntSize& tileSize, BorderTexelOption);
    4646
    47     int numTiles() const { return m_tilingData.numTiles(); }
     47    bool hasEmptyBounds() const { return m_tilingData.hasEmptyBounds(); }
    4848    int numTilesX() const { return m_tilingData.numTilesX(); }
    4949    int numTilesY() const { return m_tilingData.numTilesY(); }
    50     IntRect tileBounds(int i, int j) const { return m_tilingData.tileBounds(m_tilingData.tileIndex(i, j)); }
     50    IntRect tileBounds(int i, int j) const { return m_tilingData.tileBounds(i, j); }
    5151    IntPoint textureOffset(int xIndex, int yIndex) const { return m_tilingData.textureOffset(xIndex, yIndex); }
    5252
     
    5858    bool hasBorderTexels() const { return m_tilingData.borderTexels(); }
    5959
    60     bool isEmpty() const { return !m_tilingData.numTiles() || !tiles().size(); }
     60    bool isEmpty() const { return hasEmptyBounds() || !tiles().size(); }
    6161
    6262    const CCLayerTilingData& operator=(const CCLayerTilingData&);
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp

    r112327 r112432  
    8181    // This function is only valid for single texture layers, e.g. masks.
    8282    ASSERT(m_tiler);
    83     ASSERT(m_tiler->numTiles() == 1);
     83    ASSERT(m_tiler->numTilesX() == 1);
     84    ASSERT(m_tiler->numTilesY() == 1);
    8485
    8586    DrawableTile* tile = tileAt(0, 0);
     
    144145    appendGutterQuads(quadList, sharedQuadState);
    145146
    146     if (!m_tiler || !m_tiler->numTiles() || layerRect.isEmpty())
     147    if (!m_tiler || m_tiler->hasEmptyBounds() || layerRect.isEmpty())
    147148        return;
    148149
  • trunk/Source/WebCore/platform/graphics/filters/FECustomFilter.cpp

    r111610 r112432  
    113113   
    114114    // Do not draw the filter if the input image cannot fit inside a single GPU texture.
    115     if (m_inputTexture->tiles().numTiles() != 1)
     115    if (m_inputTexture->tiles().numTilesX() != 1 || m_inputTexture->tiles().numTilesY() != 1)
    116116        return;
    117117   
  • trunk/Source/WebCore/platform/graphics/gpu/Texture.cpp

    r103170 r112432  
    9191    context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &maxTextureSize);
    9292    TilingData tiling(maxTextureSize, width, height, true);
    93     int numTiles = tiling.numTiles();
     93
     94    // Check for overflow.
     95    int numTiles = width * height;
     96    if (numTiles / width != height) {
     97        tiling.setTotalSize(0, 0);
     98        numTiles = 0;
     99    }
    94100
    95101    OwnPtr<Vector<unsigned int> > textureIds = adoptPtr(new Vector<unsigned int>(numTiles));
     
    105111        textureIds->at(i) = textureId;
    106112
    107         IntRect tileBoundsWithBorder = tiling.tileBoundsWithBorder(i);
     113        int xIndex = i % width;
     114        int yIndex = i / width;
     115        IntRect tileBoundsWithBorder = tiling.tileBoundsWithBorder(xIndex, yIndex);
    108116
    109117        unsigned int glFormat = 0;
     
    169177    OwnArrayPtr<uint32_t> tempBuff = adoptArrayPtr(new uint32_t[tempBuffSize]);
    170178
    171     for (int tile = 0; tile < m_tiles.numTiles(); tile++) {
     179    for (int tile = 0; tile < m_tiles.numTilesX() * m_tiles.numTilesY(); tile++) {
     180        int xIndex = tile % m_tiles.totalSizeX();
     181        int yIndex = tile / m_tiles.totalSizeX();
     182
    172183        // Intersect with tile
    173         IntRect tileBoundsWithBorder = m_tiles.tileBoundsWithBorder(tile);
     184        IntRect tileBoundsWithBorder = m_tiles.tileBoundsWithBorder(xIndex, yIndex);
    174185
    175186        IntRect updateRectIntersected = updateRectSanitized;
  • trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp

    r103944 r112432  
    100100}
    101101
    102 IntRect TilingData::tileBounds(int tile) const
    103 {
    104     assertTile(tile);
    105     int ix = tileXIndex(tile);
    106     int iy = tileYIndex(tile);
    107     int x = tilePositionX(ix);
    108     int y = tilePositionY(iy);
    109     int width = tileSizeX(ix);
    110     int height = tileSizeY(iy);
     102IntRect TilingData::tileBounds(int i, int j) const
     103{
     104    assertTile(i, j);
     105    int x = tilePositionX(i);
     106    int y = tilePositionY(j);
     107    int width = tileSizeX(i);
     108    int height = tileSizeY(j);
    111109    ASSERT(x >= 0 && y >= 0 && width >= 0 && height >= 0);
    112110    ASSERT(x <= totalSizeX() && y <= totalSizeY());
     
    114112}
    115113
    116 IntRect TilingData::tileBoundsWithBorder(int tile) const
    117 {
    118     IntRect bounds = tileBounds(tile);
     114IntRect TilingData::tileBoundsWithBorder(int i, int j) const
     115{
     116    IntRect bounds = tileBounds(i, j);
    119117
    120118    if (m_borderTexels) {
     
    124122        int y2 = bounds.maxY();
    125123
    126         if (tileXIndex(tile) > 0)
     124        if (i > 0)
    127125            x1--;
    128         if (tileXIndex(tile) < (numTilesX() - 1))
     126        if (i < (numTilesX() - 1))
    129127            x2++;
    130         if (tileYIndex(tile) > 0)
     128        if (j > 0)
    131129            y1--;
    132         if (tileYIndex(tile) < (numTilesY() - 1))
     130        if (j < (numTilesY() - 1))
    133131            y2++;
    134132
     
    139137}
    140138
    141 FloatRect TilingData::tileBoundsNormalized(int tile) const
    142 {
    143     assertTile(tile);
    144     FloatRect bounds(tileBounds(tile));
     139FloatRect TilingData::tileBoundsNormalized(int i, int j) const
     140{
     141    assertTile(i, j);
     142    FloatRect bounds(tileBounds(i, j));
    145143    bounds.scale(1.0f / m_totalSizeX, 1.0f / m_totalSizeY);
    146144    return bounds;
     
    217215}
    218216
    219 void TilingData::intersectDrawQuad(const FloatRect& srcRect, const FloatRect& dstRect, int tile,
    220                                    FloatRect* newSrc, FloatRect* newDst) const
    221 {
    222     // Intersect with tile
    223     FloatRect tileBounds = this->tileBounds(tile);
    224     FloatRect srcRectIntersected = srcRect;
    225     srcRectIntersected.intersect(tileBounds);
    226 
    227     if (srcRectIntersected.isEmpty()) {
    228         *newSrc = *newDst = FloatRect(0, 0, 0, 0);
    229         return;
    230     }
    231 
    232     float srcRectIntersectedNormX = (srcRectIntersected.x() - srcRect.x()) / srcRect.width();
    233     float srcRectIntersectedNormY = (srcRectIntersected.y() - srcRect.y()) / srcRect.height();
    234     float srcRectIntersectedNormW = srcRectIntersected.width() / srcRect.width();
    235     float srcRectIntersectedNormH = srcRectIntersected.height() / srcRect.height();
    236 
    237     *newSrc = srcRectIntersected;
    238     newSrc->move(
    239         -tileBounds.x() + ((tileXIndex(tile) > 0) ? m_borderTexels : 0),
    240         -tileBounds.y() + ((tileYIndex(tile) > 0) ? m_borderTexels : 0));
    241 
    242     *newDst = FloatRect(
    243         srcRectIntersectedNormX * dstRect.width() + dstRect.x(),
    244         srcRectIntersectedNormY * dstRect.height() + dstRect.y(),
    245         srcRectIntersectedNormW * dstRect.width(),
    246         srcRectIntersectedNormH * dstRect.height());
    247 }
    248 
    249217IntPoint TilingData::textureOffset(int xIndex, int yIndex) const
    250218{
  • trunk/Source/WebCore/platform/graphics/gpu/TilingData.h

    r103944 r112432  
    5151    int borderTexels() const { return m_borderTexels; }
    5252
    53     int numTiles() const { return numTilesX() * numTilesY(); }
     53    bool hasEmptyBounds() const { return !numTilesX() || !numTilesY(); }
    5454    int numTilesX() const { return m_numTilesX; }
    5555    int numTilesY() const { return m_numTilesY; }
    56     int tileIndex(int x, int y) const { return x + y * numTilesX(); }
    57     int tileXIndex(int tile) const { assertTile(tile); return tile % numTilesX(); }
    58     int tileYIndex(int tile) const { assertTile(tile); return tile / numTilesX(); }
    5956    int tileXIndexFromSrcCoord(int) const;
    6057    int tileYIndexFromSrcCoord(int) const;
    6158
    62     IntRect tileBounds(int tile) const;
    63     IntRect tileBoundsWithBorder(int tile) const;
    64     FloatRect tileBoundsNormalized(int tile) const;
     59    IntRect tileBounds(int, int) const;
     60    IntRect tileBoundsWithBorder(int, int) const;
     61    FloatRect tileBoundsNormalized(int, int) const;
    6562    int tilePositionX(int xIndex) const;
    6663    int tilePositionY(int yIndex) const;
     
    7067    IntRect overlappedTileIndices(const FloatRect& srcRect) const;
    7168
    72     // Given a set of source and destination coordinates for a drawing quad
    73     // in texel units, returns adjusted data to render just the one tile.
    74     void intersectDrawQuad(const FloatRect& srcRect, const FloatRect& dstRect, int tile, FloatRect* newSrc, FloatRect* newDst) const;
    75 
    7669    // Difference between tileBound's and tileBoundWithBorder's location().
    7770    IntPoint textureOffset(int xIndex, int yIndex) const;
     
    7972private:
    8073    TilingData() : m_maxTextureSize(0), m_totalSizeX(0), m_totalSizeY(0) {}
    81     void assertTile(int tile) const { ASSERT_UNUSED(tile, tile >= 0 && tile < numTiles()); }
     74    void assertTile(int i, int j) const { ASSERT_UNUSED(i, i >= 0 && i < numTilesX()); ASSERT_UNUSED(j, j >= 0 && j < numTilesY()); }
    8275    void recomputeNumTiles();
    8376
  • trunk/Source/WebKit/chromium/ChangeLog

    r112421 r112432  
     12012-03-28  Adrienne Walker  <enne@google.com>
     2
     3        [chromium] Fix tiled layer assert for huge layers
     4        https://bugs.webkit.org/show_bug.cgi?id=82486
     5
     6        Reviewed by James Robinson.
     7
     8        Add test for updating a huge layer that would assert prior to this
     9        code. Fix up TilingData tests to use a testing class that provides a
     10        safe version of numTiles().
     11
     12        * tests/TiledLayerChromiumTest.cpp:
     13        (WTF::TEST):
     14        (WTF):
     15        * tests/TilingDataTest.cpp:
     16        (TestTiling):
     17        (WebCore::TestTiling::TestTiling):
     18        (WebCore::TestTiling::numTiles):
     19        (WebCore):
     20        (WebCore::TEST):
     21
    1222012-03-28  Tommy Widenflycht  <tommyw@google.com>
    223
  • trunk/Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp

    r112327 r112432  
    10831083}
    10841084
     1085TEST(TiledLayerChromiumTest, hugeLayerUpdateCrash)
     1086{
     1087    OwnPtr<TextureManager> textureManager = TextureManager::create(60*1024*1024, 60*1024*1024, 1024);
     1088    RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(textureManager.get()));
     1089
     1090    int size = 1 << 30;
     1091    layer->setBounds(IntSize(size, size));
     1092    layer->invalidateRect(IntRect(0, 0, size, size));
     1093
     1094    // Ensure no crash for bounds where size * size would overflow an int.
     1095    layer->prepareToUpdate(IntRect(0, 0, 700, 700), 0);
     1096}
     1097
    10851098TEST(TiledLayerChromiumTest, partialUpdates)
    10861099{
  • trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp

    r103944 r112432  
    3939namespace {
    4040
     41class TestTiling : public TilingData {
     42public:
     43    TestTiling(int maxTextureSize, int totalSizeX, int totalSizeY, bool hasBorderTexels)
     44        : TilingData(maxTextureSize, totalSizeX, totalSizeY, hasBorderTexels)
     45    {
     46    }
     47
     48    // This function only available for testing because of potential overflow.
     49    int numTiles() const
     50    {
     51        int numTiles = numTilesX() * numTilesY();
     52
     53        // Assert no overflow.
     54        EXPECT_GE(numTiles, 0);
     55        if (numTiles > 0)
     56            EXPECT_EQ(numTiles / numTilesX(), numTilesY());
     57
     58        return numTiles;
     59    }
     60};
     61
    4162TEST(TilingDataTest, numTiles_NoTiling)
    4263{
    43     EXPECT_EQ(1, TilingData(16, 16, 16, false).numTiles());
    44     EXPECT_EQ(1, TilingData(16, 15, 15, true).numTiles());
    45     EXPECT_EQ(1, TilingData(16, 16, 16, true).numTiles());
    46     EXPECT_EQ(1, TilingData(16,  1, 16, false).numTiles());
    47     EXPECT_EQ(1, TilingData(15, 15, 15, true).numTiles());
     64    EXPECT_EQ(1, TestTiling(16, 16, 16, false).numTiles());
     65    EXPECT_EQ(1, TestTiling(16, 15, 15, true).numTiles());
     66    EXPECT_EQ(1, TestTiling(16, 16, 16, true).numTiles());
     67    EXPECT_EQ(1, TestTiling(16,  1, 16, false).numTiles());
     68    EXPECT_EQ(1, TestTiling(15, 15, 15, true).numTiles());
    4869}
    4970
    5071TEST(TilingDataTest, numTiles_TilingNoBorders)
    5172{
    52     EXPECT_EQ(0, TilingData(0,  0,  0, false).numTiles());
    53     EXPECT_EQ(0, TilingData(0,  4,  0, false).numTiles());
    54     EXPECT_EQ(0, TilingData(0,  0,  4, false).numTiles());
    55     EXPECT_EQ(0, TilingData(4,  4,  0, false).numTiles());
    56     EXPECT_EQ(0, TilingData(4,  0,  4, false).numTiles());
    57     EXPECT_EQ(0, TilingData(-8, 1,  1, false).numTiles());
    58     EXPECT_EQ(0, TilingData(-1, 1,  1, false).numTiles());
    59     EXPECT_EQ(0, TilingData(0,  1,  1, false).numTiles());
    60 
    61     EXPECT_EQ(1, TilingData(1,  1,  1, false).numTiles());
    62     EXPECT_EQ(2, TilingData(1,  1,  2, false).numTiles());
    63     EXPECT_EQ(2, TilingData(1,  2,  1, false).numTiles());
    64     EXPECT_EQ(1, TilingData(2,  1,  1, false).numTiles());
    65     EXPECT_EQ(1, TilingData(2,  1,  2, false).numTiles());
    66     EXPECT_EQ(1, TilingData(2,  2,  1, false).numTiles());
    67     EXPECT_EQ(1, TilingData(2,  2,  2, false).numTiles());
    68     EXPECT_EQ(1, TilingData(3,  3,  3, false).numTiles());
    69 
    70     EXPECT_EQ(1, TilingData(4,  1,  4, false).numTiles());
    71     EXPECT_EQ(1, TilingData(4,  2,  4, false).numTiles());
    72     EXPECT_EQ(1, TilingData(4,  3,  4, false).numTiles());
    73     EXPECT_EQ(1, TilingData(4,  4,  4, false).numTiles());
    74     EXPECT_EQ(2, TilingData(4,  5,  4, false).numTiles());
    75     EXPECT_EQ(2, TilingData(4,  6,  4, false).numTiles());
    76     EXPECT_EQ(2, TilingData(4,  7,  4, false).numTiles());
    77     EXPECT_EQ(2, TilingData(4,  8,  4, false).numTiles());
    78     EXPECT_EQ(3, TilingData(4,  9,  4, false).numTiles());
    79     EXPECT_EQ(3, TilingData(4, 10,  4, false).numTiles());
    80     EXPECT_EQ(3, TilingData(4, 11,  4, false).numTiles());
    81 
    82     EXPECT_EQ(1, TilingData(5,  1,  5, false).numTiles());
    83     EXPECT_EQ(1, TilingData(5,  2,  5, false).numTiles());
    84     EXPECT_EQ(1, TilingData(5,  3,  5, false).numTiles());
    85     EXPECT_EQ(1, TilingData(5,  4,  5, false).numTiles());
    86     EXPECT_EQ(1, TilingData(5,  5,  5, false).numTiles());
    87     EXPECT_EQ(2, TilingData(5,  6,  5, false).numTiles());
    88     EXPECT_EQ(2, TilingData(5,  7,  5, false).numTiles());
    89     EXPECT_EQ(2, TilingData(5,  8,  5, false).numTiles());
    90     EXPECT_EQ(2, TilingData(5,  9,  5, false).numTiles());
    91     EXPECT_EQ(2, TilingData(5, 10,  5, false).numTiles());
    92     EXPECT_EQ(3, TilingData(5, 11,  5, false).numTiles());
    93 
    94     EXPECT_EQ(1, TilingData(16, 16, 16, false).numTiles());
    95     EXPECT_EQ(1, TilingData(17, 16, 16, false).numTiles());
    96     EXPECT_EQ(4, TilingData(15, 16, 16, false).numTiles());
    97     EXPECT_EQ(4, TilingData(8, 16, 16, false).numTiles());
    98     EXPECT_EQ(6, TilingData(8, 17, 16, false).numTiles());
     73    EXPECT_EQ(0, TestTiling(0,  0,  0, false).numTiles());
     74    EXPECT_EQ(0, TestTiling(0,  4,  0, false).numTiles());
     75    EXPECT_EQ(0, TestTiling(0,  0,  4, false).numTiles());
     76    EXPECT_EQ(0, TestTiling(4,  4,  0, false).numTiles());
     77    EXPECT_EQ(0, TestTiling(4,  0,  4, false).numTiles());
     78    EXPECT_EQ(0, TestTiling(-8, 1,  1, false).numTiles());
     79    EXPECT_EQ(0, TestTiling(-1, 1,  1, false).numTiles());
     80    EXPECT_EQ(0, TestTiling(0,  1,  1, false).numTiles());
     81
     82    EXPECT_EQ(1, TestTiling(1,  1,  1, false).numTiles());
     83    EXPECT_EQ(2, TestTiling(1,  1,  2, false).numTiles());
     84    EXPECT_EQ(2, TestTiling(1,  2,  1, false).numTiles());
     85    EXPECT_EQ(1, TestTiling(2,  1,  1, false).numTiles());
     86    EXPECT_EQ(1, TestTiling(2,  1,  2, false).numTiles());
     87    EXPECT_EQ(1, TestTiling(2,  2,  1, false).numTiles());
     88    EXPECT_EQ(1, TestTiling(2,  2,  2, false).numTiles());
     89    EXPECT_EQ(1, TestTiling(3,  3,  3, false).numTiles());
     90
     91    EXPECT_EQ(1, TestTiling(4,  1,  4, false).numTiles());
     92    EXPECT_EQ(1, TestTiling(4,  2,  4, false).numTiles());
     93    EXPECT_EQ(1, TestTiling(4,  3,  4, false).numTiles());
     94    EXPECT_EQ(1, TestTiling(4,  4,  4, false).numTiles());
     95    EXPECT_EQ(2, TestTiling(4,  5,  4, false).numTiles());
     96    EXPECT_EQ(2, TestTiling(4,  6,  4, false).numTiles());
     97    EXPECT_EQ(2, TestTiling(4,  7,  4, false).numTiles());
     98    EXPECT_EQ(2, TestTiling(4,  8,  4, false).numTiles());
     99    EXPECT_EQ(3, TestTiling(4,  9,  4, false).numTiles());
     100    EXPECT_EQ(3, TestTiling(4, 10,  4, false).numTiles());
     101    EXPECT_EQ(3, TestTiling(4, 11,  4, false).numTiles());
     102
     103    EXPECT_EQ(1, TestTiling(5,  1,  5, false).numTiles());
     104    EXPECT_EQ(1, TestTiling(5,  2,  5, false).numTiles());
     105    EXPECT_EQ(1, TestTiling(5,  3,  5, false).numTiles());
     106    EXPECT_EQ(1, TestTiling(5,  4,  5, false).numTiles());
     107    EXPECT_EQ(1, TestTiling(5,  5,  5, false).numTiles());
     108    EXPECT_EQ(2, TestTiling(5,  6,  5, false).numTiles());
     109    EXPECT_EQ(2, TestTiling(5,  7,  5, false).numTiles());
     110    EXPECT_EQ(2, TestTiling(5,  8,  5, false).numTiles());
     111    EXPECT_EQ(2, TestTiling(5,  9,  5, false).numTiles());
     112    EXPECT_EQ(2, TestTiling(5, 10,  5, false).numTiles());
     113    EXPECT_EQ(3, TestTiling(5, 11,  5, false).numTiles());
     114
     115    EXPECT_EQ(1, TestTiling(16, 16, 16, false).numTiles());
     116    EXPECT_EQ(1, TestTiling(17, 16, 16, false).numTiles());
     117    EXPECT_EQ(4, TestTiling(15, 16, 16, false).numTiles());
     118    EXPECT_EQ(4, TestTiling(8, 16, 16, false).numTiles());
     119    EXPECT_EQ(6, TestTiling(8, 17, 16, false).numTiles());
    99120}
    100121
    101122TEST(TilingDataTest, numTiles_TilingWithBorders)
    102123{
    103     EXPECT_EQ(0, TilingData(0,  0,  0, true).numTiles());
    104     EXPECT_EQ(0, TilingData(0,  4,  0, true).numTiles());
    105     EXPECT_EQ(0, TilingData(0,  0,  4, true).numTiles());
    106     EXPECT_EQ(0, TilingData(4,  4,  0, true).numTiles());
    107     EXPECT_EQ(0, TilingData(4,  0,  4, true).numTiles());
    108     EXPECT_EQ(0, TilingData(-8, 1,  1, true).numTiles());
    109     EXPECT_EQ(0, TilingData(-1, 1,  1, true).numTiles());
    110     EXPECT_EQ(0, TilingData(0,  1,  1, true).numTiles());
    111 
    112     EXPECT_EQ(1, TilingData(1,  1,  1, true).numTiles());
    113     EXPECT_EQ(0, TilingData(1,  1,  2, true).numTiles());
    114     EXPECT_EQ(0, TilingData(1,  2,  1, true).numTiles());
    115     EXPECT_EQ(1, TilingData(2,  1,  1, true).numTiles());
    116     EXPECT_EQ(1, TilingData(2,  1,  2, true).numTiles());
    117     EXPECT_EQ(1, TilingData(2,  2,  1, true).numTiles());
    118     EXPECT_EQ(1, TilingData(2,  2,  2, true).numTiles());
    119 
    120     EXPECT_EQ(1, TilingData(3,  1,  3, true).numTiles());
    121     EXPECT_EQ(1, TilingData(3,  2,  3, true).numTiles());
    122     EXPECT_EQ(1, TilingData(3,  3,  3, true).numTiles());
    123     EXPECT_EQ(2, TilingData(3,  4,  3, true).numTiles());
    124     EXPECT_EQ(3, TilingData(3,  5,  3, true).numTiles());
    125     EXPECT_EQ(4, TilingData(3,  6,  3, true).numTiles());
    126     EXPECT_EQ(5, TilingData(3,  7,  3, true).numTiles());
    127 
    128     EXPECT_EQ(1, TilingData(4,  1,  4, true).numTiles());
    129     EXPECT_EQ(1, TilingData(4,  2,  4, true).numTiles());
    130     EXPECT_EQ(1, TilingData(4,  3,  4, true).numTiles());
    131     EXPECT_EQ(1, TilingData(4,  4,  4, true).numTiles());
    132     EXPECT_EQ(2, TilingData(4,  5,  4, true).numTiles());
    133     EXPECT_EQ(2, TilingData(4,  6,  4, true).numTiles());
    134     EXPECT_EQ(3, TilingData(4,  7,  4, true).numTiles());
    135     EXPECT_EQ(3, TilingData(4,  8,  4, true).numTiles());
    136     EXPECT_EQ(4, TilingData(4,  9,  4, true).numTiles());
    137     EXPECT_EQ(4, TilingData(4, 10,  4, true).numTiles());
    138     EXPECT_EQ(5, TilingData(4, 11,  4, true).numTiles());
    139 
    140     EXPECT_EQ(1, TilingData(5,  1,  5, true).numTiles());
    141     EXPECT_EQ(1, TilingData(5,  2,  5, true).numTiles());
    142     EXPECT_EQ(1, TilingData(5,  3,  5, true).numTiles());
    143     EXPECT_EQ(1, TilingData(5,  4,  5, true).numTiles());
    144     EXPECT_EQ(1, TilingData(5,  5,  5, true).numTiles());
    145     EXPECT_EQ(2, TilingData(5,  6,  5, true).numTiles());
    146     EXPECT_EQ(2, TilingData(5,  7,  5, true).numTiles());
    147     EXPECT_EQ(2, TilingData(5,  8,  5, true).numTiles());
    148     EXPECT_EQ(3, TilingData(5,  9,  5, true).numTiles());
    149     EXPECT_EQ(3, TilingData(5, 10,  5, true).numTiles());
    150     EXPECT_EQ(3, TilingData(5, 11,  5, true).numTiles());
     124    EXPECT_EQ(0, TestTiling(0,  0,  0, true).numTiles());
     125    EXPECT_EQ(0, TestTiling(0,  4,  0, true).numTiles());
     126    EXPECT_EQ(0, TestTiling(0,  0,  4, true).numTiles());
     127    EXPECT_EQ(0, TestTiling(4,  4,  0, true).numTiles());
     128    EXPECT_EQ(0, TestTiling(4,  0,  4, true).numTiles());
     129    EXPECT_EQ(0, TestTiling(-8, 1,  1, true).numTiles());
     130    EXPECT_EQ(0, TestTiling(-1, 1,  1, true).numTiles());
     131    EXPECT_EQ(0, TestTiling(0,  1,  1, true).numTiles());
     132
     133    EXPECT_EQ(1, TestTiling(1,  1,  1, true).numTiles());
     134    EXPECT_EQ(0, TestTiling(1,  1,  2, true).numTiles());
     135    EXPECT_EQ(0, TestTiling(1,  2,  1, true).numTiles());
     136    EXPECT_EQ(1, TestTiling(2,  1,  1, true).numTiles());
     137    EXPECT_EQ(1, TestTiling(2,  1,  2, true).numTiles());
     138    EXPECT_EQ(1, TestTiling(2,  2,  1, true).numTiles());
     139    EXPECT_EQ(1, TestTiling(2,  2,  2, true).numTiles());
     140
     141    EXPECT_EQ(1, TestTiling(3,  1,  3, true).numTiles());
     142    EXPECT_EQ(1, TestTiling(3,  2,  3, true).numTiles());
     143    EXPECT_EQ(1, TestTiling(3,  3,  3, true).numTiles());
     144    EXPECT_EQ(2, TestTiling(3,  4,  3, true).numTiles());
     145    EXPECT_EQ(3, TestTiling(3,  5,  3, true).numTiles());
     146    EXPECT_EQ(4, TestTiling(3,  6,  3, true).numTiles());
     147    EXPECT_EQ(5, TestTiling(3,  7,  3, true).numTiles());
     148
     149    EXPECT_EQ(1, TestTiling(4,  1,  4, true).numTiles());
     150    EXPECT_EQ(1, TestTiling(4,  2,  4, true).numTiles());
     151    EXPECT_EQ(1, TestTiling(4,  3,  4, true).numTiles());
     152    EXPECT_EQ(1, TestTiling(4,  4,  4, true).numTiles());
     153    EXPECT_EQ(2, TestTiling(4,  5,  4, true).numTiles());
     154    EXPECT_EQ(2, TestTiling(4,  6,  4, true).numTiles());
     155    EXPECT_EQ(3, TestTiling(4,  7,  4, true).numTiles());
     156    EXPECT_EQ(3, TestTiling(4,  8,  4, true).numTiles());
     157    EXPECT_EQ(4, TestTiling(4,  9,  4, true).numTiles());
     158    EXPECT_EQ(4, TestTiling(4, 10,  4, true).numTiles());
     159    EXPECT_EQ(5, TestTiling(4, 11,  4, true).numTiles());
     160
     161    EXPECT_EQ(1, TestTiling(5,  1,  5, true).numTiles());
     162    EXPECT_EQ(1, TestTiling(5,  2,  5, true).numTiles());
     163    EXPECT_EQ(1, TestTiling(5,  3,  5, true).numTiles());
     164    EXPECT_EQ(1, TestTiling(5,  4,  5, true).numTiles());
     165    EXPECT_EQ(1, TestTiling(5,  5,  5, true).numTiles());
     166    EXPECT_EQ(2, TestTiling(5,  6,  5, true).numTiles());
     167    EXPECT_EQ(2, TestTiling(5,  7,  5, true).numTiles());
     168    EXPECT_EQ(2, TestTiling(5,  8,  5, true).numTiles());
     169    EXPECT_EQ(3, TestTiling(5,  9,  5, true).numTiles());
     170    EXPECT_EQ(3, TestTiling(5, 10,  5, true).numTiles());
     171    EXPECT_EQ(3, TestTiling(5, 11,  5, true).numTiles());
    151172}
    152173
    153174TEST(TilingDataTest, tileXIndexFromSrcCoord)
    154175{
    155     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(0));
    156     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(1));
    157     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(2));
    158     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(3));
    159     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(4));
    160     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(5));
    161     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(6));
    162     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(7));
    163     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(8));
    164     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(9));
    165     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(10));
    166     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileXIndexFromSrcCoord(11));
    167 
    168     EXPECT_EQ(0, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(0));
    169     EXPECT_EQ(0, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(1));
    170     EXPECT_EQ(1, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(2));
    171     EXPECT_EQ(2, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(3));
    172     EXPECT_EQ(3, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(4));
    173     EXPECT_EQ(4, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(5));
    174     EXPECT_EQ(5, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(6));
    175     EXPECT_EQ(6, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(7));
    176     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(8));
    177     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(9));
    178     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(10));
    179     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(11));
    180 
    181     EXPECT_EQ(0, TilingData(1, 1, 1, false).tileXIndexFromSrcCoord(0));
    182     EXPECT_EQ(0, TilingData(2, 2, 2, false).tileXIndexFromSrcCoord(0));
    183     EXPECT_EQ(0, TilingData(2, 2, 2, false).tileXIndexFromSrcCoord(1));
    184     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(0));
    185     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(1));
    186     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileXIndexFromSrcCoord(2));
    187 
    188     EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(0));
    189     EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(1));
    190     EXPECT_EQ(0, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(2));
    191     EXPECT_EQ(1, TilingData(3, 4, 3, false).tileXIndexFromSrcCoord(3));
    192 
    193     EXPECT_EQ(0, TilingData(1, 1, 1, true).tileXIndexFromSrcCoord(0));
    194     EXPECT_EQ(0, TilingData(2, 2, 2, true).tileXIndexFromSrcCoord(0));
    195     EXPECT_EQ(0, TilingData(2, 2, 2, true).tileXIndexFromSrcCoord(1));
    196     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(0));
    197     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(1));
    198     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(2));
    199 
    200     EXPECT_EQ(0, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(0));
    201     EXPECT_EQ(0, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(1));
    202     EXPECT_EQ(1, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(2));
    203     EXPECT_EQ(1, TilingData(3, 4, 3, true).tileXIndexFromSrcCoord(3));
     176    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(0));
     177    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(1));
     178    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(2));
     179    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(3));
     180    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(4));
     181    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(5));
     182    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(6));
     183    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(7));
     184    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(8));
     185    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(9));
     186    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(10));
     187    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileXIndexFromSrcCoord(11));
     188
     189    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(0));
     190    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(1));
     191    EXPECT_EQ(1, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(2));
     192    EXPECT_EQ(2, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(3));
     193    EXPECT_EQ(3, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(4));
     194    EXPECT_EQ(4, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(5));
     195    EXPECT_EQ(5, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(6));
     196    EXPECT_EQ(6, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(7));
     197    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(8));
     198    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(9));
     199    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(10));
     200    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileXIndexFromSrcCoord(11));
     201
     202    EXPECT_EQ(0, TestTiling(1, 1, 1, false).tileXIndexFromSrcCoord(0));
     203    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileXIndexFromSrcCoord(0));
     204    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileXIndexFromSrcCoord(1));
     205    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(0));
     206    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(1));
     207    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileXIndexFromSrcCoord(2));
     208
     209    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(0));
     210    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(1));
     211    EXPECT_EQ(0, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(2));
     212    EXPECT_EQ(1, TestTiling(3, 4, 3, false).tileXIndexFromSrcCoord(3));
     213
     214    EXPECT_EQ(0, TestTiling(1, 1, 1, true).tileXIndexFromSrcCoord(0));
     215    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileXIndexFromSrcCoord(0));
     216    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileXIndexFromSrcCoord(1));
     217    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(0));
     218    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(1));
     219    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileXIndexFromSrcCoord(2));
     220
     221    EXPECT_EQ(0, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(0));
     222    EXPECT_EQ(0, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(1));
     223    EXPECT_EQ(1, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(2));
     224    EXPECT_EQ(1, TestTiling(3, 4, 3, true).tileXIndexFromSrcCoord(3));
    204225}
    205226TEST(TilingDataTest, tileYIndexFromSrcCoord)
    206227{
    207     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(0));
    208     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(1));
    209     EXPECT_EQ(0, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(2));
    210     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(3));
    211     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(4));
    212     EXPECT_EQ(1, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(5));
    213     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(6));
    214     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(7));
    215     EXPECT_EQ(2, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(8));
    216     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(9));
    217     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(10));
    218     EXPECT_EQ(3, TilingData(3, 10, 10, false).tileYIndexFromSrcCoord(11));
    219 
    220     EXPECT_EQ(0, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(0));
    221     EXPECT_EQ(0, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(1));
    222     EXPECT_EQ(1, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(2));
    223     EXPECT_EQ(2, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(3));
    224     EXPECT_EQ(3, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(4));
    225     EXPECT_EQ(4, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(5));
    226     EXPECT_EQ(5, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(6));
    227     EXPECT_EQ(6, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(7));
    228     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(8));
    229     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(9));
    230     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(10));
    231     EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(11));
    232 
    233     EXPECT_EQ(0, TilingData(1, 1, 1, false).tileYIndexFromSrcCoord(0));
    234     EXPECT_EQ(0, TilingData(2, 2, 2, false).tileYIndexFromSrcCoord(0));
    235     EXPECT_EQ(0, TilingData(2, 2, 2, false).tileYIndexFromSrcCoord(1));
    236     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(0));
    237     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(1));
    238     EXPECT_EQ(0, TilingData(3, 3, 3, false).tileYIndexFromSrcCoord(2));
    239 
    240     EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(0));
    241     EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(1));
    242     EXPECT_EQ(0, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(2));
    243     EXPECT_EQ(1, TilingData(3, 3, 4, false).tileYIndexFromSrcCoord(3));
    244 
    245     EXPECT_EQ(0, TilingData(1, 1, 1, true).tileYIndexFromSrcCoord(0));
    246     EXPECT_EQ(0, TilingData(2, 2, 2, true).tileYIndexFromSrcCoord(0));
    247     EXPECT_EQ(0, TilingData(2, 2, 2, true).tileYIndexFromSrcCoord(1));
    248     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(0));
    249     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(1));
    250     EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(2));
    251 
    252     EXPECT_EQ(0, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(0));
    253     EXPECT_EQ(0, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(1));
    254     EXPECT_EQ(1, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(2));
    255     EXPECT_EQ(1, TilingData(3, 3, 4, true).tileYIndexFromSrcCoord(3));
     228    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(0));
     229    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(1));
     230    EXPECT_EQ(0, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(2));
     231    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(3));
     232    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(4));
     233    EXPECT_EQ(1, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(5));
     234    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(6));
     235    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(7));
     236    EXPECT_EQ(2, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(8));
     237    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(9));
     238    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(10));
     239    EXPECT_EQ(3, TestTiling(3, 10, 10, false).tileYIndexFromSrcCoord(11));
     240
     241    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(0));
     242    EXPECT_EQ(0, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(1));
     243    EXPECT_EQ(1, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(2));
     244    EXPECT_EQ(2, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(3));
     245    EXPECT_EQ(3, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(4));
     246    EXPECT_EQ(4, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(5));
     247    EXPECT_EQ(5, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(6));
     248    EXPECT_EQ(6, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(7));
     249    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(8));
     250    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(9));
     251    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(10));
     252    EXPECT_EQ(7, TestTiling(3, 10, 10, true).tileYIndexFromSrcCoord(11));
     253
     254    EXPECT_EQ(0, TestTiling(1, 1, 1, false).tileYIndexFromSrcCoord(0));
     255    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileYIndexFromSrcCoord(0));
     256    EXPECT_EQ(0, TestTiling(2, 2, 2, false).tileYIndexFromSrcCoord(1));
     257    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(0));
     258    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(1));
     259    EXPECT_EQ(0, TestTiling(3, 3, 3, false).tileYIndexFromSrcCoord(2));
     260
     261    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(0));
     262    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(1));
     263    EXPECT_EQ(0, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(2));
     264    EXPECT_EQ(1, TestTiling(3, 3, 4, false).tileYIndexFromSrcCoord(3));
     265
     266    EXPECT_EQ(0, TestTiling(1, 1, 1, true).tileYIndexFromSrcCoord(0));
     267    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileYIndexFromSrcCoord(0));
     268    EXPECT_EQ(0, TestTiling(2, 2, 2, true).tileYIndexFromSrcCoord(1));
     269    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(0));
     270    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(1));
     271    EXPECT_EQ(0, TestTiling(3, 3, 3, true).tileYIndexFromSrcCoord(2));
     272
     273    EXPECT_EQ(0, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(0));
     274    EXPECT_EQ(0, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(1));
     275    EXPECT_EQ(1, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(2));
     276    EXPECT_EQ(1, TestTiling(3, 3, 4, true).tileYIndexFromSrcCoord(3));
    256277}
    257278
    258279TEST(TilingDataTest, tileSizeX)
    259280{
    260     EXPECT_EQ(5, TilingData(5,  5,  5, false).tileSizeX(0));
    261     EXPECT_EQ(5, TilingData(5,  5,  5, true).tileSizeX(0));
    262 
    263     EXPECT_EQ(5, TilingData(5,  6,  6, false).tileSizeX(0));
    264     EXPECT_EQ(1, TilingData(5,  6,  6, false).tileSizeX(1));
    265     EXPECT_EQ(4, TilingData(5,  6,  6, true).tileSizeX(0));
    266     EXPECT_EQ(2, TilingData(5,  6,  6, true).tileSizeX(1));
    267 
    268     EXPECT_EQ(5, TilingData(5,  8,  8, false).tileSizeX(0));
    269     EXPECT_EQ(3, TilingData(5,  8,  8, false).tileSizeX(1));
    270     EXPECT_EQ(4, TilingData(5,  8,  8, true).tileSizeX(0));
    271     EXPECT_EQ(4, TilingData(5,  8,  8, true).tileSizeX(1));
    272 
    273     EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeX(0));
    274     EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeX(1));
    275     EXPECT_EQ(4, TilingData(5, 10, 10, true).tileSizeX(0));
    276     EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeX(1));
    277     EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeX(2));
    278 
    279     EXPECT_EQ(4, TilingData(5, 11, 11, true).tileSizeX(2));
    280     EXPECT_EQ(3, TilingData(5, 12, 12, true).tileSizeX(2));
     281    EXPECT_EQ(5, TestTiling(5,  5,  5, false).tileSizeX(0));
     282    EXPECT_EQ(5, TestTiling(5,  5,  5, true).tileSizeX(0));
     283
     284    EXPECT_EQ(5, TestTiling(5,  6,  6, false).tileSizeX(0));
     285    EXPECT_EQ(1, TestTiling(5,  6,  6, false).tileSizeX(1));
     286    EXPECT_EQ(4, TestTiling(5,  6,  6, true).tileSizeX(0));
     287    EXPECT_EQ(2, TestTiling(5,  6,  6, true).tileSizeX(1));
     288
     289    EXPECT_EQ(5, TestTiling(5,  8,  8, false).tileSizeX(0));
     290    EXPECT_EQ(3, TestTiling(5,  8,  8, false).tileSizeX(1));
     291    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeX(0));
     292    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeX(1));
     293
     294    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeX(0));
     295    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeX(1));
     296    EXPECT_EQ(4, TestTiling(5, 10, 10, true).tileSizeX(0));
     297    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeX(1));
     298    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeX(2));
     299
     300    EXPECT_EQ(4, TestTiling(5, 11, 11, true).tileSizeX(2));
     301    EXPECT_EQ(3, TestTiling(5, 12, 12, true).tileSizeX(2));
    281302}
    282303TEST(TilingDataTest, tileSizeY)
    283304{
    284     EXPECT_EQ(5, TilingData(5,  5,  5, false).tileSizeY(0));
    285     EXPECT_EQ(5, TilingData(5,  5,  5, true).tileSizeY(0));
    286 
    287     EXPECT_EQ(5, TilingData(5,  6,  6, false).tileSizeY(0));
    288     EXPECT_EQ(1, TilingData(5,  6,  6, false).tileSizeY(1));
    289     EXPECT_EQ(4, TilingData(5,  6,  6, true).tileSizeY(0));
    290     EXPECT_EQ(2, TilingData(5,  6,  6, true).tileSizeY(1));
    291 
    292     EXPECT_EQ(5, TilingData(5,  8,  8, false).tileSizeY(0));
    293     EXPECT_EQ(3, TilingData(5,  8,  8, false).tileSizeY(1));
    294     EXPECT_EQ(4, TilingData(5,  8,  8, true).tileSizeY(0));
    295     EXPECT_EQ(4, TilingData(5,  8,  8, true).tileSizeY(1));
    296 
    297     EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeY(0));
    298     EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeY(1));
    299     EXPECT_EQ(4, TilingData(5, 10, 10, true).tileSizeY(0));
    300     EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeY(1));
    301     EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeY(2));
    302 
    303     EXPECT_EQ(4, TilingData(5, 11, 11, true).tileSizeY(2));
    304     EXPECT_EQ(3, TilingData(5, 12, 12, true).tileSizeY(2));
     305    EXPECT_EQ(5, TestTiling(5,  5,  5, false).tileSizeY(0));
     306    EXPECT_EQ(5, TestTiling(5,  5,  5, true).tileSizeY(0));
     307
     308    EXPECT_EQ(5, TestTiling(5,  6,  6, false).tileSizeY(0));
     309    EXPECT_EQ(1, TestTiling(5,  6,  6, false).tileSizeY(1));
     310    EXPECT_EQ(4, TestTiling(5,  6,  6, true).tileSizeY(0));
     311    EXPECT_EQ(2, TestTiling(5,  6,  6, true).tileSizeY(1));
     312
     313    EXPECT_EQ(5, TestTiling(5,  8,  8, false).tileSizeY(0));
     314    EXPECT_EQ(3, TestTiling(5,  8,  8, false).tileSizeY(1));
     315    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeY(0));
     316    EXPECT_EQ(4, TestTiling(5,  8,  8, true).tileSizeY(1));
     317
     318    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeY(0));
     319    EXPECT_EQ(5, TestTiling(5, 10, 10, false).tileSizeY(1));
     320    EXPECT_EQ(4, TestTiling(5, 10, 10, true).tileSizeY(0));
     321    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeY(1));
     322    EXPECT_EQ(3, TestTiling(5, 10, 10, true).tileSizeY(2));
     323
     324    EXPECT_EQ(4, TestTiling(5, 11, 11, true).tileSizeY(2));
     325    EXPECT_EQ(3, TestTiling(5, 12, 12, true).tileSizeY(2));
    305326}
    306327
     
    308329{
    309330    // Single tile cases:
    310     EXPECT_EQ(1, TilingData(3, 1,   1, false).tileSizeX(0));
    311     EXPECT_EQ(0, TilingData(3, 1,   1, false).tilePositionX(0));
    312     EXPECT_EQ(1, TilingData(3, 1, 100, false).tileSizeX(0));
    313     EXPECT_EQ(0, TilingData(3, 1, 100, false).tilePositionX(0));
    314     EXPECT_EQ(3, TilingData(3, 3,   1, false).tileSizeX(0));
    315     EXPECT_EQ(0, TilingData(3, 3,   1, false).tilePositionX(0));
    316     EXPECT_EQ(3, TilingData(3, 3, 100, false).tileSizeX(0));
    317     EXPECT_EQ(0, TilingData(3, 3, 100, false).tilePositionX(0));
    318     EXPECT_EQ(1, TilingData(3, 1,   1, true).tileSizeX(0));
    319     EXPECT_EQ(0, TilingData(3, 1,   1, true).tilePositionX(0));
    320     EXPECT_EQ(1, TilingData(3, 1, 100, true).tileSizeX(0));
    321     EXPECT_EQ(0, TilingData(3, 1, 100, true).tilePositionX(0));
    322     EXPECT_EQ(3, TilingData(3, 3,   1, true).tileSizeX(0));
    323     EXPECT_EQ(0, TilingData(3, 3,   1, true).tilePositionX(0));
    324     EXPECT_EQ(3, TilingData(3, 3, 100, true).tileSizeX(0));
    325     EXPECT_EQ(0, TilingData(3, 3, 100, true).tilePositionX(0));
     331    EXPECT_EQ(1, TestTiling(3, 1,   1, false).tileSizeX(0));
     332    EXPECT_EQ(0, TestTiling(3, 1,   1, false).tilePositionX(0));
     333    EXPECT_EQ(1, TestTiling(3, 1, 100, false).tileSizeX(0));
     334    EXPECT_EQ(0, TestTiling(3, 1, 100, false).tilePositionX(0));
     335    EXPECT_EQ(3, TestTiling(3, 3,   1, false).tileSizeX(0));
     336    EXPECT_EQ(0, TestTiling(3, 3,   1, false).tilePositionX(0));
     337    EXPECT_EQ(3, TestTiling(3, 3, 100, false).tileSizeX(0));
     338    EXPECT_EQ(0, TestTiling(3, 3, 100, false).tilePositionX(0));
     339    EXPECT_EQ(1, TestTiling(3, 1,   1, true).tileSizeX(0));
     340    EXPECT_EQ(0, TestTiling(3, 1,   1, true).tilePositionX(0));
     341    EXPECT_EQ(1, TestTiling(3, 1, 100, true).tileSizeX(0));
     342    EXPECT_EQ(0, TestTiling(3, 1, 100, true).tilePositionX(0));
     343    EXPECT_EQ(3, TestTiling(3, 3,   1, true).tileSizeX(0));
     344    EXPECT_EQ(0, TestTiling(3, 3,   1, true).tilePositionX(0));
     345    EXPECT_EQ(3, TestTiling(3, 3, 100, true).tileSizeX(0));
     346    EXPECT_EQ(0, TestTiling(3, 3, 100, true).tilePositionX(0));
    326347
    327348    // Multiple tiles:
    328349    // no border
    329350    // positions 0, 3
    330     EXPECT_EQ(2, TilingData(3, 6,   1, false).numTiles());
    331     EXPECT_EQ(3, TilingData(3, 6,   1, false).tileSizeX(0));
    332     EXPECT_EQ(3, TilingData(3, 6,   1, false).tileSizeX(1));
    333     EXPECT_EQ(0, TilingData(3, 6,   1, false).tilePositionX(0));
    334     EXPECT_EQ(3, TilingData(3, 6,   1, false).tilePositionX(1));
    335     EXPECT_EQ(3, TilingData(3, 6, 100, false).tileSizeX(0));
    336     EXPECT_EQ(3, TilingData(3, 6, 100, false).tileSizeX(1));
    337     EXPECT_EQ(0, TilingData(3, 6, 100, false).tilePositionX(0));
    338     EXPECT_EQ(3, TilingData(3, 6, 100, false).tilePositionX(1));
     351    EXPECT_EQ(2, TestTiling(3, 6,   1, false).numTiles());
     352    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tileSizeX(0));
     353    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tileSizeX(1));
     354    EXPECT_EQ(0, TestTiling(3, 6,   1, false).tilePositionX(0));
     355    EXPECT_EQ(3, TestTiling(3, 6,   1, false).tilePositionX(1));
     356    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tileSizeX(0));
     357    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tileSizeX(1));
     358    EXPECT_EQ(0, TestTiling(3, 6, 100, false).tilePositionX(0));
     359    EXPECT_EQ(3, TestTiling(3, 6, 100, false).tilePositionX(1));
    339360
    340361    // Multiple tiles:
    341362    // with border
    342363    // positions 0, 2, 3, 4
    343     EXPECT_EQ(4, TilingData(3, 6,   1, true).numTiles());
    344     EXPECT_EQ(2, TilingData(3, 6,   1, true).tileSizeX(0));
    345     EXPECT_EQ(1, TilingData(3, 6,   1, true).tileSizeX(1));
    346     EXPECT_EQ(1, TilingData(3, 6,   1, true).tileSizeX(2));
    347     EXPECT_EQ(2, TilingData(3, 6,   1, true).tileSizeX(3));
    348     EXPECT_EQ(0, TilingData(3, 6,   1, true).tilePositionX(0));
    349     EXPECT_EQ(2, TilingData(3, 6,   1, true).tilePositionX(1));
    350     EXPECT_EQ(3, TilingData(3, 6,   1, true).tilePositionX(2));
    351     EXPECT_EQ(4, TilingData(3, 6,   1, true).tilePositionX(3));
    352     EXPECT_EQ(2, TilingData(3, 6, 100, true).tileSizeX(0));
    353     EXPECT_EQ(1, TilingData(3, 6, 100, true).tileSizeX(1));
    354     EXPECT_EQ(1, TilingData(3, 6, 100, true).tileSizeX(2));
    355     EXPECT_EQ(2, TilingData(3, 6, 100, true).tileSizeX(3));
    356     EXPECT_EQ(0, TilingData(3, 6, 100, true).tilePositionX(0));
    357     EXPECT_EQ(2, TilingData(3, 6, 100, true).tilePositionX(1));
    358     EXPECT_EQ(3, TilingData(3, 6, 100, true).tilePositionX(2));
    359     EXPECT_EQ(4, TilingData(3, 6, 100, true).tilePositionX(3));
     364    EXPECT_EQ(4, TestTiling(3, 6,   1, true).numTiles());
     365    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tileSizeX(0));
     366    EXPECT_EQ(1, TestTiling(3, 6,   1, true).tileSizeX(1));
     367    EXPECT_EQ(1, TestTiling(3, 6,   1, true).tileSizeX(2));
     368    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tileSizeX(3));
     369    EXPECT_EQ(0, TestTiling(3, 6,   1, true).tilePositionX(0));
     370    EXPECT_EQ(2, TestTiling(3, 6,   1, true).tilePositionX(1));
     371    EXPECT_EQ(3, TestTiling(3, 6,   1, true).tilePositionX(2));
     372    EXPECT_EQ(4, TestTiling(3, 6,   1, true).tilePositionX(3));
     373    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tileSizeX(0));
     374    EXPECT_EQ(1, TestTiling(3, 6, 100, true).tileSizeX(1));
     375    EXPECT_EQ(1, TestTiling(3, 6, 100, true).tileSizeX(2));
     376    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tileSizeX(3));
     377    EXPECT_EQ(0, TestTiling(3, 6, 100, true).tilePositionX(0));
     378    EXPECT_EQ(2, TestTiling(3, 6, 100, true).tilePositionX(1));
     379    EXPECT_EQ(3, TestTiling(3, 6, 100, true).tilePositionX(2));
     380    EXPECT_EQ(4, TestTiling(3, 6, 100, true).tilePositionX(3));
    360381}
    361382
     
    363384{
    364385    // Single tile cases:
    365     EXPECT_EQ(1, TilingData(3,   1, 1, false).tileSizeY(0));
    366     EXPECT_EQ(0, TilingData(3,   1, 1, false).tilePositionY(0));
    367     EXPECT_EQ(1, TilingData(3, 100, 1, false).tileSizeY(0));
    368     EXPECT_EQ(0, TilingData(3, 100, 1, false).tilePositionY(0));
    369     EXPECT_EQ(3, TilingData(3,   1, 3, false).tileSizeY(0));
    370     EXPECT_EQ(0, TilingData(3,   1, 3, false).tilePositionY(0));
    371     EXPECT_EQ(3, TilingData(3, 100, 3, false).tileSizeY(0));
    372     EXPECT_EQ(0, TilingData(3, 100, 3, false).tilePositionY(0));
    373     EXPECT_EQ(1, TilingData(3,   1, 1, true).tileSizeY(0));
    374     EXPECT_EQ(0, TilingData(3,   1, 1, true).tilePositionY(0));
    375     EXPECT_EQ(1, TilingData(3, 100, 1, true).tileSizeY(0));
    376     EXPECT_EQ(0, TilingData(3, 100, 1, true).tilePositionY(0));
    377     EXPECT_EQ(3, TilingData(3,   1, 3, true).tileSizeY(0));
    378     EXPECT_EQ(0, TilingData(3,   1, 3, true).tilePositionY(0));
    379     EXPECT_EQ(3, TilingData(3, 100, 3, true).tileSizeY(0));
    380     EXPECT_EQ(0, TilingData(3, 100, 3, true).tilePositionY(0));
     386    EXPECT_EQ(1, TestTiling(3,   1, 1, false).tileSizeY(0));
     387    EXPECT_EQ(0, TestTiling(3,   1, 1, false).tilePositionY(0));
     388    EXPECT_EQ(1, TestTiling(3, 100, 1, false).tileSizeY(0));
     389    EXPECT_EQ(0, TestTiling(3, 100, 1, false).tilePositionY(0));
     390    EXPECT_EQ(3, TestTiling(3,   1, 3, false).tileSizeY(0));
     391    EXPECT_EQ(0, TestTiling(3,   1, 3, false).tilePositionY(0));
     392    EXPECT_EQ(3, TestTiling(3, 100, 3, false).tileSizeY(0));
     393    EXPECT_EQ(0, TestTiling(3, 100, 3, false).tilePositionY(0));
     394    EXPECT_EQ(1, TestTiling(3,   1, 1, true).tileSizeY(0));
     395    EXPECT_EQ(0, TestTiling(3,   1, 1, true).tilePositionY(0));
     396    EXPECT_EQ(1, TestTiling(3, 100, 1, true).tileSizeY(0));
     397    EXPECT_EQ(0, TestTiling(3, 100, 1, true).tilePositionY(0));
     398    EXPECT_EQ(3, TestTiling(3,   1, 3, true).tileSizeY(0));
     399    EXPECT_EQ(0, TestTiling(3,   1, 3, true).tilePositionY(0));
     400    EXPECT_EQ(3, TestTiling(3, 100, 3, true).tileSizeY(0));
     401    EXPECT_EQ(0, TestTiling(3, 100, 3, true).tilePositionY(0));
    381402
    382403    // Multiple tiles:
    383404    // no border
    384405    // positions 0, 3
    385     EXPECT_EQ(2, TilingData(3,   1, 6, false).numTiles());
    386     EXPECT_EQ(3, TilingData(3,   1, 6, false).tileSizeY(0));
    387     EXPECT_EQ(3, TilingData(3,   1, 6, false).tileSizeY(1));
    388     EXPECT_EQ(0, TilingData(3,   1, 6, false).tilePositionY(0));
    389     EXPECT_EQ(3, TilingData(3,   1, 6, false).tilePositionY(1));
    390     EXPECT_EQ(3, TilingData(3, 100, 6, false).tileSizeY(0));
    391     EXPECT_EQ(3, TilingData(3, 100, 6, false).tileSizeY(1));
    392     EXPECT_EQ(0, TilingData(3, 100, 6, false).tilePositionY(0));
    393     EXPECT_EQ(3, TilingData(3, 100, 6, false).tilePositionY(1));
     406    EXPECT_EQ(2, TestTiling(3,   1, 6, false).numTiles());
     407    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tileSizeY(0));
     408    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tileSizeY(1));
     409    EXPECT_EQ(0, TestTiling(3,   1, 6, false).tilePositionY(0));
     410    EXPECT_EQ(3, TestTiling(3,   1, 6, false).tilePositionY(1));
     411    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tileSizeY(0));
     412    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tileSizeY(1));
     413    EXPECT_EQ(0, TestTiling(3, 100, 6, false).tilePositionY(0));
     414    EXPECT_EQ(3, TestTiling(3, 100, 6, false).tilePositionY(1));
    394415
    395416    // Multiple tiles:
    396417    // with border
    397418    // positions 0, 2, 3, 4
    398     EXPECT_EQ(4, TilingData(3,   1, 6, true).numTiles());
    399     EXPECT_EQ(2, TilingData(3,   1, 6, true).tileSizeY(0));
    400     EXPECT_EQ(1, TilingData(3,   1, 6, true).tileSizeY(1));
    401     EXPECT_EQ(1, TilingData(3,   1, 6, true).tileSizeY(2));
    402     EXPECT_EQ(2, TilingData(3,   1, 6, true).tileSizeY(3));
    403     EXPECT_EQ(0, TilingData(3,   1, 6, true).tilePositionY(0));
    404     EXPECT_EQ(2, TilingData(3,   1, 6, true).tilePositionY(1));
    405     EXPECT_EQ(3, TilingData(3,   1, 6, true).tilePositionY(2));
    406     EXPECT_EQ(4, TilingData(3,   1, 6, true).tilePositionY(3));
    407     EXPECT_EQ(2, TilingData(3, 100, 6, true).tileSizeY(0));
    408     EXPECT_EQ(1, TilingData(3, 100, 6, true).tileSizeY(1));
    409     EXPECT_EQ(1, TilingData(3, 100, 6, true).tileSizeY(2));
    410     EXPECT_EQ(2, TilingData(3, 100, 6, true).tileSizeY(3));
    411     EXPECT_EQ(0, TilingData(3, 100, 6, true).tilePositionY(0));
    412     EXPECT_EQ(2, TilingData(3, 100, 6, true).tilePositionY(1));
    413     EXPECT_EQ(3, TilingData(3, 100, 6, true).tilePositionY(2));
    414     EXPECT_EQ(4, TilingData(3, 100, 6, true).tilePositionY(3));
     419    EXPECT_EQ(4, TestTiling(3,   1, 6, true).numTiles());
     420    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tileSizeY(0));
     421    EXPECT_EQ(1, TestTiling(3,   1, 6, true).tileSizeY(1));
     422    EXPECT_EQ(1, TestTiling(3,   1, 6, true).tileSizeY(2));
     423    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tileSizeY(3));
     424    EXPECT_EQ(0, TestTiling(3,   1, 6, true).tilePositionY(0));
     425    EXPECT_EQ(2, TestTiling(3,   1, 6, true).tilePositionY(1));
     426    EXPECT_EQ(3, TestTiling(3,   1, 6, true).tilePositionY(2));
     427    EXPECT_EQ(4, TestTiling(3,   1, 6, true).tilePositionY(3));
     428    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tileSizeY(0));
     429    EXPECT_EQ(1, TestTiling(3, 100, 6, true).tileSizeY(1));
     430    EXPECT_EQ(1, TestTiling(3, 100, 6, true).tileSizeY(2));
     431    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tileSizeY(3));
     432    EXPECT_EQ(0, TestTiling(3, 100, 6, true).tilePositionY(0));
     433    EXPECT_EQ(2, TestTiling(3, 100, 6, true).tilePositionY(1));
     434    EXPECT_EQ(3, TestTiling(3, 100, 6, true).tilePositionY(2));
     435    EXPECT_EQ(4, TestTiling(3, 100, 6, true).tilePositionY(3));
    415436}
    416437
    417438TEST(TilingDataTest, setTotalSize)
    418439{
    419     TilingData data(5, 5, 5, false);
     440    TestTiling data(5, 5, 5, false);
    420441    EXPECT_EQ(5, data.totalSizeX());
    421442    EXPECT_EQ(5, data.totalSizeY());
     
    447468TEST(TilingDataTest, setMaxTextureSizeNoBorders)
    448469{
    449     TilingData data(8, 16, 32, false);
     470    TestTiling data(8, 16, 32, false);
    450471    EXPECT_EQ(2, data.numTilesX());
    451472    EXPECT_EQ(4, data.numTilesY());
     
    469490TEST(TilingDataTest, setMaxTextureSizeBorders)
    470491{
    471     TilingData data(8, 16, 32, true);
     492    TestTiling data(8, 16, 32, true);
    472493    EXPECT_EQ(3, data.numTilesX());
    473494    EXPECT_EQ(5, data.numTilesY());
     
    492513{
    493514    {
    494         TilingData source(8, 16, 32, true);
    495         TilingData dest = source;
     515        TestTiling source(8, 16, 32, true);
     516        TestTiling dest = source;
    496517        EXPECT_EQ(source.borderTexels(), dest.borderTexels());
    497518        EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
     
    502523    }
    503524    {
    504         TilingData source(3, 6, 100, false);
    505         TilingData dest(source);
     525        TestTiling source(3, 6, 100, false);
     526        TestTiling dest(source);
    506527        EXPECT_EQ(source.borderTexels(), dest.borderTexels());
    507528        EXPECT_EQ(source.maxTextureSize(), dest.maxTextureSize());
     
    515536TEST(TilingDataTest, setBorderTexels)
    516537{
    517     TilingData data(8, 16, 32, false);
     538    TestTiling data(8, 16, 32, false);
    518539    EXPECT_EQ(2, data.numTilesX());
    519540    EXPECT_EQ(4, data.numTilesY());
Note: See TracChangeset for help on using the changeset viewer.