Internal verification for ideals/modules and dense matrices!
| 551 | #ifdef PDEBUG |
| 552 | /// Internal verification for ideals/modules and dense matrices! |
| 553 | void id_DBTest(ideal h1, int level, const char *f,const int l, const ring r, const ring tailRing) |
| 554 | { |
| 555 | if (h1 != NULL) |
| 556 | { |
| 557 | // assume(IDELEMS(h1) > 0); for ideal/module, does not apply to matrix |
| 558 | omCheckAddrSize(h1,sizeof(*h1)); |
| 559 | |
| 560 | assume( h1->ncols >= 0 ); |
| 561 | assume( h1->nrows >= 0 ); // matrix case! |
| 562 | |
| 563 | assume( h1->rank >= 0 ); |
| 564 | |
| 565 | const long n = ((long)h1->ncols * (long)h1->nrows); |
| 566 | |
| 567 | assume( !( n > 0 && h1->m == NULL) ); |
| 568 | |
| 569 | if( h1->m != NULL && n > 0 ) |
| 570 | omdebugAddrSize(h1->m, n * sizeof(poly)); |
| 571 | |
| 572 | long new_rk = 0; // inlining id_RankFreeModule(h1, r, tailRing); |
| 573 | |
| 574 | /* to be able to test matrices: */ |
| 575 | for (long i=n - 1; i >= 0; i--) |
| 576 | { |
| 577 | _pp_Test(h1->m[i], r, tailRing, level); |
| 578 | const long k = p_MaxComp(h1->m[i], r, tailRing); |
| 579 | if (k > new_rk) new_rk = k; |
| 580 | } |
| 581 | |
| 582 | // dense matrices only contain polynomials: |
| 583 | // h1->nrows == h1->rank > 1 && new_rk == 0! |
| 584 | assume( !( h1->nrows == h1->rank && h1->nrows > 1 && new_rk > 0 ) ); // |
| 585 | |
| 586 | if(new_rk > h1->rank) |
| 587 | { |
| 588 | dReportError("wrong rank %d (should be %d) in %s:%d\n", |
| 589 | h1->rank, new_rk, f,l); |
| 590 | omPrintAddrInfo(stderr, h1, " for ideal"); |
| 591 | h1->rank = new_rk; |
| 592 | } |
| 593 | } |
| 594 | else |
| 595 | { |
| 596 | Print("error: ideal==NULL in %s:%d\n",f,l); |
| 597 | assume( h1 != NULL ); |
| 598 | } |
| 599 | } |
| 600 | #endif |
| 601 | |
| 602 | #ifdef PDEBUG |
nothing calls this directly
no test coverage detected