/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.graphene; import org.diirt.util.stats.Range; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashMap; import org.junit.AfterClass; import org.junit.Test; import java.util.List; import org.junit.BeforeClass; import org.diirt.util.stats.Ranges; import org.junit.Ignore; /** * * @author sjdallst */ public class MultiYAxisGraph2DRendererTest extends BaseGraphTest<MultiAxisLineGraph2DRendererUpdate, MultiAxisLineGraph2DRenderer> { /** * Tests the functions in MultiAxisLineGraph2DRenderer */ public MultiYAxisGraph2DRendererTest() { super("multiYAxisGraph2D"); } private List<Point2DDataset> cosine2Dataset(){ double [][] initialData= new double [2][100]; for(int i = 0; i < 2; i++){ for(int j = 0; j < 100; j++){ initialData[i][j] = (double)(i)*Math.cos((double)j/100 * 6 * Math.PI); } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for(int i = 0; i < 2; i++){ data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> cosine3Dataset(){ double [][] initialData= new double [3][100]; for(int i = 0; i < 3; i++){ for(int j = 0; j < 100; j++){ initialData[i][j] = (double)i*Math.cos((double)j/100 * 6 * Math.PI); } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for(int i = 0; i < 3; i++){ data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear1Dataset() { double[][] initialData = new double[1][100]; for (int i = 0; i < 1; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = i; } } List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 1; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear2Dataset(){ double[][] initialData = new double[2][100]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = i; } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 2; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear3Dataset(){ double[][] initialData = new double[3][100]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = i; } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 3; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear4Dataset(){ double [][] initialData= new double [4][100]; for(int i = 0; i < 4; i++){ for(int j = 0; j < 100; j++){ initialData[i][j] = i; } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for(int i = 0; i < 4; i++){ data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear5Dataset(){ double[][] initialData = new double[5][100]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = i; } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 5; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear6Dataset(){ double[][] initialData = new double[6][100]; for (int i = 0; i < 6; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = i; } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 6; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> linear10Dataset(){ double [][] initialData= new double [10][100]; for(int i = 0; i < 10; i++){ for(int j = 0; j < 100; j++){ initialData[i][j] = i; } } List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for(int i = 0; i < 10; i++){ data.add(Point2DDatasets.lineData(initialData[i])); } return data; } private List<Point2DDataset> rangeDataset() { double[][] initialData = new double[6][100]; for (int i = 0; i < 6; i++) { for (int j = 0; j < 100; j++) { initialData[i][j] = Math.pow((double) j, ((double) i) / 5); } } //Creates a sparkline graph List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for (int i = 0; i < 6; i++) { data.add(Point2DDatasets.lineData(initialData[i])); } return data; } @Override public MultiAxisLineGraph2DRenderer createRenderer() { return new MultiAxisLineGraph2DRenderer(300, 200); } @Override public BufferedImage draw(MultiAxisLineGraph2DRenderer renderer) { List<Point2DDataset> data = linear1Dataset(); BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); renderer.draw(g, data); return image; } private static Point2DDataset largeDataset; /** * Sets up the large dataset used in the tests */ @BeforeClass public static void setUpClass() { double[] waveform = Point2DTestDatasets.randomDataset(); largeDataset = org.diirt.graphene.Point2DDatasets.lineData(waveform); } /** * Empties the memory used in the large dataset */ @AfterClass public static void tearDownClass() { largeDataset = null; } @Test public void oneGraph() throws Exception { List<Point2DDataset> data = linear1Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.oneGraph", image); } @Test public void twoGraph() throws Exception { List<Point2DDataset> data = linear2Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.twoGraph", image); } @Test public void threeGraph() throws Exception { List<Point2DDataset> data = linear3Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.threeGraph", image); } @Test public void fiveGraph() throws Exception { List<Point2DDataset> data = linear5Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.fiveGraph", image); } @Test public void sixGraph() throws Exception { List<Point2DDataset> data = linear6Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.sixGraph", image); } @Test public void sixGraphWithRange() throws Exception { List<Point2DDataset> data = rangeDataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.sixGraphWithRange", image); } @Test public void minGraphWidth1() throws Exception { List<Point2DDataset> data = rangeDataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.update(renderer.newUpdate().minimumGraphWidth(600)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.minGraphWidth1", image); } @Test public void updateInterpolations() throws Exception { List<Point2DDataset> data = rangeDataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640, 480); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.LINEAR)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.updateInterpolations", image); } @Test public void evenDivide() throws Exception { List<Point2DDataset>data = linear2Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.evenDivide", image); } @Test public void oneGraphSplit() throws Exception { //Creates a sparkline graph List<Point2DDataset> data = linear1Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.oneGraph", image); } @Test(expected = IllegalArgumentException.class) public void noGraphs() throws Exception { List<Point2DDataset> data = new ArrayList<Point2DDataset>(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.draw(g, data); } @Test public void multipleCosine() throws Exception { List<Point2DDataset> data = cosine3Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.multipleCosine", image); } @Test public void unevenDivide() throws Exception { List<Point2DDataset> data = linear3Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.unevenDivide", image); } @Test public void excessGraphs() throws Exception { List<Point2DDataset>data = linear5Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.excessGraphs", image); } @Test public void excessGraphsUpdate() throws Exception { List<Point2DDataset>data = linear5Dataset(); BufferedImage image = new BufferedImage(640, 550, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().imageHeight(550)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.excessGraphsUpdate", image); } @Test public void excessGraphsAfterUpdate() throws Exception { List<Point2DDataset>data = linear5Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,550); renderer.update(renderer.newUpdate().imageHeight(550)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.excessGraphsAfterUpdate", image); } @Test public void updateMargins() throws Exception { List<Point2DDataset> data = cosine2Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().marginBetweenGraphs(50)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.updateMargins", image); } @Test public void updateRanges() throws Exception { List<Point2DDataset> data = linear4Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); HashMap<Integer, Range> map = new HashMap<Integer, Range>(); map.put(1, Ranges.range(-50,50)); renderer.update(renderer.newUpdate().setRanges(map)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.updateRanges", image); } @Test public void marginsTooBig() throws Exception { List<Point2DDataset> data = cosine3Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().marginBetweenGraphs(100)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.marginsTooBig", image); } @Test @Ignore public void resizing() throws Exception { List<Point2DDataset> data = new ArrayList<Point2DDataset>(); for(int i = 0; i < 3; i++){ data.add(Point2DTestDatasets.sineDataset(100, 50, 0, 1, 0, Ranges.range(0, 99))); } BufferedImage image = new BufferedImage(640, 400, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().separateAreas(true)); // Gradually reduce the image to simulate window being stretched renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(400)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(390)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(380)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(370)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(360)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(350)); renderer.draw(g, data); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.NEAREST_NEIGHBOR).imageHeight(340)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.resizing", image); } @Test public void updateMinimumGraphHeights() throws Exception { List<Point2DDataset> data = linear10Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().minimumGraphHeight(50)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.updateMinimumGraphHeights", image); } @Test public void updateInterpolationsSplit() throws Exception { List<Point2DDataset> data = cosine2Dataset(); BufferedImage image = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = (Graphics2D) image.getGraphics(); MultiAxisLineGraph2DRenderer renderer = new MultiAxisLineGraph2DRenderer(640,480); renderer.update(renderer.newUpdate().interpolation(InterpolationScheme.LINEAR)); renderer.update(renderer.newUpdate().separateAreas(true)); renderer.draw(g, data); //Compares to correct image ImageAssert.compareImages("multiYAxisGraph2D.split.updateInterpolations", image); } }