[mathicgb] 268/393: Added test for reading and writing monoids.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:17 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository mathicgb.

commit c89c9e796ccb48ba30512fff6b27bf0415809edf
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date:   Wed Apr 17 12:32:38 2013 -0400

    Added test for reading and writing monoids.
---
 src/mathicgb/MonoMonoid.hpp | 23 ++++++++++++++++++++---
 src/test/MonoMonoid.cpp     | 23 +++++++++++++++++++++++
 2 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/src/mathicgb/MonoMonoid.hpp b/src/mathicgb/MonoMonoid.hpp
index e2d76b2..c71e190 100755
--- a/src/mathicgb/MonoMonoid.hpp
+++ b/src/mathicgb/MonoMonoid.hpp
@@ -805,6 +805,7 @@ public:
     }
     setOrderData(out);
     setHash(out);
+    MATHICGB_ASSERT(debugValid(out));
   }
 
   /// Returns the number of variables that divide mono.
@@ -1399,6 +1400,20 @@ private:
   }
 
   // *** Implementation of monomial ordering
+  size_t gradingsIndex(VarIndex grading, VarIndex var) const {
+    MATHICGB_ASSERT(grading < gradingCount());
+    MATHICGB_ASSERT(var < varCount());
+    const auto index = grading * static_cast<size_t>(varCount()) + var;
+    MATHICGB_ASSERT(index < mGradings.size());
+    return index;
+  }
+
+  size_t gradingsOppositeRowIndex(VarIndex grading, VarIndex var) const {
+    MATHICGB_ASSERT(grading < gradingCount());
+    MATHICGB_ASSERT(var < varCount());
+    return gradingsIndex(gradingCount() - 1 - grading, var);
+  }
+
   bool debugOrderValid(ConstMonoRef mono) const {
 #ifdef MATHICGB_DEBUG
     if (!StoreOrder)
@@ -1624,6 +1639,9 @@ auto MonoMonoid<E, HC, SH, SO>::readMonoid(std::istream& in) -> MonoMonoid {
 
 template<class E, bool HC, bool SH, bool SO>
 void MonoMonoid<E, HC, SH, SO>::printMonoid(std::ostream& out) const {
+  using MonoMonoidHelper::unchar;
+  typedef typename unchar<Exponent>::type UncharredExponent;
+
   out << varCount() << ' ' << gradingCount() << '\n';
   if (mGradingIsTotalDegree) {
     MATHICGB_ASSERT(mGradings.empty());
@@ -1633,10 +1651,9 @@ void MonoMonoid<E, HC, SH, SO>::printMonoid(std::ostream& out) const {
   } else {
     MATHICGB_ASSERT(mGradings.size() == gradingCount() * varCount());
     for (VarIndex grading = 0; grading < gradingCount(); ++grading) {
-      const auto offset = static_cast<size_t>(grading) * varCount();
       for (VarIndex var = 0; var < varCount(); ++var) {
-        MATHICGB_ASSERT(offset + var < mGradings.size());
-        out << ' ' << mGradings[offset + var];
+        const auto w = mGradings[gradingsOppositeRowIndex(grading, var)];
+        out << ' ' << static_cast<UncharredExponent>(-w);
       }
       out << '\n';
     }
diff --git a/src/test/MonoMonoid.cpp b/src/test/MonoMonoid.cpp
index 2b6fa69..9704289 100755
--- a/src/test/MonoMonoid.cpp
+++ b/src/test/MonoMonoid.cpp
@@ -191,6 +191,29 @@ TYPED_TEST(Monoid, MonoVector) {
   ASSERT_TRUE(v.empty());
 }
 
+TYPED_TEST(Monoid, ReadWriteMonoid) {
+  typedef TypeParam Monoid;
+  typedef typename Monoid::VarIndex VarIndex;
+
+  const auto check =
+    [](const char* str, VarIndex varCount, VarIndex gradingCount) -> void
+  {
+    std::istringstream in(str);
+    const auto m = Monoid::readMonoid(in);
+    ASSERT_EQ(varCount, m.varCount());
+    ASSERT_EQ(gradingCount, m.gradingCount());
+
+    std::ostringstream out;
+    m.printMonoid(out);
+    ASSERT_EQ(str, out.str());
+  };
+  check("0 0\n", 0, 0);
+  check("1 1\n 2\n", 1, 1);
+  check("1 2\n 3\n 4\n", 1, 2);
+  check("2 2\n 3 4\n 5 6\n", 2, 2);
+  check("4 1\n 1 1 1 1\n", 4, 1);
+}
+
 TYPED_TEST(Monoid, MonoPool) {
   typedef TypeParam Monoid;
   typedef typename Monoid::VarIndex VarIndex;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathicgb.git



More information about the debian-science-commits mailing list