Validating DataSet Operations in MPAndroidChart
This test suite validates the core functionality of DataSet handling in MPAndroidChart, focusing on data point management and value retrieval operations. It ensures reliable chart data manipulation through comprehensive unit testing of the ScatterDataSet implementation.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
philjay/mpandroidchart
MPChartLib/src/test/java/com/github/mikephil/charting/test/DataSetTest.java
package com.github.mikephil.charting.test;
import com.github.mikephil.charting.data.DataSet;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.ScatterDataSet;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
/**
* Created by philipp on 31/05/16.
*/
public class DataSetTest {
@Test
public void testCalcMinMax() {
List<Entry> entries = new ArrayList<Entry>();
entries.add(new Entry(10, 10));
entries.add(new Entry(15, 2));
entries.add(new Entry(21, 5));
ScatterDataSet set = new ScatterDataSet(entries, "");
assertEquals(10f, set.getXMin(), 0.01f);
assertEquals(21f, set.getXMax(), 0.01f);
assertEquals(2f, set.getYMin(), 0.01f);
assertEquals(10f, set.getYMax(), 0.01f);
assertEquals(3, set.getEntryCount());
set.addEntry(new Entry(25, 1));
assertEquals(10f, set.getXMin(), 0.01f);
assertEquals(25f, set.getXMax(), 0.01f);
assertEquals(1f, set.getYMin(), 0.01f);
assertEquals(10f, set.getYMax(), 0.01f);
assertEquals(4, set.getEntryCount());
set.removeEntry(3);
assertEquals(10f, set.getXMin(), 0.01f);
assertEquals(21, set.getXMax(), 0.01f);
assertEquals(2f, set.getYMin(), 0.01f);
assertEquals(10f, set.getYMax(), 0.01f);
}
@Test
public void testAddRemoveEntry() {
List<Entry> entries = new ArrayList<Entry>();
entries.add(new Entry(10, 10));
entries.add(new Entry(15, 2));
entries.add(new Entry(21, 5));
ScatterDataSet set = new ScatterDataSet(entries, "");
assertEquals(3, set.getEntryCount());
set.addEntryOrdered(new Entry(5, 1));
assertEquals(4, set.getEntryCount());
assertEquals(5, set.getXMin(), 0.01f);
assertEquals(21, set.getXMax(), 0.01f);
assertEquals(1f, set.getYMin(), 0.01f);
assertEquals(10f, set.getYMax(), 0.01f);
assertEquals(5, set.getEntryForIndex(0).getX(), 0.01f);
assertEquals(1, set.getEntryForIndex(0).getY(), 0.01f);
set.addEntryOrdered(new Entry(20, 50));
assertEquals(5, set.getEntryCount());
assertEquals(20, set.getEntryForIndex(3).getX(), 0.01f);
assertEquals(50, set.getEntryForIndex(3).getY(), 0.01f);
assertTrue(set.removeEntry(3));
assertEquals(4, set.getEntryCount());
assertEquals(21, set.getEntryForIndex(3).getX(), 0.01f);
assertEquals(5, set.getEntryForIndex(3).getY(), 0.01f);
assertEquals(5, set.getEntryForIndex(0).getX(), 0.01f);
assertEquals(1, set.getEntryForIndex(0).getY(), 0.01f);
assertTrue(set.removeFirst());
assertEquals(3, set.getEntryCount());
assertEquals(10, set.getEntryForIndex(0).getX(), 0.01f);
assertEquals(10, set.getEntryForIndex(0).getY(), 0.01f);
set.addEntryOrdered(new Entry(15, 3));
assertEquals(4, set.getEntryCount());
assertEquals(15, set.getEntryForIndex(1).getX(), 0.01f);
assertEquals(3, set.getEntryForIndex(1).getY(), 0.01f);
assertEquals(21, set.getEntryForIndex(3).getX(), 0.01f);
assertEquals(5, set.getEntryForIndex(3).getY(), 0.01f);
assertTrue(set.removeLast());
assertEquals(3, set.getEntryCount());
assertEquals(15, set.getEntryForIndex(2).getX(), 0.01f);
assertEquals(2, set.getEntryForIndex(2).getY(), 0.01f);
assertTrue(set.removeLast());
assertEquals(2, set.getEntryCount());
assertTrue(set.removeLast());
assertEquals(1, set.getEntryCount());
assertEquals(10, set.getEntryForIndex(0).getX(), 0.01f);
assertEquals(10, set.getEntryForIndex(0).getY(), 0.01f);
assertTrue(set.removeLast());
assertEquals(0, set.getEntryCount());
assertFalse(set.removeLast());
assertFalse(set.removeFirst());
}
@Test
public void testGetEntryForXValue() {
List<Entry> entries = new ArrayList<Entry>();
entries.add(new Entry(10, 10));
entries.add(new Entry(15, 5));
entries.add(new Entry(21, 5));
ScatterDataSet set = new ScatterDataSet(entries, "");
Entry closest = set.getEntryForXValue(17, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(15, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
closest = set.getEntryForXValue(17, Float.NaN, DataSet.Rounding.DOWN);
assertEquals(15, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
closest = set.getEntryForXValue(15, Float.NaN, DataSet.Rounding.DOWN);
assertEquals(15, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
closest = set.getEntryForXValue(14, Float.NaN, DataSet.Rounding.DOWN);
assertEquals(10, closest.getX(), 0.01f);
assertEquals(10, closest.getY(), 0.01f);
closest = set.getEntryForXValue(17, Float.NaN, DataSet.Rounding.UP);
assertEquals(21, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
closest = set.getEntryForXValue(21, Float.NaN, DataSet.Rounding.UP);
assertEquals(21, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
closest = set.getEntryForXValue(21, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(21, closest.getX(), 0.01f);
assertEquals(5, closest.getY(), 0.01f);
}
@Test
public void testGetEntryForXValueWithDuplicates() {
// sorted list of values (by x position)
List<Entry> values = new ArrayList<Entry>();
values.add(new Entry(0, 10));
values.add(new Entry(1, 20));
values.add(new Entry(2, 30));
values.add(new Entry(3, 40));
values.add(new Entry(3, 50)); // duplicate
values.add(new Entry(4, 60));
values.add(new Entry(4, 70)); // duplicate
values.add(new Entry(5, 80));
values.add(new Entry(6, 90));
values.add(new Entry(7, 100));
values.add(new Entry(8, 110));
values.add(new Entry(8, 120)); // duplicate
ScatterDataSet set = new ScatterDataSet(values, "");
Entry closest = set.getEntryForXValue(0, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(0, closest.getX(), 0.01f);
assertEquals(10, closest.getY(), 0.01f);
closest = set.getEntryForXValue(5, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(5, closest.getX(), 0.01f);
assertEquals(80, closest.getY(), 0.01f);
closest = set.getEntryForXValue(5.4f, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(5, closest.getX(), 0.01f);
assertEquals(80, closest.getY(), 0.01f);
closest = set.getEntryForXValue(4.6f, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(5, closest.getX(), 0.01f);
assertEquals(80, closest.getY(), 0.01f);
closest = set.getEntryForXValue(7, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(7, closest.getX(), 0.01f);
assertEquals(100, closest.getY(), 0.01f);
closest = set.getEntryForXValue(4f, Float.NaN, DataSet.Rounding.CLOSEST);
assertEquals(4, closest.getX(), 0.01f);
assertEquals(60, closest.getY(), 0.01f);
List<Entry> entries = set.getEntriesForXValue(4f);
assertEquals(2, entries.size());
assertEquals(60, entries.get(0).getY(), 0.01f);
assertEquals(70, entries.get(1).getY(), 0.01f);
entries = set.getEntriesForXValue(3.5f);
assertEquals(0, entries.size());
entries = set.getEntriesForXValue(2f);
assertEquals(1, entries.size());
assertEquals(30, entries.get(0).getY(), 0.01f);
}
}