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