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