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*/