/*
* 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 android.graphics.Color;
import junit.framework.TestCase;
public class GradientTest extends TestCase {
public void testInterpolateColor() {
int red = Color.RED;
int blue = Color.BLUE;
int green = Color.GREEN;
// Expect itself
assertEquals(red, Gradient.interpolateColor(red, red, 0.5f));
assertEquals(blue, Gradient.interpolateColor(blue, blue, 0.5f));
assertEquals(green, Gradient.interpolateColor(green, green, 0.5f));
// Expect first to be returned
int result = Gradient.interpolateColor(red, blue, 0);
assertEquals(red, result);
// Expect second to be returned
result = Gradient.interpolateColor(red, blue, 1);
assertEquals(blue, result);
// Expect same value (should wraparound correctly, shortest path both times)
assertEquals(Gradient.interpolateColor(red, blue, 0.5f),
Gradient.interpolateColor(blue, red, 0.5f));
assertEquals(Gradient.interpolateColor(red, blue, 0.2f),
Gradient.interpolateColor(blue, red, 0.8f));
assertEquals(Gradient.interpolateColor(red, blue, 0.8f),
Gradient.interpolateColor(blue, red, 0.2f));
// Testing actual values now
assertEquals(Gradient.interpolateColor(red, blue, 0.2f), -65433);
assertEquals(Gradient.interpolateColor(red, blue, 0.5f), Color.MAGENTA);
assertEquals(Gradient.interpolateColor(red, blue, 0.8f), -10092289);
assertEquals(Gradient.interpolateColor(red, green, 0.5f), Color.YELLOW);
assertEquals(Gradient.interpolateColor(blue, green, 0.5f), Color.CYAN);
}
public void testSimpleColorMap() {
int[] colors = {Color.RED, Color.BLUE};
float[] startPoints = {0f, 1.0f};
Gradient g = new Gradient(colors, startPoints, 2);
int[] colorMap = g.generateColorMap(1.0);
assertEquals(colorMap[0], Color.RED);
assertEquals(colorMap[1], Gradient.interpolateColor(Color.RED, Color.BLUE, 0.5f));
}
public void testLargerColorMap() {
int[] colors = {Color.RED, Color.GREEN};
float[] startPoints = {0f, 1.0f};
Gradient g = new Gradient(colors, startPoints, 10);
int[] colorMap = g.generateColorMap(1.0);
assertEquals(colorMap[0], Color.RED);
for (int i = 1; i < 10; i++) {
assertEquals(colorMap[i], Gradient.interpolateColor(Color.RED, Color.GREEN, (i * 0.1f)));
}
}
public void testOpacityInterpolation() {
int[] colors = {
Color.argb(0, 0, 255, 0),
Color.GREEN,
Color.RED
};
float[] startPoints = {
0f, 0.2f, 1f
};
Gradient g = new Gradient(colors, startPoints, 10);
int[] colorMap = g.generateColorMap(1.0);
assertEquals(colorMap[0], Color.argb(0, 0, 255, 0));
assertEquals(colorMap[1], Color.argb(127, 0, 255, 0));
assertEquals(colorMap[2], Color.GREEN);
assertEquals(colorMap[3], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.125f));
assertEquals(colorMap[4], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.25f));
assertEquals(colorMap[5], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.375f));
assertEquals(colorMap[6], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.5f));
assertEquals(colorMap[7], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.625f));
assertEquals(colorMap[8], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.75f));
assertEquals(colorMap[9], Gradient.interpolateColor(Color.GREEN, Color.RED, 0.875f));
colorMap = g.generateColorMap(0.5);
assertEquals(colorMap[0], Color.argb(0, 0, 255, 0));
assertEquals(colorMap[1], Color.argb(63, 0, 255, 0));
assertEquals(colorMap[2], Color.argb(127, 0, 255, 0));
}
public void testMoreColorsThanColorMap() {
int[] colors = {
Color.argb(0, 0, 255, 0),
Color.GREEN,
Color.RED,
Color.BLUE
};
float[] startPoints = {
0f, 0.2f, 0.5f, 1f
};
Gradient g = new Gradient(colors, startPoints, 2);
int[] colorMap = g.generateColorMap(1.0);
assertEquals(colorMap[0], Color.GREEN);
assertEquals(colorMap[1], Color.RED);
}
}