changeset 84:de7034e93dd0 refactors

More error checking (check advance as well as cost)
author Chris Cannam
date Thu, 27 Nov 2014 10:53:00 +0000
parents 10e76188c846
children a540b26db228
files src/Finder.cpp src/Finder.h src/Matcher.cpp
diffstat 3 files changed, 43 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/Finder.cpp	Thu Nov 27 10:49:11 2014 +0000
+++ b/src/Finder.cpp	Thu Nov 27 10:53:00 2014 +0000
@@ -222,14 +222,26 @@
             }
 
             if (dir != Matcher::AdvanceNone) {
-                if (m_m->getPathCost(r, c) != updateTo) {
-                    cerr << "CostError found" << endl;
-                    err.type = ErrorPosition::CostError;
+                if (m_m->getAdvance(r, c) != dir) {
+                    cerr << "WrongAdvance found" << endl;
+                    err.type = ErrorPosition::WrongAdvance;
                     err.r = r;
                     err.c = c;
-                    err.advance = dir;
                     err.costWas = m_m->getPathCost(r, c);
                     err.costShouldBe = updateTo;
+                    err.advanceWas = m_m->getAdvance(r, c);
+                    err.advanceShouldBe = dir;
+                    return err;
+                }
+                if (m_m->getPathCost(r, c) != updateTo) {
+                    cerr << "WrongCost found" << endl;
+                    err.type = ErrorPosition::WrongCost;
+                    err.r = r;
+                    err.c = c;
+                    err.costWas = m_m->getPathCost(r, c);
+                    err.costShouldBe = updateTo;
+                    err.advanceWas = m_m->getAdvance(r, c);
+                    err.advanceShouldBe = dir;
                     return err;
                 }
             } else {
@@ -239,9 +251,10 @@
                     err.type = ErrorPosition::NoAdvance;
                     err.r = r;
                     err.c = c;
-                    err.advance = dir;
                     err.costWas = m_m->getPathCost(r, c);
                     err.costShouldBe = updateTo;
+                    err.advanceWas = m_m->getAdvance(r, c);
+                    err.advanceShouldBe = dir;
                     return err;
                 }
             }
@@ -267,11 +280,14 @@
     if (err.type != ErrorPosition::NoError) {
         cerr << "\nWARNING: Checking path-cost matrix returned mismatch:" << endl;
         cerr << "Type: " << err.type << endl;
-        cerr << "At row " << err.r << ", column " << err.c << " advancing "
-             << Matcher::advanceToString(err.advance)
+        cerr << "At row " << err.r << ", column " << err.c
+             << "\nShould be advancing "
+             << Matcher::advanceToString(err.advanceShouldBe)
+             << ", advance in matrix is "
+             << Matcher::advanceToString(err.advanceWas)
              << "\nPrev cost " << err.prevCost
              << " plus distance " << err.distance << " gives "
-             << err.costShouldBe << ", but matrix contains " << err.costWas
+             << err.costShouldBe << ", matrix contains " << err.costWas
              << endl;
         cerr << "Note: diagonal weight = " << m_m->getDiagonalWeight() << endl;
         cerr << endl;
--- a/src/Finder.h	Thu Nov 27 10:49:11 2014 +0000
+++ b/src/Finder.h	Thu Nov 27 10:53:00 2014 +0000
@@ -68,16 +68,17 @@
 protected:
 #ifdef PERFORM_ERROR_CHECKS
     struct ErrorPosition {
-        enum Type { NoError = 0, CostError, NoAdvance };
+        enum Type { NoError = 0, WrongCost, WrongAdvance, NoAdvance };
         ErrorPosition() : type(NoError) { }
         Type type;
         int r;
         int c;
         double prevCost;
         float distance;
-        Matcher::Advance advance;
         double costWas;
         double costShouldBe;
+        Matcher::Advance advanceWas;
+        Matcher::Advance advanceShouldBe;
     };
     ErrorPosition checkPathCostMatrix();
 #endif
--- a/src/Matcher.cpp	Thu Nov 27 10:49:11 2014 +0000
+++ b/src/Matcher.cpp	Thu Nov 27 10:53:00 2014 +0000
@@ -347,11 +347,27 @@
     if (m_firstPM) {
 
         m_distance[i][j - m_first[i]] = dMN;
+
+        if (i == 3 && j == 56) {
+            cerr << "i = "<< i << ", j = " << j << ", dir = "
+                 << advanceToString(dir)
+                 << ", dMN = " << dMN << ", diagonalWeight = "
+                 << m_params.diagonalWeight << ", weighted = "
+                 << weighted << ", result = " << value + weighted << endl;
+        }
         
         setPathCost(i, j, dir, value + weighted);
 
     } else {
 
+        if (i == 56 && j == 3) {
+            cerr << "i = "<< i << ", j = " << j << ", dir = "
+                 << advanceToString(dir)
+                 << ", dMN = " << dMN << ", diagonalWeight = "
+                 << m_params.diagonalWeight << ", weighted = "
+                 << weighted << ", result = " << value + weighted << endl;
+        }
+
         int idx = i - m_otherMatcher->m_first[j];
         
         if (idx == (int)m_otherMatcher->m_distance[j].size()) {