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