|
4 | 4 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
5 | 5 | #include <uur/fixtures.h>
|
6 | 6 |
|
7 |
| -struct urContextGetInfoTestWithInfoParam |
8 |
| - : uur::urContextTestWithParam<ur_context_info_t> { |
9 |
| - |
10 |
| - void SetUp() override { |
11 |
| - UUR_RETURN_ON_FATAL_FAILURE( |
12 |
| - uur::urContextTestWithParam<ur_context_info_t>::SetUp()); |
13 |
| - |
14 |
| - ctx_info_size_map = { |
15 |
| - {UR_CONTEXT_INFO_NUM_DEVICES, sizeof(uint32_t)}, |
16 |
| - {UR_CONTEXT_INFO_DEVICES, sizeof(ur_device_handle_t)}, |
17 |
| - {UR_CONTEXT_INFO_REFERENCE_COUNT, sizeof(uint32_t)}, |
18 |
| - {UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, sizeof(bool)}, |
19 |
| - {UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, sizeof(bool)}, |
20 |
| - {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, |
21 |
| - sizeof(ur_memory_order_capability_flags_t)}, |
22 |
| - {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, |
23 |
| - sizeof(ur_memory_order_capability_flags_t)}, |
24 |
| - {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, |
25 |
| - sizeof(ur_memory_order_capability_flags_t)}, |
26 |
| - {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, |
27 |
| - sizeof(ur_memory_order_capability_flags_t)}}; |
28 |
| - |
29 |
| - ctx_info_mem_flags_map = { |
30 |
| - {UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, |
31 |
| - UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, |
32 |
| - {UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, |
33 |
| - UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, |
34 |
| - {UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, |
35 |
| - UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK}, |
36 |
| - {UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES, |
37 |
| - UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK}, |
38 |
| - }; |
39 |
| - } |
| 7 | +using urContextGetInfoTest = uur::urContextTest; |
| 8 | +UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urContextGetInfoTest); |
40 | 9 |
|
41 |
| - void TearDown() override { |
42 |
| - UUR_RETURN_ON_FATAL_FAILURE( |
43 |
| - uur::urContextTestWithParam<ur_context_info_t>::TearDown()); |
44 |
| - } |
| 10 | +TEST_P(urContextGetInfoTest, SuccessNumDevices) { |
| 11 | + ur_context_info_t info_type = UR_CONTEXT_INFO_NUM_DEVICES; |
| 12 | + size_t size = 0; |
45 | 13 |
|
46 |
| - std::unordered_map<ur_context_info_t, size_t> ctx_info_size_map; |
47 |
| - std::unordered_map<ur_context_info_t, ur_memory_order_capability_flags_t> |
48 |
| - ctx_info_mem_flags_map; |
49 |
| -}; |
50 |
| - |
51 |
| -UUR_TEST_SUITE_P(urContextGetInfoTestWithInfoParam, |
52 |
| - ::testing::Values( |
53 |
| - |
54 |
| - UR_CONTEXT_INFO_NUM_DEVICES, // |
55 |
| - UR_CONTEXT_INFO_DEVICES, // |
56 |
| - UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT, // |
57 |
| - UR_CONTEXT_INFO_USM_FILL2D_SUPPORT, // |
58 |
| - UR_CONTEXT_INFO_REFERENCE_COUNT, // |
59 |
| - UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES, // |
60 |
| - UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES, // |
61 |
| - UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES, // |
62 |
| - UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES // |
63 |
| - ), |
64 |
| - uur::deviceTestWithParamPrinter<ur_context_info_t>); |
65 |
| - |
66 |
| -TEST_P(urContextGetInfoTestWithInfoParam, Success) { |
67 |
| - ur_context_info_t info = getParam(); |
68 |
| - size_t info_size = 0; |
69 |
| - ASSERT_SUCCESS_OR_OPTIONAL_QUERY( |
70 |
| - urContextGetInfo(context, info, 0, nullptr, &info_size), info); |
71 |
| - ASSERT_NE(info_size, 0); |
| 14 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, 0, nullptr, &size)); |
| 15 | + ASSERT_EQ(size, sizeof(uint32_t)); |
72 | 16 |
|
73 |
| - if (const auto expected_size = ctx_info_size_map.find(info); |
74 |
| - expected_size != ctx_info_size_map.end()) { |
75 |
| - ASSERT_EQ(expected_size->second, info_size); |
76 |
| - } |
| 17 | + uint32_t nDevices = 0; |
| 18 | + ASSERT_SUCCESS( |
| 19 | + urContextGetInfo(context, info_type, size, &nDevices, nullptr)); |
| 20 | + |
| 21 | + ASSERT_GE(uur::DevicesEnvironment::instance->devices.size(), nDevices); |
| 22 | +} |
| 23 | + |
| 24 | +TEST_P(urContextGetInfoTest, SuccessDevices) { |
| 25 | + ur_context_info_t info_type = UR_CONTEXT_INFO_DEVICES; |
| 26 | + size_t size = 0; |
77 | 27 |
|
78 |
| - std::vector<uint8_t> info_data(info_size); |
| 28 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, 0, nullptr, &size)); |
| 29 | + ASSERT_NE(size, 0); |
| 30 | + |
| 31 | + ur_device_handle_t devices = 0; |
79 | 32 | ASSERT_SUCCESS(
|
80 |
| - urContextGetInfo(context, info, info_size, info_data.data(), nullptr)); |
81 |
| - |
82 |
| - switch (info) { |
83 |
| - case UR_CONTEXT_INFO_NUM_DEVICES: { |
84 |
| - auto returned_num_of_devices = |
85 |
| - reinterpret_cast<uint32_t *>(info_data.data()); |
86 |
| - ASSERT_GE(uur::DevicesEnvironment::instance->devices.size(), |
87 |
| - *returned_num_of_devices); |
88 |
| - break; |
89 |
| - } |
90 |
| - case UR_CONTEXT_INFO_DEVICES: { |
91 |
| - auto returned_devices = |
92 |
| - reinterpret_cast<ur_device_handle_t *>(info_data.data()); |
93 |
| - size_t devices_count = info_size / sizeof(ur_device_handle_t); |
94 |
| - ASSERT_GT(devices_count, 0); |
95 |
| - for (uint32_t i = 0; i < devices_count; i++) { |
96 |
| - auto &devices = uur::DevicesEnvironment::instance->devices; |
97 |
| - auto queried_device = |
98 |
| - std::find(devices.begin(), devices.end(), returned_devices[i]); |
99 |
| - EXPECT_TRUE(queried_device != devices.end()) |
100 |
| - << "device associated with the context is not valid"; |
101 |
| - } |
102 |
| - break; |
103 |
| - } |
104 |
| - case UR_CONTEXT_INFO_REFERENCE_COUNT: { |
105 |
| - auto returned_reference_count = |
106 |
| - reinterpret_cast<uint32_t *>(info_data.data()); |
107 |
| - ASSERT_GT(*returned_reference_count, 0U); |
108 |
| - break; |
109 |
| - } |
110 |
| - default: |
111 |
| - break; |
| 33 | + urContextGetInfo(context, info_type, size, &devices, nullptr)); |
| 34 | + |
| 35 | + size_t devices_count = size / sizeof(ur_device_handle_t); |
| 36 | + ASSERT_GT(devices_count, 0); |
| 37 | + |
| 38 | + for (uint32_t i = 0; i < devices_count; i++) { |
| 39 | + auto &devices = uur::DevicesEnvironment::instance->devices; |
| 40 | + auto queried_device = |
| 41 | + std::find(devices.begin(), devices.end(), devices[i]); |
| 42 | + EXPECT_TRUE(queried_device != devices.end()) |
| 43 | + << "device associated with the context is not valid"; |
112 | 44 | }
|
113 | 45 | }
|
114 | 46 |
|
115 |
| -using urContextGetInfoTest = uur::urContextTest; |
116 |
| -UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urContextGetInfoTest); |
| 47 | +TEST_P(urContextGetInfoTest, SuccessUSMMemCpy2DSupport) { |
| 48 | + ur_context_info_t info_type = UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT; |
| 49 | + size_t size = 0; |
| 50 | + |
| 51 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, 0, nullptr, &size)); |
| 52 | + ASSERT_EQ(size, sizeof(ur_bool_t)); |
| 53 | +} |
| 54 | + |
| 55 | +TEST_P(urContextGetInfoTest, SuccessUSMFill2DSupport) { |
| 56 | + ur_context_info_t info_type = UR_CONTEXT_INFO_USM_FILL2D_SUPPORT; |
| 57 | + size_t size = 0; |
| 58 | + |
| 59 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, 0, nullptr, &size)); |
| 60 | + ASSERT_EQ(size, sizeof(ur_bool_t)); |
| 61 | +} |
| 62 | + |
| 63 | +TEST_P(urContextGetInfoTest, SuccessReferenceCount) { |
| 64 | + ur_context_info_t info_type = UR_CONTEXT_INFO_REFERENCE_COUNT; |
| 65 | + size_t size = 0; |
| 66 | + |
| 67 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, 0, nullptr, &size)); |
| 68 | + ASSERT_EQ(size, sizeof(uint32_t)); |
| 69 | + |
| 70 | + uint32_t reference_count = 0; |
| 71 | + ASSERT_SUCCESS( |
| 72 | + urContextGetInfo(context, info_type, size, &reference_count, nullptr)); |
| 73 | + ASSERT_GT(reference_count, 0U); |
| 74 | +} |
| 75 | + |
| 76 | +TEST_P(urContextGetInfoTest, SuccessAtomicMemoryOrderCapabilities) { |
| 77 | + ur_context_info_t info_type = |
| 78 | + UR_CONTEXT_INFO_ATOMIC_MEMORY_ORDER_CAPABILITIES; |
| 79 | + size_t size = 0; |
| 80 | + |
| 81 | + ASSERT_SUCCESS_OR_OPTIONAL_QUERY( |
| 82 | + urContextGetInfo(context, info_type, 0, nullptr, &size), info_type); |
| 83 | + ASSERT_EQ(size, sizeof(ur_memory_order_capability_flags_t)); |
| 84 | + |
| 85 | + ur_memory_order_capability_flags_t flags = 0; |
| 86 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, size, &flags, nullptr)); |
| 87 | + |
| 88 | + ASSERT_EQ(flags & UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK, 0); |
| 89 | +} |
| 90 | + |
| 91 | +TEST_P(urContextGetInfoTest, SuccessAtomicMemoryScopeCapabilities) { |
| 92 | + ur_context_info_t info_type = |
| 93 | + UR_CONTEXT_INFO_ATOMIC_MEMORY_SCOPE_CAPABILITIES; |
| 94 | + size_t size = 0; |
| 95 | + |
| 96 | + ASSERT_SUCCESS_OR_OPTIONAL_QUERY( |
| 97 | + urContextGetInfo(context, info_type, 0, nullptr, &size), info_type); |
| 98 | + ASSERT_EQ(size, sizeof(ur_memory_scope_capability_flags_t)); |
| 99 | + |
| 100 | + ur_memory_scope_capability_flags_t flags = 0; |
| 101 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, size, &flags, nullptr)); |
| 102 | + |
| 103 | + ASSERT_EQ(flags & UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK, 0); |
| 104 | +} |
| 105 | + |
| 106 | +TEST_P(urContextGetInfoTest, SuccessAtomicFenceOrderCapabilities) { |
| 107 | + ur_context_info_t info_type = |
| 108 | + UR_CONTEXT_INFO_ATOMIC_FENCE_ORDER_CAPABILITIES; |
| 109 | + size_t size = 0; |
| 110 | + |
| 111 | + ASSERT_SUCCESS_OR_OPTIONAL_QUERY( |
| 112 | + urContextGetInfo(context, info_type, 0, nullptr, &size), info_type); |
| 113 | + ASSERT_EQ(size, sizeof(ur_memory_order_capability_flags_t)); |
| 114 | + |
| 115 | + ur_memory_order_capability_flags_t flags = 0; |
| 116 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, size, &flags, nullptr)); |
| 117 | + |
| 118 | + ASSERT_EQ(flags & UR_MEMORY_ORDER_CAPABILITY_FLAGS_MASK, 0); |
| 119 | +} |
| 120 | + |
| 121 | +TEST_P(urContextGetInfoTest, SuccessAtomicFenceScopeCapabilities) { |
| 122 | + ur_context_info_t info_type = |
| 123 | + UR_CONTEXT_INFO_ATOMIC_FENCE_SCOPE_CAPABILITIES; |
| 124 | + size_t size = 0; |
| 125 | + |
| 126 | + ASSERT_SUCCESS_OR_OPTIONAL_QUERY( |
| 127 | + urContextGetInfo(context, info_type, 0, nullptr, &size), info_type); |
| 128 | + ASSERT_EQ(size, sizeof(ur_memory_scope_capability_flags_t)); |
| 129 | + |
| 130 | + ur_memory_scope_capability_flags_t flags = 0; |
| 131 | + ASSERT_SUCCESS(urContextGetInfo(context, info_type, size, &flags, nullptr)); |
| 132 | + |
| 133 | + ASSERT_EQ(flags & UR_MEMORY_SCOPE_CAPABILITY_FLAGS_MASK, 0); |
| 134 | +} |
| 135 | + |
117 | 136 | TEST_P(urContextGetInfoTest, InvalidNullHandleContext) {
|
118 | 137 | uint32_t nDevices = 0;
|
119 | 138 | ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_HANDLE,
|
|
0 commit comments