1 static const char help[] = "Tests PetscDeviceContextSetStreamType().\n\n";
2
3 #include "petscdevicetestcommon.h"
4
main(int argc,char * argv[])5 int main(int argc, char *argv[])
6 {
7 const PetscStreamType stypes[] = {
8 #if PetscDefined(DEVICELANGUAGE_CXX)
9 PETSC_STREAM_DEFAULT, PETSC_STREAM_NONBLOCKING, PETSC_STREAM_DEFAULT_WITH_BARRIER, PETSC_STREAM_NONBLOCKING_WITH_BARRIER
10 #else
11 PETSC_STREAM_DEFAULT
12 #endif
13 };
14 const PetscInt ntypes = PETSC_STATIC_ARRAY_LENGTH(stypes);
15
16 PetscFunctionBeginUser;
17 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
18
19 // test that get-set trivially work
20 for (PetscInt i = 0; i < ntypes; ++i) {
21 PetscDeviceContext tmp;
22 PetscStreamType tmp_type;
23
24 PetscCall(PetscDeviceContextCreate(&tmp));
25 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
26 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
27 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s"));
28 // test that any combination of get-set trivially works
29 for (PetscInt j = 0; j < ntypes; ++j) {
30 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
31 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
32 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s"));
33 // reset it back to original
34 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
35 }
36 PetscCall(PetscDeviceContextDestroy(&tmp));
37 }
38
39 // test that any combination of get-set works when set up
40 for (PetscInt i = 0; i < ntypes; ++i) {
41 for (PetscInt j = 0; j < ntypes; ++j) {
42 PetscDeviceContext tmp;
43 PetscStreamType tmp_type;
44
45 PetscCall(PetscDeviceContextCreate(&tmp));
46 // check this works through setup
47 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
48 PetscCall(PetscDeviceContextSetUp(tmp));
49 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
50 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after PetscDeviceContextSetUp"));
51 // now change the stream type
52 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
53 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
54 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s when changing after PetscDeviceContextSetUp"));
55 // reset it back to original
56 PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
57 // and ensure this works
58 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
59 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original"));
60 // finally set up again
61 PetscCall(PetscDeviceContextSetUp(tmp));
62 // and ensure it has not changed
63 PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
64 PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original and PetscDeviceContextSetUp"));
65 PetscCall(PetscDeviceContextDestroy(&tmp));
66 }
67 }
68
69 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
70 PetscCall(PetscFinalize());
71 return 0;
72 }
73
74 /*TEST
75
76 testset:
77 requires: defined(PETSC_DEVICELANGUAGE_CXX)
78 output_file: output/ExitSuccess.out
79 args: -device_enable {{lazy eager}}
80 test:
81 requires: !device
82 suffix: host_no_device
83 test:
84 requires: device
85 args: -default_device_type host
86 suffix: host_with_device
87 test:
88 requires: cuda
89 args: -default_device_type cuda
90 suffix: cuda
91 test:
92 requires: hip
93 args: -default_device_type hip
94 suffix: hip
95 test:
96 requires: sycl
97 args: -default_device_type sycl
98 suffix: sycl
99
100 test:
101 requires: !defined(PETSC_DEVICELANGUAGE_CXX)
102 output_file: output/ExitSuccess.out
103 suffix: no_cxx
104
105 TEST*/
106