14738d3a5SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceContextSetStreamType().\n\n";
24738d3a5SJacob Faibussowitsch
34738d3a5SJacob Faibussowitsch #include "petscdevicetestcommon.h"
44738d3a5SJacob Faibussowitsch
main(int argc,char * argv[])54738d3a5SJacob Faibussowitsch int main(int argc, char *argv[])
64738d3a5SJacob Faibussowitsch {
74738d3a5SJacob Faibussowitsch const PetscStreamType stypes[] = {
8*27d4e10aSPierre Jolivet #if PetscDefined(DEVICELANGUAGE_CXX)
9fbccb6d4SPierre Jolivet PETSC_STREAM_DEFAULT, PETSC_STREAM_NONBLOCKING, PETSC_STREAM_DEFAULT_WITH_BARRIER, PETSC_STREAM_NONBLOCKING_WITH_BARRIER
104738d3a5SJacob Faibussowitsch #else
11fbccb6d4SPierre Jolivet PETSC_STREAM_DEFAULT
124738d3a5SJacob Faibussowitsch #endif
134738d3a5SJacob Faibussowitsch };
144738d3a5SJacob Faibussowitsch const PetscInt ntypes = PETSC_STATIC_ARRAY_LENGTH(stypes);
154738d3a5SJacob Faibussowitsch
164738d3a5SJacob Faibussowitsch PetscFunctionBeginUser;
174738d3a5SJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
184738d3a5SJacob Faibussowitsch
194738d3a5SJacob Faibussowitsch // test that get-set trivially work
204738d3a5SJacob Faibussowitsch for (PetscInt i = 0; i < ntypes; ++i) {
214738d3a5SJacob Faibussowitsch PetscDeviceContext tmp;
224738d3a5SJacob Faibussowitsch PetscStreamType tmp_type;
234738d3a5SJacob Faibussowitsch
244738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&tmp));
254738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
264738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
274738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s"));
284738d3a5SJacob Faibussowitsch // test that any combination of get-set trivially works
294738d3a5SJacob Faibussowitsch for (PetscInt j = 0; j < ntypes; ++j) {
304738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
314738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
324738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s"));
334738d3a5SJacob Faibussowitsch // reset it back to original
344738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
354738d3a5SJacob Faibussowitsch }
364738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&tmp));
374738d3a5SJacob Faibussowitsch }
384738d3a5SJacob Faibussowitsch
394738d3a5SJacob Faibussowitsch // test that any combination of get-set works when set up
404738d3a5SJacob Faibussowitsch for (PetscInt i = 0; i < ntypes; ++i) {
414738d3a5SJacob Faibussowitsch for (PetscInt j = 0; j < ntypes; ++j) {
424738d3a5SJacob Faibussowitsch PetscDeviceContext tmp;
434738d3a5SJacob Faibussowitsch PetscStreamType tmp_type;
444738d3a5SJacob Faibussowitsch
454738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextCreate(&tmp));
464738d3a5SJacob Faibussowitsch // check this works through setup
474738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
484738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetUp(tmp));
494738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
504738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after PetscDeviceContextSetUp"));
514738d3a5SJacob Faibussowitsch // now change the stream type
524738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[j]));
534738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
544738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[j], "Set PetscDeviceStreamType %s does not match expected %s when changing after PetscDeviceContextSetUp"));
554738d3a5SJacob Faibussowitsch // reset it back to original
564738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetStreamType(tmp, stypes[i]));
574738d3a5SJacob Faibussowitsch // and ensure this works
584738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
594738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original"));
604738d3a5SJacob Faibussowitsch // finally set up again
614738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextSetUp(tmp));
624738d3a5SJacob Faibussowitsch // and ensure it has not changed
634738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextGetStreamType(tmp, &tmp_type));
644738d3a5SJacob Faibussowitsch PetscCall(AssertPetscStreamTypesValidAndEqual(tmp_type, stypes[i], "Set PetscDeviceStreamType %s does not match expected %s after setting back to original and PetscDeviceContextSetUp"));
654738d3a5SJacob Faibussowitsch PetscCall(PetscDeviceContextDestroy(&tmp));
664738d3a5SJacob Faibussowitsch }
674738d3a5SJacob Faibussowitsch }
684738d3a5SJacob Faibussowitsch
694738d3a5SJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
704738d3a5SJacob Faibussowitsch PetscCall(PetscFinalize());
714738d3a5SJacob Faibussowitsch return 0;
724738d3a5SJacob Faibussowitsch }
734738d3a5SJacob Faibussowitsch
744738d3a5SJacob Faibussowitsch /*TEST
754738d3a5SJacob Faibussowitsch
764738d3a5SJacob Faibussowitsch testset:
77*27d4e10aSPierre Jolivet requires: defined(PETSC_DEVICELANGUAGE_CXX)
7861c8d4edSPierre Jolivet output_file: output/ExitSuccess.out
794738d3a5SJacob Faibussowitsch args: -device_enable {{lazy eager}}
804738d3a5SJacob Faibussowitsch test:
814738d3a5SJacob Faibussowitsch requires: !device
824738d3a5SJacob Faibussowitsch suffix: host_no_device
834738d3a5SJacob Faibussowitsch test:
844738d3a5SJacob Faibussowitsch requires: device
854738d3a5SJacob Faibussowitsch args: -default_device_type host
864738d3a5SJacob Faibussowitsch suffix: host_with_device
874738d3a5SJacob Faibussowitsch test:
884738d3a5SJacob Faibussowitsch requires: cuda
894738d3a5SJacob Faibussowitsch args: -default_device_type cuda
904738d3a5SJacob Faibussowitsch suffix: cuda
914738d3a5SJacob Faibussowitsch test:
924738d3a5SJacob Faibussowitsch requires: hip
934738d3a5SJacob Faibussowitsch args: -default_device_type hip
944738d3a5SJacob Faibussowitsch suffix: hip
954738d3a5SJacob Faibussowitsch test:
964738d3a5SJacob Faibussowitsch requires: sycl
974738d3a5SJacob Faibussowitsch args: -default_device_type sycl
984738d3a5SJacob Faibussowitsch suffix: sycl
994738d3a5SJacob Faibussowitsch
1004738d3a5SJacob Faibussowitsch test:
101*27d4e10aSPierre Jolivet requires: !defined(PETSC_DEVICELANGUAGE_CXX)
10261c8d4edSPierre Jolivet output_file: output/ExitSuccess.out
1034738d3a5SJacob Faibussowitsch suffix: no_cxx
1044738d3a5SJacob Faibussowitsch
1054738d3a5SJacob Faibussowitsch TEST*/
106