# HG changeset patch # User Chris Cannam # Date 1417085580 0 # Node ID de7034e93dd0bc6717de7013631279211eda8941 # Parent 10e76188c846274324d274872de10518f484f31c More error checking (check advance as well as cost) diff -r 10e76188c846 -r de7034e93dd0 src/Finder.cpp --- 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; diff -r 10e76188c846 -r de7034e93dd0 src/Finder.h --- 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 diff -r 10e76188c846 -r de7034e93dd0 src/Matcher.cpp --- 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()) {