public MapTileArea set(final int pZoom, final int pLeft, final int pTop, final int pRight, final int pBottom) {
        mZoom = pZoom;
        mMapTileUpperBound = 1 << mZoom;
        mWidth = computeSize(pLeft, pRight);
        mHeight = computeSize(pTop, pBottom);
        mLeft = cleanValue(pLeft);
        mTop = cleanValue(pTop);
        return this;
    }
@Test
    public void testPerformances() {
        final MapTileList list = new MapTileList();
        final MapTileArea area = new MapTileArea();
        final int zoom = 10;
        final int size = 10;
        long start, end, duration1, duration2;

        // checking if area is faster than list during initialization
        list.ensureCapacity(size * size);
        start = System.nanoTime();
        list.put(zoom, 0, 0, size - 1, size - 1);
        end = System.nanoTime();
        duration1 = end - start;
        start = System.nanoTime();
        area.set(zoom, 0, 0, size - 1, size - 1);
        end = System.nanoTime();
        duration2 = end - start;
        checkDuration(duration1, duration2);

        // find all items of the list
        checkContainDuration(zoom, zoom, size - 1, size - 1, list, area, true);

        // cannot find any item on lower zooms
        checkContainDuration(0, zoom - 1, 0, 0, list, area, false);

        // cannot find any item on higher zooms
        checkContainDuration(zoom + 1, TileSystem.getMaximumZoomLevel(), 0, 0, list, area, false);
    }