[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