class DataFrameAsserts {

    public DataFrameAsserts expectRow(int pos, Object... expectedValues) {

        assertTrue(pos < df.height(), () -> "Row position " + pos + " is outside the DataFrame range of 0.." + (df.height() - 1));

        // handling nulls in "vararg" specifics... caller passing a "null" results in null array instead of a single
        // element array with null... need to fix that
        Object[] expectedNormal = expectedValues != null ? expectedValues : new Object[]{null};

        for (int i = 0; i < expectedColumns.length; i++) {

            String column = expectedColumns[i];
            Object expected = expectedNormal[i];
            Object actual = df.getColumn(i).get(pos);

            if (expected == null) {
                assertNull(actual, "Unexpected value in '" + column + "'");
            } else if (expected.getClass().isArray()) {
                assertTrue(actual.getClass().isArray(), "Was expecting array in '" + column + "'");
                expectArrayRow(column, expected, actual);
            } else {
                assertEquals(expected, actual, "Unexpected value in '" + column + "'");
            }
        }

        return this;
    }

    public  DataFrameAsserts(DataFrame df, Index expectedColumns);
    public  DataFrameAsserts(DataFrame df, List<String> expectedColumns);
    public  DataFrameAsserts(DataFrame df, String... expectedColumns);

}