159{
160 typedef typename SB::Integer
Integer;
161 typedef typename SB::Quotient Quotient;
162 typedef typename SB::Fraction Fraction;
164 typedef typename MyPattern::Vector2I Vector2I;
165 unsigned int nbok = 0;
166 unsigned int nb = 0;
167 Integer p = ( rand() % 10000 ) + 1;
168 Integer q = ( rand() % 10000 ) + 1;
169 MyPattern pattern( p*6, q*6 );
171
172
173 trace.
beginBlock (
"Testing block: Smallest covering subpatterns of ODD pattern." );
174 MyPattern pat_odd( 5, 12 );
175 trace.
info() <<
"ODD " << pat_odd <<
" " << pat_odd.rE() << endl;
176 MyPattern sp;
177 Quotient np;
178 Vector2I start;
179
180
181 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
182 0, 17 );
183 trace.
info() <<
"sub(0,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
184 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
185 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
186 1, 17 );
187 trace.
info() <<
"sub(1,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
188 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
189 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
190 7, 17 );
191 trace.
info() <<
"sub(7,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
192 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) ? 1 : 0;
193 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
194 8, 17 );
195 trace.
info() <<
"sub(8,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
196 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) ? 1 : 0;
197 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
198 13, 17 );
199 trace.
info() <<
"sub(13,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
200 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) ? 1 : 0;
201 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
202 14, 17 );
203 trace.
info() <<
"sub(14,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
204 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) ? 1 : 0;
205 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
206 15, 17 );
207 trace.
info() <<
"sub(15,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
208 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) ? 1 : 0;
209
210 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering left Subpatterns." << endl;
211
212
213 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
214 0, 16 );
215 trace.
info() <<
"sub(0,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
216 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
217 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
218 0, 15 );
219 trace.
info() <<
"sub(0,15) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
220 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
221 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
222 0, 14 );
223 trace.
info() <<
"sub(0,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
224 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
225 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
226 0, 8 );
227 trace.
info() <<
"sub(0,8) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
228 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
229 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
230 0, 7 );
231 trace.
info() <<
"sub(0,7) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
232 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
233 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
234 0, 1 );
235 trace.
info() <<
"sub(0,1) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
236 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
237
238 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering right Subpatterns." << endl;
239
240
241 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
242 1, 16 );
243 trace.
info() <<
"sub(1,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
244 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
245 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
246 2, 14 );
247 trace.
info() <<
"sub(2,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
248 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
249 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
250 7, 15 );
251 trace.
info() <<
"sub(7,15) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
252 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) && np == 1 ? 1 : 0;
253 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
254 7, 14 );
255 trace.
info() <<
"sub(7,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
256 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
257 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
258 3, 6 );
259 trace.
info() <<
"sub(3,6) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
260 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
261 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
262 6, 8 );
263 trace.
info() <<
"sub(6,8) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
264 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
265 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
266 8, 12 );
267 trace.
info() <<
"sub(8,12) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
268 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
269 pat_odd.getSmallestCoveringSubpattern( sp, np, start,
270 15, 16 );
271 trace.
info() <<
"sub(15,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
272 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) && np == 1 ? 1 : 0;
273
274 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering middle Subpatterns." << endl;
276
277
278 trace.
beginBlock (
"Testing block: Smallest covering subpatterns of EVEN pattern." );
279 MyPattern pat_even( 12, 17 );
280 trace.
info() <<
"EVEN " << pat_even <<
" " << pat_even.rE() << endl;
281
282
283 pat_even.getSmallestCoveringSubpattern( sp, np, start,
284 0, 29 );
285 trace.
info() <<
"sub(0,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
286 ++nb; nbok += sp.slope() == SB::fraction( 12, 17 ) ? 1 : 0;
287 pat_even.getSmallestCoveringSubpattern( sp, np, start,
288 0, 25 );
289 trace.
info() <<
"sub(0,25) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
290 ++nb; nbok += sp.slope() == SB::fraction( 12, 17 ) ? 1 : 0;
291 pat_even.getSmallestCoveringSubpattern( sp, np, start,
292 0, 17 );
293 trace.
info() <<
"sub(0,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
294 ++nb; nbok += sp.slope() == SB::fraction( 7, 10 ) ? 1 : 0;
295 pat_even.getSmallestCoveringSubpattern( sp, np, start,
296 0, 6 );
297 trace.
info() <<
"sub(0,6) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
298 ++nb; nbok += sp.slope() == SB::fraction( 7, 10 ) ? 1 : 0;
299 pat_even.getSmallestCoveringSubpattern( sp, np, start,
300 0, 5 );
301 trace.
info() <<
"sub(0,5) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
302 ++nb; nbok += sp.slope() == SB::fraction( 2, 3 ) ? 1 : 0;
303 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering left Subpatterns." << endl;
304
305
306 pat_even.getSmallestCoveringSubpattern( sp, np, start,
307 4, 29 );
308 trace.
info() <<
"sub(4,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
309 ++nb; nbok += sp.slope() == SB::fraction( 12, 17 ) ? 1 : 0;
310 pat_even.getSmallestCoveringSubpattern( sp, np, start,
311 5, 29 );
312 trace.
info() <<
"sub(5,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
313 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 2 ? 1 : 0;
314 pat_even.getSmallestCoveringSubpattern( sp, np, start,
315 16, 29 );
316 trace.
info() <<
"sub(16,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
317 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 2 ? 1 : 0;
318 pat_even.getSmallestCoveringSubpattern( sp, np, start,
319 17, 29 );
320 trace.
info() <<
"sub(17,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
321 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
322 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering right Subpatterns." << endl;
323
324
325 pat_even.getSmallestCoveringSubpattern( sp, np, start,
326 1, 27 );
327 trace.
info() <<
"sub(1,27) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
328 ++nb; nbok += sp.slope() == SB::fraction( 12, 17 ) ? 1 : 0;
329 pat_even.getSmallestCoveringSubpattern( sp, np, start,
330 5, 24 );
331 trace.
info() <<
"sub(5,24) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
332 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 2 ? 1 : 0;
333 pat_even.getSmallestCoveringSubpattern( sp, np, start,
334 4, 17 );
335 trace.
info() <<
"sub(4,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
336 ++nb; nbok += sp.slope() == SB::fraction( 7, 10 ) && np == 1 ? 1 : 0;
337 pat_even.getSmallestCoveringSubpattern( sp, np, start,
338 5, 17 );
339 trace.
info() <<
"sub(5,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
340 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
341 pat_even.getSmallestCoveringSubpattern( sp, np, start,
342 7, 12 );
343 trace.
info() <<
"sub(7,12) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
344 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
345 pat_even.getSmallestCoveringSubpattern( sp, np, start,
346 1, 4 );
347 trace.
info() <<
"sub(1,4) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
348 ++nb; nbok += sp.slope() == SB::fraction( 2, 3 ) && np == 1 ? 1 : 0;
349 pat_even.getSmallestCoveringSubpattern( sp, np, start,
350 18, 25 );
351 trace.
info() <<
"sub(18,20) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
352 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
353 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering middle Subpatterns." << endl;
355
356
357
358
359 trace.
beginBlock (
"Testing block: greatest included subpatterns of ODD pattern." );
360 trace.
info() <<
"ODD " << pat_odd <<
" " << pat_odd.rE() << endl;
361
362
363 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
364 0, 17 );
365 trace.
info() <<
"sub(0,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
366 ++nb; nbok += sp.slope() == SB::fraction( 5, 12 ) ? 1 : 0;
367 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
368 1, 17 );
369 trace.
info() <<
"sub(1,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
370 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) ? 1 : 0;
371 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
372 7, 17 );
373 trace.
info() <<
"sub(7,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
374 ++nb; nbok += sp.slope() == SB::fraction( 3, 7 ) ? 1 : 0;
375 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
376 8, 17 );
377 trace.
info() <<
"sub(8,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
378 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) ? 1 : 0;
379 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
380 13, 17 );
381 trace.
info() <<
"sub(13,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
382 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) ? 1 : 0;
383 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
384 14, 17 );
385 trace.
info() <<
"sub(14,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
386 ++nb; nbok += sp.slope() == SB::fraction( 1, 2 ) ? 1 : 0;
387 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
388 15, 17 );
389 trace.
info() <<
"sub(15,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
390 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
391
392 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering left Subpatterns." << endl;
393
394
395 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
396 0, 15 );
397 trace.
info() <<
"sub(0,15) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
398 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
399 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
400 0, 14 );
401 trace.
info() <<
"sub(0,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
402 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 2 ? 1 : 0;
403 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
404 0, 13 );
405 trace.
info() <<
"sub(0,13) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
406 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
407 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
408 0, 7 );
409 trace.
info() <<
"sub(0,7) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
410 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
411 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
412 0, 6 );
413 trace.
info() <<
"sub(0,6) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
414 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
415 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
416 0, 1 );
417 trace.
info() <<
"sub(0,1) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
418 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
419
420 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering right Subpatterns." << endl;
421
422
423 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
424 1, 16 );
425 trace.
info() <<
"sub(1,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
426 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) ? 1 : 0;
427 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
428 2, 14 );
429 trace.
info() <<
"sub(2,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
430 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
431 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
432 7, 15 );
433 trace.
info() <<
"sub(7,15) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
434 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
435 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
436 7, 14 );
437 trace.
info() <<
"sub(7,14) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
438 ++nb; nbok += sp.slope() == SB::fraction( 2, 5 ) && np == 1 ? 1 : 0;
439 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
440 3, 6 );
441 trace.
info() <<
"sub(3,6) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
442 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
443 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
444 6, 8 );
445 trace.
info() <<
"sub(6,8) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
446 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
447 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
448 8, 12 );
449 trace.
info() <<
"sub(8,12) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
450 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
451 pat_odd.getGreatestIncludedSubpattern( sp, np, start,
452 15, 16 );
453 trace.
info() <<
"sub(15,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
454 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
455
456 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering middle Subpatterns." << endl;
458
459
460 trace.
beginBlock (
"Testing block: Greatest included subpatterns of EVEN pattern." );
461 trace.
info() <<
"EVEN " << pat_even <<
" " << pat_even.rE() << endl;
462
463
464 pat_even.getGreatestIncludedSubpattern( sp, np, start,
465 0, 29 );
466 trace.
info() <<
"sub(0,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
467 ++nb; nbok += sp.slope() == SB::fraction( 12, 17 ) ? 1 : 0;
468 pat_even.getGreatestIncludedSubpattern( sp, np, start,
469 0, 25 );
470 trace.
info() <<
"sub(0,25) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
471 ++nb; nbok += sp.slope() == SB::fraction( 7, 10 ) ? 1 : 0;
472 pat_even.getGreatestIncludedSubpattern( sp, np, start,
473 0, 17 );
474 trace.
info() <<
"sub(0,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
475 ++nb; nbok += sp.slope() == SB::fraction( 7, 10 ) ? 1 : 0;
476 pat_even.getGreatestIncludedSubpattern( sp, np, start,
477 0, 16 );
478 trace.
info() <<
"sub(0,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
479 ++nb; nbok += sp.slope() == SB::fraction( 2, 3 ) ? 1 : 0;
480 pat_even.getGreatestIncludedSubpattern( sp, np, start,
481 0, 6 );
482 trace.
info() <<
"sub(0,6) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
483 ++nb; nbok += sp.slope() == SB::fraction( 2, 3 ) ? 1 : 0;
484 pat_even.getGreatestIncludedSubpattern( sp, np, start,
485 0, 5 );
486 trace.
info() <<
"sub(0,5) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
487 ++nb; nbok += sp.slope() == SB::fraction( 2, 3 ) ? 1 : 0;
488 pat_even.getGreatestIncludedSubpattern( sp, np, start,
489 0, 4 );
490 trace.
info() <<
"sub(0,4) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
491 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
492 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering left Subpatterns." << endl;
493
494
495 pat_even.getGreatestIncludedSubpattern( sp, np, start,
496 4, 29 );
497 trace.
info() <<
"sub(4,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
498 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 2 ? 1 : 0;
499 pat_even.getGreatestIncludedSubpattern( sp, np, start,
500 5, 29 );
501 trace.
info() <<
"sub(5,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
502 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 2 ? 1 : 0;
503 pat_even.getGreatestIncludedSubpattern( sp, np, start,
504 16, 29 );
505 trace.
info() <<
"sub(16,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
506 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
507 pat_even.getGreatestIncludedSubpattern( sp, np, start,
508 17, 29 );
509 trace.
info() <<
"sub(17,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
510 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
511 pat_even.getGreatestIncludedSubpattern( sp, np, start,
512 18, 29 );
513 trace.
info() <<
"sub(18,29) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
514 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
515 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering right Subpatterns." << endl;
516
517
518 pat_even.getGreatestIncludedSubpattern( sp, np, start,
519 1, 27 );
520 trace.
info() <<
"sub(1,27) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
521 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
522 pat_even.getGreatestIncludedSubpattern( sp, np, start,
523 5, 24 );
524 trace.
info() <<
"sub(5,24) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
525 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
526 pat_even.getGreatestIncludedSubpattern( sp, np, start,
527 4, 17 );
528 trace.
info() <<
"sub(4,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
529 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
530 pat_even.getGreatestIncludedSubpattern( sp, np, start,
531 5, 17 );
532 trace.
info() <<
"sub(5,17) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
533 ++nb; nbok += sp.slope() == SB::fraction( 5, 7 ) && np == 1 ? 1 : 0;
534 pat_even.getGreatestIncludedSubpattern( sp, np, start,
535 7, 16 );
536 trace.
info() <<
"sub(5,16) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
537 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
538 pat_even.getGreatestIncludedSubpattern( sp, np, start,
539 1, 4 );
540 trace.
info() <<
"sub(1,4) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
541 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
542 pat_even.getGreatestIncludedSubpattern( sp, np, start,
543 18, 25 );
544 trace.
info() <<
"sub(18,20) = " << sp <<
" " << sp.rE() <<
"^" << np << endl;
545 ++nb; nbok += sp.slope() == Fraction() ? 1 : 0;
546 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") covering middle Subpatterns." << endl;
548
549 trace.
info() <<
"Odd pattern " << pat_odd << endl;
550 trace.
info() <<
" U(0)=" << pat_odd.U( 0 )
551 << " L(0)=" << pat_odd.L( 0 )
552 << " U(1)=" << pat_odd.U( 1 )
553 << " L(1)=" << pat_odd.L( 1 ) << endl;
554
555 trace.
info() <<
"Even pattern " << pat_even << endl;
556 trace.
info() <<
" U(0)=" << pat_even.U( 0 )
557 << " L(0)=" << pat_even.L( 0 )
558 << " U(1)=" << pat_even.U( 1 )
559 << " L(1)=" << pat_even.L( 1 ) << endl;
560
561 return nbok == nb;
562}
Aim: This class represents a pattern, i.e. the path between two consecutive upper leaning points on a...