/* * Copyright 2014 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.maps.android.heatmaps; import com.google.android.gms.maps.model.LatLng; import com.google.maps.android.geometry.Bounds; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Arrays; /** * Tests for heatmap utility functions */ public class UtilTest extends TestCase { public void testGenerateKernel() { double[] testKernel = HeatmapTileProvider.generateKernel(5, 1.5); double[] expectedKernel = {0.0038659201394728076, 0.028565500784550377, 0.1353352832366127, 0.41111229050718745, 0.8007374029168081, 1.0, 0.8007374029168081, 0.41111229050718745, 0.1353352832366127, 0.028565500784550377, 0.0038659201394728076}; assertTrue(Arrays.equals(testKernel, expectedKernel)); } public void testConvolveCorners() { /* 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 */ double[][] grid = new double[5][5]; grid[0][0] = 1; grid[4][4] = 1; grid[4][0] = 1; grid[0][4] = 1; double[] testKernel = {0.5, 1, 0.5}; double[][] convolved = HeatmapTileProvider.convolve(grid, testKernel); double[][] expected = {{0.25, 0, 0.25}, {0, 0, 0}, {0.25, 0, 0.25}}; assertTrue(Arrays.deepEquals(convolved, expected)); } public void testConvolveEdges() { /* 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 */ double[][] grid = new double[5][5]; grid[0][2] = 1; grid[2][0] = 1; grid[2][4] = 1; grid[4][2] = 1; double[] testKernel = {0.5, 1, 0.5}; double[][] convolved = HeatmapTileProvider.convolve(grid, testKernel); double[][] expected = {{0.5, 0.5, 0.5}, {0.5, 0, 0.5}, {0.5, 0.5, 0.5}}; assertTrue(Arrays.deepEquals(convolved, expected)); } public void testConvolveCentre() { /* 0 0 0 0 0 0 0 1 0 0 0 1 2 1 0 0 0 1 0 0 0 0 0 0 0 */ double[][] grid = new double[5][5]; grid[2][2] = 2; grid[2][1] = 1; grid[1][2] = 1; grid[2][3] = 1; grid[3][2] = 1; double[] testKernel = {0.5, 1, 0.5}; double[][] convolved = HeatmapTileProvider.convolve(grid, testKernel); double[][] expected = {{1.5, 2.5, 1.5}, {2.5, 4.0, 2.5}, {1.5, 2.5, 1.5}}; assertTrue(Arrays.deepEquals(convolved, expected)); } public void testGetBounds() { /* y ^ | 3 | 1 | 2 ------------> x */ ArrayList<WeightedLatLng> data = new ArrayList<WeightedLatLng>(); WeightedLatLng first = new WeightedLatLng(new LatLng(10, 20)); data.add(first); double x1 = first.getPoint().x; double y1 = first.getPoint().y; Bounds bounds = HeatmapTileProvider.getBounds(data); Bounds expected = new Bounds(x1, x1, y1, y1); assertTrue(bounds.contains(expected) && expected.contains(bounds)); WeightedLatLng second = new WeightedLatLng(new LatLng(20, 30)); data.add(second); double x2 = second.getPoint().x; double y2 = second.getPoint().y; bounds = HeatmapTileProvider.getBounds(data); expected = new Bounds(x1, x2, y2, y1); assertTrue(bounds.contains(expected) && expected.contains(bounds)); WeightedLatLng third = new WeightedLatLng(new LatLng(5, 10)); data.add(third); double x3 = third.getPoint().x; double y3 = third.getPoint().y; bounds = HeatmapTileProvider.getBounds(data); expected = new Bounds(x3, x2, y2, y3); assertTrue(bounds.contains(expected) && expected.contains(bounds)); } }