### Question:
TaskSeriesCollection extends AbstractSeriesDataset implements GanttCategoryDataset, Cloneable, PublicCloneable,
                   Serializable { @Override public Number getPercentComplete(int row, int column) { Comparable rowKey = getRowKey(row); Comparable columnKey = getColumnKey(column); return getPercentComplete(rowKey, columnKey); } TaskSeriesCollection(); TaskSeries getSeries(Comparable key); TaskSeries getSeries(int series); @Override int getSeriesCount(); @Override Comparable getSeriesKey(int series); @Override int getRowCount(); @Override List getRowKeys(); @Override int getColumnCount(); @Override List<Comparable> getColumnKeys(); @Override Comparable getColumnKey(int index); @Override int getColumnIndex(Comparable columnKey); @Override int getRowIndex(Comparable rowKey); @Override Comparable getRowKey(int index); void add(TaskSeries series); void remove(TaskSeries series); void remove(int series); void removeAll(); @Override Number getValue(Comparable rowKey, Comparable columnKey); @Override Number getValue(int row, int column); @Override Number getStartValue(Comparable rowKey, Comparable columnKey); @Override Number getStartValue(int row, int column); @Override Number getEndValue(Comparable rowKey, Comparable columnKey); @Override Number getEndValue(int row, int column); @Override Number getPercentComplete(int row, int column); @Override Number getPercentComplete(Comparable rowKey, Comparable columnKey); @Override int getSubIntervalCount(int row, int column); @Override int getSubIntervalCount(Comparable rowKey, Comparable columnKey); @Override Number getStartValue(int row, int column, int subinterval); @Override Number getStartValue(Comparable rowKey, Comparable columnKey,
                                int subinterval); @Override Number getEndValue(int row, int column, int subinterval); @Override Number getEndValue(Comparable rowKey, Comparable columnKey,
                              int subinterval); @Override Number getPercentComplete(int row, int column, int subinterval); @Override Number getPercentComplete(Comparable rowKey, Comparable columnKey,
                                     int subinterval); @Override void seriesChanged(SeriesChangeEvent event); @Override boolean equals(Object obj); @Override Object clone();  }### Answer:
@Test public void testGetPercentComplete() { TaskSeriesCollection c = createCollection2(); assertEquals(0.10, c.getPercentComplete("S1", "Task 1")); assertEquals(0.20, c.getPercentComplete("S1", "Task 2")); assertEquals(0.30, c.getPercentComplete("S2", "Task 3")); assertEquals(0.10, c.getPercentComplete(0, 0)); assertEquals(0.20, c.getPercentComplete(0, 1)); assertEquals(null, c.getPercentComplete(0, 2)); assertEquals(null, c.getPercentComplete(1, 0)); assertEquals(null, c.getPercentComplete(1, 1)); assertEquals(0.30, c.getPercentComplete(1, 2)); TaskSeriesCollection c3 = createCollection3(); assertEquals(0.1, c3.getPercentComplete(0, 0)); assertEquals(0.2, c3.getPercentComplete(0, 1)); assertNull(c3.getPercentComplete(1, 0)); assertEquals(0.3, c3.getPercentComplete(1, 1)); assertEquals(0.111, c3.getPercentComplete(0, 0, 0)); assertEquals(0.222, c3.getPercentComplete(0, 1, 0)); assertEquals(0.333, c3.getPercentComplete(0, 1, 1)); assertEquals(0.444, c3.getPercentComplete(1, 1, 0)); assertEquals(0.555, c3.getPercentComplete(1, 1, 1)); assertEquals(0.666, c3.getPercentComplete(1, 1, 2)); }