Mercurial > hg > match-vamp
comparison src/Finder.cpp @ 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 |
comparison
equal
deleted
inserted
replaced
83:10e76188c846 | 84:de7034e93dd0 |
---|---|
220 dir = Matcher::AdvanceOther; | 220 dir = Matcher::AdvanceOther; |
221 } | 221 } |
222 } | 222 } |
223 | 223 |
224 if (dir != Matcher::AdvanceNone) { | 224 if (dir != Matcher::AdvanceNone) { |
225 if (m_m->getPathCost(r, c) != updateTo) { | 225 if (m_m->getAdvance(r, c) != dir) { |
226 cerr << "CostError found" << endl; | 226 cerr << "WrongAdvance found" << endl; |
227 err.type = ErrorPosition::CostError; | 227 err.type = ErrorPosition::WrongAdvance; |
228 err.r = r; | 228 err.r = r; |
229 err.c = c; | 229 err.c = c; |
230 err.advance = dir; | |
231 err.costWas = m_m->getPathCost(r, c); | 230 err.costWas = m_m->getPathCost(r, c); |
232 err.costShouldBe = updateTo; | 231 err.costShouldBe = updateTo; |
232 err.advanceWas = m_m->getAdvance(r, c); | |
233 err.advanceShouldBe = dir; | |
234 return err; | |
235 } | |
236 if (m_m->getPathCost(r, c) != updateTo) { | |
237 cerr << "WrongCost found" << endl; | |
238 err.type = ErrorPosition::WrongCost; | |
239 err.r = r; | |
240 err.c = c; | |
241 err.costWas = m_m->getPathCost(r, c); | |
242 err.costShouldBe = updateTo; | |
243 err.advanceWas = m_m->getAdvance(r, c); | |
244 err.advanceShouldBe = dir; | |
233 return err; | 245 return err; |
234 } | 246 } |
235 } else { | 247 } else { |
236 // AdvanceNone should occur only at r = r1, c = c1 | 248 // AdvanceNone should occur only at r = r1, c = c1 |
237 if (r != r1 || c != c1) { | 249 if (r != r1 || c != c1) { |
238 cerr << "AdvanceNone error found" << endl; | 250 cerr << "AdvanceNone error found" << endl; |
239 err.type = ErrorPosition::NoAdvance; | 251 err.type = ErrorPosition::NoAdvance; |
240 err.r = r; | 252 err.r = r; |
241 err.c = c; | 253 err.c = c; |
242 err.advance = dir; | |
243 err.costWas = m_m->getPathCost(r, c); | 254 err.costWas = m_m->getPathCost(r, c); |
244 err.costShouldBe = updateTo; | 255 err.costShouldBe = updateTo; |
256 err.advanceWas = m_m->getAdvance(r, c); | |
257 err.advanceShouldBe = dir; | |
245 return err; | 258 return err; |
246 } | 259 } |
247 } | 260 } |
248 } | 261 } |
249 | 262 |
265 #ifdef PERFORM_ERROR_CHECKS | 278 #ifdef PERFORM_ERROR_CHECKS |
266 ErrorPosition err = checkPathCostMatrix(); | 279 ErrorPosition err = checkPathCostMatrix(); |
267 if (err.type != ErrorPosition::NoError) { | 280 if (err.type != ErrorPosition::NoError) { |
268 cerr << "\nWARNING: Checking path-cost matrix returned mismatch:" << endl; | 281 cerr << "\nWARNING: Checking path-cost matrix returned mismatch:" << endl; |
269 cerr << "Type: " << err.type << endl; | 282 cerr << "Type: " << err.type << endl; |
270 cerr << "At row " << err.r << ", column " << err.c << " advancing " | 283 cerr << "At row " << err.r << ", column " << err.c |
271 << Matcher::advanceToString(err.advance) | 284 << "\nShould be advancing " |
285 << Matcher::advanceToString(err.advanceShouldBe) | |
286 << ", advance in matrix is " | |
287 << Matcher::advanceToString(err.advanceWas) | |
272 << "\nPrev cost " << err.prevCost | 288 << "\nPrev cost " << err.prevCost |
273 << " plus distance " << err.distance << " gives " | 289 << " plus distance " << err.distance << " gives " |
274 << err.costShouldBe << ", but matrix contains " << err.costWas | 290 << err.costShouldBe << ", matrix contains " << err.costWas |
275 << endl; | 291 << endl; |
276 cerr << "Note: diagonal weight = " << m_m->getDiagonalWeight() << endl; | 292 cerr << "Note: diagonal weight = " << m_m->getDiagonalWeight() << endl; |
277 cerr << endl; | 293 cerr << endl; |
278 } | 294 } |
279 #endif | 295 #endif |