[mlpack-git] master: Test sparse iterators, when we can. (10d40be)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Thu Mar 5 21:56:49 EST 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/904762495c039e345beba14c1142fd719b3bd50e...f94823c800ad6f7266995c700b1b630d5ffdcf40

>---------------------------------------------------------------

commit 10d40be120263465f0e8d3bde4251fc2322fed04
Author: Ryan Curtin <ryan at ratml.org>
Date:   Tue Aug 5 15:34:20 2014 +0000

    Test sparse iterators, when we can.


>---------------------------------------------------------------

10d40be120263465f0e8d3bde4251fc2322fed04
 src/mlpack/tests/arma_extend_test.cpp | 97 +++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)

diff --git a/src/mlpack/tests/arma_extend_test.cpp b/src/mlpack/tests/arma_extend_test.cpp
index f523d4e..b3c6c69 100644
--- a/src/mlpack/tests/arma_extend_test.cpp
+++ b/src/mlpack/tests/arma_extend_test.cpp
@@ -145,4 +145,101 @@ BOOST_AUTO_TEST_CASE(RowColIteratorTest)
   it = X.begin_row(0);
 }
 
+// These tests don't work when the sparse iterators hold references and not
+// pointers internally because of the lack of default constructor.
+#if ARMA_VERSION_MAJOR > 4 || \
+    (ARMA_VERSION_MAJOR == 4 && ARMA_VERSION_MINOR > 320)
+
+/**
+ * Test sparse const_row_col_iterator for basic functionality.
+ */
+BOOST_AUTO_TEST_CASE(ConstSpRowColIteratorTest)
+{
+  sp_mat X(5, 5);
+  for (size_t i = 0; i < 5; ++i)
+    X.col(i) += i;
+
+  for (size_t i = 0; i < 5; ++i)
+    X.row(i) += 3 * i;
+
+  // Make sure default constructor works okay.
+  sp_mat::const_row_col_iterator it;
+  // Make sure ++ operator, operator* and comparison operators work fine.
+  size_t count = 1;
+  for (it = X.begin_row_col(); it != X.end_row_col(); it++)
+  {
+    // Check iterator value.
+    BOOST_REQUIRE_EQUAL(*it, (count % 5) * 3 + (count / 5));
+
+    // Check iterator position.
+    BOOST_REQUIRE_EQUAL(it.row(), count % 5);
+    BOOST_REQUIRE_EQUAL(it.col(), count / 5);
+
+    count++;
+  }
+  BOOST_REQUIRE_EQUAL(count, 25);
+  it = X.end_row_col();
+  do
+  {
+    it--;
+    count--;
+
+    // Check iterator value.
+    BOOST_REQUIRE_EQUAL(*it, (count % 5) * 3 + (count / 5));
+
+    // Check iterator position.
+    BOOST_REQUIRE_EQUAL(it.row(), count % 5);
+    BOOST_REQUIRE_EQUAL(it.col(), count / 5);
+  } while (it != X.begin_row_col());
+
+  BOOST_REQUIRE_EQUAL(count, 1);
+}
+
+/**
+ * Test sparse row_col_iterator for basic functionality.
+ */
+BOOST_AUTO_TEST_CASE(SpRowColIteratorTest)
+{
+  sp_mat X(5, 5);
+  for (size_t i = 0; i < 5; ++i)
+    X.col(i) += i;
+
+  for (size_t i = 0; i < 5; ++i)
+    X.row(i) += 3 * i;
+
+  // Make sure default constructor works okay.
+  sp_mat::row_col_iterator it;
+  // Make sure ++ operator, operator* and comparison operators work fine.
+  size_t count = 1;
+  for (it = X.begin_row_col(); it != X.end_row_col(); it++)
+  {
+    // Check iterator value.
+    BOOST_REQUIRE_EQUAL(*it, (count % 5) * 3 + (count / 5));
+
+    // Check iterator position.
+    BOOST_REQUIRE_EQUAL(it.row(), count % 5);
+    BOOST_REQUIRE_EQUAL(it.col(), count / 5);
+
+    count++;
+  }
+  BOOST_REQUIRE_EQUAL(count, 25);
+  it = X.end_row_col();
+  do
+  {
+    it--;
+    count--;
+
+    // Check iterator value.
+    BOOST_REQUIRE_EQUAL(*it, (count % 5) * 3 + (count / 5));
+
+    // Check iterator position.
+    BOOST_REQUIRE_EQUAL(it.row(), count % 5);
+    BOOST_REQUIRE_EQUAL(it.col(), count / 5);
+  } while (it != X.begin_row_col());
+
+  BOOST_REQUIRE_EQUAL(count, 1);
+}
+
+#endif
+
 BOOST_AUTO_TEST_SUITE_END();



More information about the mlpack-git mailing list