From 1beb58dbb90bf2349c2ac495669103e61231b628 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Tue, 31 May 2016 14:27:39 -0400 Subject: [PATCH 1/2] A first simple test. --- src/mlpack/tests/load_save_test.cpp | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/mlpack/tests/load_save_test.cpp b/src/mlpack/tests/load_save_test.cpp index 7e2f6a152d1..fc753f81fd1 100644 --- a/src/mlpack/tests/load_save_test.cpp +++ b/src/mlpack/tests/load_save_test.cpp @@ -1093,6 +1093,46 @@ BOOST_AUTO_TEST_CASE(CategoricalNontransposedCSVLoadTest) remove("test.csv"); } +/** + * The test CSV Keon suggested in #658. + */ +BOOST_AUTO_TEST_CASE(KeonsSimpleDatasetInfoTest) +{ + fstream f; + f.open("test.csv", fstream::out); + f << "1, 1, 1" << endl; + f << ", 1, 1" << endl; + f << "1, 1, 1" << endl; + f << "1, 1, 1" << endl; + f.close(); + + // Load without transpose. + arma::mat dataset; + data::DatasetInfo info; + data::Load("test.csv", dataset, info, true, false); + + BOOST_REQUIRE_EQUAL(dataset.n_rows, 4); + BOOST_REQUIRE_EQUAL(dataset.n_cols, 3); + BOOST_REQUIRE_EQUAL(info.Dimensionality(), 4); + BOOST_REQUIRE_EQUAL(info.NumMappings(0), 0); + BOOST_REQUIRE_EQUAL(info.NumMappings(1), 2); + BOOST_REQUIRE_EQUAL(info.NumMappings(2), 0); + BOOST_REQUIRE_EQUAL(info.NumMappings(3), 0); + + // Load with transpose. + data::DatasetInfo newInfo; + data::Load("test.csv", dataset, info, true, true); + + BOOST_REQUIRE_EQUAL(dataset.n_rows, 3); + BOOST_REQUIRE_EQUAL(dataset.n_cols, 4); + BOOST_REQUIRE_EQUAL(info.Dimensionality(), 3); + BOOST_REQUIRE_EQUAL(info.NumMappings(0), 2); + BOOST_REQUIRE_EQUAL(info.NumMappings(1), 0); + BOOST_REQUIRE_EQUAL(info.NumMappings(2), 0); + + remove("test.csv"); +} + /** * A simple ARFF load test. Two attributes, both numeric. */ From b3fc4684a0c14c1482fb58f6aac9be749f0f11c9 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Tue, 31 May 2016 14:56:40 -0400 Subject: [PATCH 2/2] Adapt Keon's test into something harder. --- src/mlpack/tests/load_save_test.cpp | 50 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/mlpack/tests/load_save_test.cpp b/src/mlpack/tests/load_save_test.cpp index fc753f81fd1..ecb089c2def 100644 --- a/src/mlpack/tests/load_save_test.cpp +++ b/src/mlpack/tests/load_save_test.cpp @@ -1094,43 +1094,45 @@ BOOST_AUTO_TEST_CASE(CategoricalNontransposedCSVLoadTest) } /** - * The test CSV Keon suggested in #658. + * A harder test CSV based on the concerns in #658. */ -BOOST_AUTO_TEST_CASE(KeonsSimpleDatasetInfoTest) +BOOST_AUTO_TEST_CASE(HarderKeonTest) { fstream f; f.open("test.csv", fstream::out); - f << "1, 1, 1" << endl; - f << ", 1, 1" << endl; - f << "1, 1, 1" << endl; - f << "1, 1, 1" << endl; + f << "a,, 13,\t, 0" << endl; + f << "b, 3, 14, hello,1" << endl; + f << "b, 4, 15, , 2" << endl; + f << ", 5, 16, ," << endl; f.close(); - // Load without transpose. + // Load transposed. arma::mat dataset; data::DatasetInfo info; - data::Load("test.csv", dataset, info, true, false); - - BOOST_REQUIRE_EQUAL(dataset.n_rows, 4); - BOOST_REQUIRE_EQUAL(dataset.n_cols, 3); - BOOST_REQUIRE_EQUAL(info.Dimensionality(), 4); - BOOST_REQUIRE_EQUAL(info.NumMappings(0), 0); - BOOST_REQUIRE_EQUAL(info.NumMappings(1), 2); - BOOST_REQUIRE_EQUAL(info.NumMappings(2), 0); - BOOST_REQUIRE_EQUAL(info.NumMappings(3), 0); - - // Load with transpose. - data::DatasetInfo newInfo; data::Load("test.csv", dataset, info, true, true); - BOOST_REQUIRE_EQUAL(dataset.n_rows, 3); + BOOST_REQUIRE_EQUAL(dataset.n_rows, 5); BOOST_REQUIRE_EQUAL(dataset.n_cols, 4); - BOOST_REQUIRE_EQUAL(info.Dimensionality(), 3); - BOOST_REQUIRE_EQUAL(info.NumMappings(0), 2); - BOOST_REQUIRE_EQUAL(info.NumMappings(1), 0); + + BOOST_REQUIRE_EQUAL(info.Dimensionality(), 5); + BOOST_REQUIRE_EQUAL(info.NumMappings(0), 3); + BOOST_REQUIRE_EQUAL(info.NumMappings(1), 4); BOOST_REQUIRE_EQUAL(info.NumMappings(2), 0); + BOOST_REQUIRE_EQUAL(info.NumMappings(3), 2); // \t and "" are equivalent. + BOOST_REQUIRE_EQUAL(info.NumMappings(4), 4); - remove("test.csv"); + // Now load non-transposed. + data::DatasetInfo ntInfo; + data::Load("test.csv", dataset, ntInfo, true, false); + + BOOST_REQUIRE_EQUAL(dataset.n_rows, 4); + BOOST_REQUIRE_EQUAL(dataset.n_cols, 5); + + BOOST_REQUIRE_EQUAL(ntInfo.Dimensionality(), 4); + BOOST_REQUIRE_EQUAL(ntInfo.NumMappings(0), 4); + BOOST_REQUIRE_EQUAL(ntInfo.NumMappings(1), 5); + BOOST_REQUIRE_EQUAL(ntInfo.NumMappings(2), 5); + BOOST_REQUIRE_EQUAL(ntInfo.NumMappings(3), 3); } /**