From 884a400de195f51516a5ee2fd549b792ca45898d Mon Sep 17 00:00:00 2001 From: Raphael Boucherie <raphael.boucherie@inria.fr> Date: Fri, 21 Apr 2017 18:11:57 +0200 Subject: [PATCH] added assert --- Makefile | 5 ++- src/libhqr.c | 74 ++++++++++++++----------------------- testings/testing_tileinit.c | 13 ++++--- 3 files changed, 39 insertions(+), 53 deletions(-) diff --git a/Makefile b/Makefile index 4950cfd..3a7f943 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CFLAGS = -Iinclude -Wall -g3 LDFLAGS = -lm LIBHQR=src/libhqr.a -default: testing_pivgen testing_treedraw +default: testing_pivgen testing_treedraw testing_tileinit src/queue.o: include/queue.h include/common.h src/libhqr.o: include/common.h include/libhqr.h @@ -24,6 +24,9 @@ testing_pivgen : testings/testing_pivgen.o ${LIBHQR} testing_treedraw : testings/testing_treedraw.o ${LIBHQR} $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) +testing_tileinit : testings/testing_tileinit.o ${LIBHQR} + $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) + clean : rm -f include/*~ rm -f src/*.o src/*~ diff --git a/src/libhqr.c b/src/libhqr.c index c63dd15..e62ae55 100644 --- a/src/libhqr.c +++ b/src/libhqr.c @@ -208,7 +208,7 @@ static int rdmtx_gettype(const libhqr_tree_t *qrtree, int k, int m){ static int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m){ int id, perm_m, p, a; libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args); - perm_m = hqr_getinvperm( qrtree, k, m ); + perm_m = m; p = qrtree->p; a = qrtree->a; myassert( (p==1) || (perm_m / (p*a)) == (m / (p*a)) ); @@ -223,15 +223,11 @@ static int rdmtx_currpiv(const libhqr_tree_t *qrtree, int k, int m){ */ static int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m){ - int id, om, op; + int id; libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args); int gmt = qrtree->mt; - om = m; - op = p; - m = hqr_getinvperm( qrtree, k, om); - p = hqr_getinvperm( qrtree, k, op); myassert( m > p && p >= k ); - myassert( m == gmt || op == rdmtx_currpiv( qrtree, k, om ) ); + myassert( m == gmt || p == rdmtx_currpiv( qrtree, k, m ) ); if(m == qrtree->mt){ id = (k * qrtree->mt) + p; return arg[id].first_nextpiv; @@ -243,15 +239,11 @@ static int rdmtx_nextpiv(const libhqr_tree_t *qrtree, int k, int p, int m){ } static int rdmtx_prevpiv(const libhqr_tree_t *qrtree, int k, int p, int m){ - int id, om, op; + int id; libhqr_tileinfo_t *arg = (libhqr_tileinfo_t*)(qrtree->args); int gmt = qrtree->mt; - om = m; - op = p; - m = hqr_getinvperm( qrtree, k, om ); - p = hqr_getinvperm( qrtree, k, op ); myassert( m >= p && p >= k && m < gmt ); - myassert( m == p || op == rdmtx_currpiv( qrtree, k, om ) ); + myassert( m == p || p == rdmtx_currpiv( qrtree, k, m ) ); if(m == p){ id = (k * qrtree->mt) + p; @@ -361,7 +353,7 @@ static int hqr_geti( const libhqr_tree_t *qrtree, int k, int m ) int a = qrtree->a; int p = qrtree->p; int domino = qrtree->domino; - int lm = hqr_getinvperm( qrtree, k, m ); + int lm = m; int pos1, j, pa = p * a; int nbextra1 = nbextra1_formula; @@ -397,7 +389,7 @@ static int hqr_gettype( const libhqr_tree_t *qrtree, int k, int m ) { int p = qrtree->p; int domino = qrtree->domino; - int lm = hqr_getinvperm( qrtree, k, m ); + int lm = m; myassert( lm >= k ); /* Element to be reduce in distributed */ @@ -1353,19 +1345,15 @@ static void hqr_high_greedy_init(hqr_subpiv_t *arg, int minMN){ static int hqr_currpiv(const libhqr_tree_t *qrtree, int k, int m) { hqr_args_t *arg = (hqr_args_t*)(qrtree->args); - int tmp, tmpk, perm_m; + int tmp, tmpk; int lm, rank; int a = qrtree->a; int p = qrtree->p; int domino = qrtree->domino; int gmt = qrtree->mt; - perm_m = hqr_getinvperm( qrtree, k, m ); - lm = perm_m / p; /* Local index in the distribution over p domains */ - rank = perm_m % p; /* Staring index in this distribution */ - - myassert( (p==1) || (perm_m / (p*a)) == (m / (p*a)) ); - myassert( (p==1) || (perm_m % p) == (m % p) ); + lm = m / p; /* Local index in the distribution over p domains */ + rank = m % p; /* Staring index in this distribution */ /* TS level common to every case */ if ( domino ) { @@ -1379,7 +1367,7 @@ static int hqr_currpiv(const libhqr_tree_t *qrtree, int k, int m) return tmp * a * p + rank ; break; case 1: - tmp = arg->llvl->currpiv(arg->llvl, k, perm_m); + tmp = arg->llvl->currpiv(arg->llvl, k, m); return ( tmp == k / a ) ? k * p + rank : tmp * a * p + rank; break; case 2: @@ -1387,7 +1375,7 @@ static int hqr_currpiv(const libhqr_tree_t *qrtree, int k, int m) break; case 3: if ( arg->hlvl != NULL ) - return arg->hlvl->currpiv(arg->hlvl, k, perm_m); + return arg->hlvl->currpiv(arg->hlvl, k, m); default: return gmt; } @@ -1399,20 +1387,20 @@ static int hqr_currpiv(const libhqr_tree_t *qrtree, int k, int m) tmp = lm / a; /* tmpk = (k + p - 1 - m%p) / p / a; */ tmpk = k / (p * a); - return ( tmp == tmpk ) ? k + (perm_m-k)%p : tmp * a * p + rank ; + return ( tmp == tmpk ) ? k + (m-k)%p : tmp * a * p + rank ; break; case 1: - tmp = arg->llvl->currpiv(arg->llvl, k, perm_m); + tmp = arg->llvl->currpiv(arg->llvl, k, m); /* tmpk = (k + p - 1 - m%p) / p / a; */ tmpk = k / (p * a); - return ( tmp == tmpk ) ? k + (perm_m-k)%p : tmp * a * p + rank ; + return ( tmp == tmpk ) ? k + (m-k)%p : tmp * a * p + rank ; break; case 2: - return perm_m - p; + return m - p; break; case 3: if ( arg->hlvl != NULL ) - return arg->hlvl->currpiv(arg->hlvl, k, perm_m); + return arg->hlvl->currpiv(arg->hlvl, k, m); default: return gmt; } @@ -1442,17 +1430,11 @@ static int hqr_nextpiv(const libhqr_tree_t *qrtree, int k, int pivot, int start) { hqr_args_t *arg = (hqr_args_t*)(qrtree->args); int tmp, ls, lp, nextp; - int opivot, ostart; /* original values before permutation */ int lpivot, rpivot, lstart; int a = qrtree->a; int p = qrtree->p; int gmt = qrtree->mt; - ostart = start; - opivot = pivot; - start = hqr_getinvperm( qrtree, k, ostart); - pivot = hqr_getinvperm( qrtree, k, opivot); - lpivot = pivot / p; /* Local index in the distribution over p domains */ rpivot = pivot % p; /* Staring index in this distribution */ @@ -1460,11 +1442,11 @@ static int hqr_nextpiv(const libhqr_tree_t *qrtree, int k, int pivot, int start) lstart = ( start == gmt ) ? arg->llvl->ldd * a : start / p; myassert( start > pivot && pivot >= k ); - myassert( start == gmt || opivot == hqr_currpiv( qrtree, k, ostart ) ); + myassert( start == gmt || pivot == hqr_currpiv( qrtree, k, start ) ); /* TS level common to every case */ - ls = (start < gmt) ? hqr_gettype( qrtree, k, ostart ) : -1; - lp = hqr_gettype( qrtree, k, opivot ); + ls = (start < gmt) ? hqr_gettype( qrtree, k, start ) : -1; + lp = hqr_gettype( qrtree, k, pivot ); switch( ls ) { @@ -1572,27 +1554,21 @@ hqr_prevpiv(const libhqr_tree_t *qrtree, int k, int pivot, int start) { hqr_args_t *arg = (hqr_args_t*)(qrtree->args); int tmp, ls, lp, nextp; - int opivot, ostart; /* original values before permutation */ int lpivot, rpivot, lstart; int a = qrtree->a; int p = qrtree->p; int gmt = qrtree->mt; - ostart = start; - opivot = pivot; - start = hqr_getinvperm( qrtree, k, ostart ); - pivot = hqr_getinvperm( qrtree, k, opivot ); - lpivot = pivot / p; /* Local index in the distribution over p domains */ rpivot = pivot % p; /* Staring index in this distribution */ lstart = start / p; /* Local index in the distribution over p domains */ myassert( start >= pivot && pivot >= k && start < gmt ); - myassert( start == pivot || opivot == hqr_currpiv( qrtree, k, ostart ) ); + myassert( start == pivot || pivot == hqr_currpiv( qrtree, k, start ) ); /* T Slevel common to every case */ - ls = hqr_gettype( qrtree, k, ostart ); - lp = hqr_gettype( qrtree, k, opivot ); + ls = hqr_gettype( qrtree, k, start ); + lp = hqr_gettype( qrtree, k, pivot ); if ( lp == LIBHQR_KILLED_BY_TS ) return gmt; @@ -2860,6 +2836,10 @@ void libhqr_matrix_init(libhqr_tree_t *qrtree, const libhqr_tree_t *qrtree_init) arg[tile_id].first_prevpiv = qrtree_init->prevpiv(qrtree_init, k, i, i); arg[tile_id].nextpiv = qrtree_init->nextpiv(qrtree_init, k, p, i); arg[tile_id].prevpiv = qrtree_init->prevpiv(qrtree_init, k, p, i); + assert( (arg[tile_id].nextpiv <= qrtree->mt && arg[tile_id].nextpiv >= k) || arg[tile_id].nextpiv==-1 ); + assert( (arg[tile_id].prevpiv <= qrtree->mt && arg[tile_id].prevpiv >= k) || arg[tile_id].prevpiv==-1 ); + assert( (arg[tile_id].first_nextpiv <= qrtree->mt && arg[tile_id].first_nextpiv >= k) || arg[tile_id].first_nextpiv==-1 ); + assert( (arg[tile_id].first_prevpiv <= qrtree->mt && arg[tile_id].first_prevpiv >= k) || arg[tile_id].first_prevpiv==-1 ); } } qrtree->args = (void*)arg; diff --git a/testings/testing_tileinit.c b/testings/testing_tileinit.c index 9f40d84..895aa63 100644 --- a/testings/testing_tileinit.c +++ b/testings/testing_tileinit.c @@ -18,20 +18,23 @@ #include <stdio.h> #include <string.h> #include <stdlib.h> +#include <assert.h> #include "libhqr.h" int main(int argc, char ** argv) { + int rc; libhqr_tree_t qrtree; libhqr_tiledesc_t matrix; - libhqr_tileinfo_t *tiles; + + memset( &qrtree, 0xdeadbeef, sizeof(libhqr_tree_t) ); matrix.nodes = 1; - matrix.p = 1; - matrix.mt = 3; + matrix.p = 3; + matrix.mt = 1; matrix.nt = 1; - libhqr_hqr_init( &qrtree, LIBHQR_QR, &matrix, LIBHQR_BINARY_TREE, LIBHQR_FLAT_TREE, 1, 2, 0, 0); + libhqr_hqr_init( &qrtree, LIBHQR_QR, &matrix, 0, 0, 1, 3, 0, 0); + rc = libhqr_tree_check( &matrix, &qrtree ); libhqr_hqr_finalize( &qrtree ); - free(tiles); return 1; } -- GitLab