1fbdc3dfeSToby Isaac const char help[] = "Tests PetscDTBaryToIndex(), PetscDTIndexToBary(), PetscDTIndexToGradedOrder() and PetscDTGradedOrderToIndex()"; 2d4afb720SToby Isaac 3d4afb720SToby Isaac #include <petsc/private/petscimpl.h> 4d4afb720SToby Isaac #include <petsc/private/dtimpl.h> 5d4afb720SToby Isaac #include <petsc/private/petscfeimpl.h> 6d4afb720SToby Isaac 7d4afb720SToby Isaac int main(int argc, char **argv) 8d4afb720SToby Isaac { 9d4afb720SToby Isaac PetscInt d, n, maxdim = 4; 10d4afb720SToby Isaac PetscInt *btupprev, *btup; 11fbdc3dfeSToby Isaac PetscInt *gtup; 12d4afb720SToby Isaac 139566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 149566063dSJacob Faibussowitsch PetscCall(PetscMalloc3(maxdim + 1, &btup, maxdim + 1, &btupprev, maxdim, >up)); 15d4afb720SToby Isaac for (d = 0; d <= maxdim; d++) { 16d4afb720SToby Isaac for (n = 0; n <= d + 2; n++) { 17d4afb720SToby Isaac PetscInt j, k, Nk, kchk; 18d4afb720SToby Isaac 199566063dSJacob Faibussowitsch PetscCall(PetscDTBinomialInt(d + n, d, &Nk)); 20d4afb720SToby Isaac for (k = 0; k < Nk; k++) { 21d4afb720SToby Isaac PetscInt sum; 22d4afb720SToby Isaac 239566063dSJacob Faibussowitsch PetscCall(PetscDTIndexToBary(d + 1, n, k, btup)); 24d4afb720SToby Isaac for (j = 0, sum = 0; j < d + 1; j++) { 2563a3b9bcSJacob Faibussowitsch PetscCheck(btup[j] >= 0,PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " negative entry", d, n, k); 26d4afb720SToby Isaac sum += btup[j]; 27d4afb720SToby Isaac } 2863a3b9bcSJacob Faibussowitsch PetscCheck(sum == n,PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " incorrect sum", d, n, k); 299566063dSJacob Faibussowitsch PetscCall(PetscDTBaryToIndex(d + 1, n, btup, &kchk)); 3063a3b9bcSJacob Faibussowitsch PetscCheck(kchk == k,PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTBaryToIndex, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " mismatch", d, n, k); 31d4afb720SToby Isaac if (k) { 32d4afb720SToby Isaac j = d; 33d4afb720SToby Isaac while (j >= 0 && btup[j] == btupprev[j]) j--; 3463a3b9bcSJacob Faibussowitsch PetscCheck(j >= 0,PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " equal to previous", d, n, k); 3563a3b9bcSJacob Faibussowitsch PetscCheck(btup[j] >= btupprev[j],PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " less to previous", d, n, k); 36d4afb720SToby Isaac } else { 379566063dSJacob Faibussowitsch PetscCall(PetscArraycpy(btupprev, btup, d + 1)); 38d4afb720SToby Isaac } 399566063dSJacob Faibussowitsch PetscCall(PetscDTIndexToGradedOrder(d, Nk - 1 - k, gtup)); 409566063dSJacob Faibussowitsch PetscCall(PetscDTGradedOrderToIndex(d, gtup, &kchk)); 41*1dca8a05SBarry Smith PetscCheck(kchk == Nk - 1 - k,PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTGradedOrderToIndex, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " mismatch", d, n, Nk - 1 - k); 42fbdc3dfeSToby Isaac for (j = 0; j < d; j++) { 4363a3b9bcSJacob Faibussowitsch PetscCheck(gtup[j] == btup[d - 1 - j],PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToGradedOrder, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " incorrect", d, n, Nk - 1 - k); 44d4afb720SToby Isaac } 45d4afb720SToby Isaac } 46d4afb720SToby Isaac } 47fbdc3dfeSToby Isaac } 489566063dSJacob Faibussowitsch PetscCall(PetscFree3(btup, btupprev, gtup)); 499566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 50b122ec5aSJacob Faibussowitsch return 0; 51d4afb720SToby Isaac } 52d4afb720SToby Isaac 53d4afb720SToby Isaac /*TEST 54d4afb720SToby Isaac 55d4afb720SToby Isaac test: 56d4afb720SToby Isaac 57d4afb720SToby Isaac TEST*/ 58