14738d3a5SJacob Faibussowitsch static const char help[] = "Tests PetscDeviceContextSetStreamType().\n\n"; 24738d3a5SJacob Faibussowitsch 34738d3a5SJacob Faibussowitsch #include "petscdevicetestcommon.h" 44738d3a5SJacob Faibussowitsch 54738d3a5SJacob Faibussowitsch int main(int argc, char *argv[]) 64738d3a5SJacob Faibussowitsch { 74738d3a5SJacob Faibussowitsch const PetscStreamType stypes[] = { 84738d3a5SJacob Faibussowitsch #if PetscDefined(HAVE_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: 774738d3a5SJacob Faibussowitsch requires: cxx 78*61c8d4edSPierre 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: 1014738d3a5SJacob Faibussowitsch requires: !cxx 102*61c8d4edSPierre Jolivet output_file: output/ExitSuccess.out 1034738d3a5SJacob Faibussowitsch suffix: no_cxx 1044738d3a5SJacob Faibussowitsch 1054738d3a5SJacob Faibussowitsch TEST*/ 106