@Override
    public MapTileArea computeFromSource(final MapTileArea pSource, final MapTileArea pReuse) {
        final MapTileArea out = pReuse != null ? pReuse : new MapTileArea();
        if (pSource.size() == 0) {
            out.reset();
            return out;
        }
        final int sourceZoom = pSource.getZoom();
        int destZoom = sourceZoom + mZoomDelta;
        if (destZoom < 0 || destZoom > MapTileIndex.mMaxZoomLevel) {
            out.reset();
            return out;
        }
        if (mZoomDelta <= 0) {
            out.set(destZoom,
                    pSource.getLeft() >> -mZoomDelta, pSource.getTop() >> -mZoomDelta,
                    pSource.getRight() >> -mZoomDelta, pSource.getBottom() >> -mZoomDelta);
            return out;
        }
        out.set(destZoom,
                pSource.getLeft() << mZoomDelta, pSource.getTop() << mZoomDelta,
                ((1 + pSource.getRight()) << mZoomDelta) - 1, ((1 + pSource.getBottom()) << mZoomDelta) - 1
        );
        return out;
    }
@Test
    public void testBugANRSideEffect() {
        final MapTileArea source = new MapTileArea();
        final MapTileArea dest = new MapTileArea();
        source.set(0, 0, 0, 1, 1);
        final MapTileAreaZoomComputer computer = new MapTileAreaZoomComputer(-1);
        computer.computeFromSource(source, dest);
        Assert.assertEquals(0, dest.getWidth());
    }