Actual source code: ex7.c

  1: static char help[] = "Tests ISLocate().\n\n";

  3: #include <petscis.h>

  5: static PetscErrorCode TestGeneral(void)
  6: {
  7:   const PetscInt idx[] = {8, 6, 7, -5, 3, 0, 9};
  8:   PetscInt       n = 7, key = 3, nonkey = 1, keylocation = 4, sortedlocation = 2, location;
  9:   IS             is;

 11:   PetscFunctionBegin;
 12:   PetscCall(ISCreateGeneral(PETSC_COMM_SELF, n, idx, PETSC_COPY_VALUES, &is));
 13:   PetscCall(ISLocate(is, key, &location));
 14:   PetscCheck(location == keylocation, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Key %" PetscInt_FMT " not at %" PetscInt_FMT ": %" PetscInt_FMT, key, keylocation, location);
 15:   PetscCall(ISLocate(is, nonkey, &location));
 16:   PetscCheck(location < 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Nonkey %" PetscInt_FMT " found at %" PetscInt_FMT, nonkey, location);
 17:   PetscCall(ISSort(is));
 18:   PetscCall(ISLocate(is, key, &location));
 19:   PetscCheck(location == sortedlocation, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Key %" PetscInt_FMT " not at %" PetscInt_FMT ": %" PetscInt_FMT, key, sortedlocation, location);
 20:   PetscCall(ISLocate(is, nonkey, &location));
 21:   PetscCheck(location < 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Nonkey %" PetscInt_FMT " found at %" PetscInt_FMT, nonkey, location);
 22:   PetscCall(ISDestroy(&is));
 23:   PetscFunctionReturn(PETSC_SUCCESS);
 24: }

 26: static PetscErrorCode TestBlock(void)
 27: {
 28:   const PetscInt idx[] = {
 29:     8, 6, 7, -5, 3, 0, 9,
 30:   };
 31:   PetscInt bs = 5, n = 7, key = 16, nonkey = 7, keylocation = 21, sortedlocation = 11, location;
 32:   IS       is;

 34:   PetscFunctionBegin;
 35:   PetscCall(ISCreateBlock(PETSC_COMM_SELF, bs, n, idx, PETSC_COPY_VALUES, &is));
 36:   PetscCall(ISLocate(is, key, &location));
 37:   PetscCheck(location == keylocation, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Key %" PetscInt_FMT " not at %" PetscInt_FMT ": %" PetscInt_FMT, key, keylocation, location);
 38:   PetscCall(ISLocate(is, nonkey, &location));
 39:   PetscCheck(location < 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Nonkey %" PetscInt_FMT " found at %" PetscInt_FMT, nonkey, location);
 40:   PetscCall(ISSort(is));
 41:   PetscCall(ISLocate(is, key, &location));
 42:   PetscCheck(location == sortedlocation, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Key %" PetscInt_FMT " not at %" PetscInt_FMT ": %" PetscInt_FMT, key, sortedlocation, location);
 43:   PetscCall(ISLocate(is, nonkey, &location));
 44:   PetscCheck(location < 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Nonkey %" PetscInt_FMT " found at %" PetscInt_FMT, nonkey, location);
 45:   PetscCall(ISDestroy(&is));
 46:   PetscFunctionReturn(PETSC_SUCCESS);
 47: }

 49: static PetscErrorCode TestStride(void)
 50: {
 51:   PetscInt stride = 7, first = -3, n = 18, key = 39, keylocation = 6;
 52:   PetscInt nonkey[] = {-2, 123}, i, location;
 53:   IS       is;

 55:   PetscFunctionBegin;
 56:   PetscCall(ISCreateStride(PETSC_COMM_SELF, n, first, stride, &is));
 57:   PetscCall(ISLocate(is, key, &location));
 58:   PetscCheck(location == keylocation, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Key %" PetscInt_FMT " not at %" PetscInt_FMT ": %" PetscInt_FMT, key, keylocation, location);
 59:   for (i = 0; i < 2; i++) {
 60:     PetscCall(ISLocate(is, nonkey[i], &location));
 61:     PetscCheck(location < 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Nonkey %" PetscInt_FMT " found at %" PetscInt_FMT, nonkey[i], location);
 62:   }
 63:   PetscCall(ISDestroy(&is));
 64:   PetscFunctionReturn(PETSC_SUCCESS);
 65: }

 67: int main(int argc, char **argv)
 68: {
 69:   PetscFunctionBeginUser;
 70:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 71:   PetscCall(TestGeneral());
 72:   PetscCall(TestBlock());
 73:   PetscCall(TestStride());
 74:   PetscCall(PetscFinalize());
 75:   return 0;
 76: }

 78: /*TEST

 80:    test:
 81:       output_file: output/empty.out

 83: TEST*/