/**
   * Return dataset of collector function values from all runs. i.e: all calls to {@link
   * #getValues(int)}. First column is provided by {@link #getValueNames()}, and then each following
   * column is a particular run, eg: Run 1, Run 2, Run 3 ...etc.
   *
   * @return dataset of collector function values from all runs
   * @throws CDataGridException if problem creating dataset
   */
  @Override
  public CDataCacheContainer getMultiRunDataset() throws CDataGridException {
    int numberRuns = valuesFromAllRuns.size();
    double[][] array = ArrayUtil.transpose(valuesFromAllRuns.toArray(new double[numberRuns][]));

    IndexedDenseDoubleMatrix2D allRuns =
        new IndexedDenseDoubleMatrix2D(
            new String[] {columnHeading}, getValueNames(), runNumbers(numberRuns), array);

    CBuilder builder = new CBuildFromMatrix(name + " (All runs)", allRuns);

    return new CDataCacheContainer(builder);
  }
  @Test
  public void testMissingColumnHeaderBOTH() {
    try {
      AbstractTableReader xlsMissingHeader =
          new ExcelFileReader(new File(TEST_DIR + "xls_missing_column_header.xls"));
      fail("IOException not generated");
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }

    try {
      AbstractTableReader csvMissingHeader =
          new DelimitedFileReader(new File(TEST_DIR + "xls_missing_column_header.csv"));
      fail(
          "IOException not generated. Header ["
              + ArrayUtil.toString(csvMissingHeader.getHeaderRow())
              + "]");
    } catch (IOException e) {
      System.out.println(e.getMessage());
    }
  }