1 /*############################################################################
2   # Copyright (C) 2020 Intel Corporation
3   #
4   # SPDX-License-Identifier: MIT
5   ############################################################################*/
6 
7 #include <gtest/gtest.h>
8 
9 #include "src/dispatcher_common.h"
10 
11 // leave table formatting alone
12 // clang-format off
13 
14 struct TestPropVal {
15     mfxVariantType varType;
16     const char *name;
17     mfxU64 validData;
18     mfxU64 invalidData;
19 };
20 
21 // all valid properties (CPU runtime) except non-filtering parameters (SetHandle, etc.)
22 // ApiVersion.Major and ApiVersion.Minor need to be used together, so not included here (handled in other test cases)
23 static const TestPropVal TestPropIntTab[] = {
24     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.Impl",                                                              MFX_IMPL_TYPE_SOFTWARE, 0xffffffff },
25     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.AccelerationMode",                                                  MFX_ACCEL_MODE_NA, 0xffffffff },
26     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.ApiVersion.Version",                                                (MFX_VERSION_MAJOR << 16) | (MFX_VERSION_MINOR), (99 << 16) | (0) },
27     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.VendorID",                                                          0x8086, 0xefefefef },
28     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.VendorImplID",                                                      0, 0xffffffff },
29     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxSurfacePoolMode",                                                MFX_ALLOCATION_UNLIMITED, 0xefefefef },
30 
31     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxDeviceDescription.device.DeviceID",                              0, 0xefef },
32     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxDeviceDescription.device.MediaAdapterType",                      MFX_MEDIA_UNKNOWN, MFX_MEDIA_INTEGRATED },
33 
34     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxDecoderDescription.decoder.CodecID",                             MFX_CODEC_AVC, MFX_CODEC_VC1 },
35     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxDecoderDescription.decoder.MaxcodecLevel",                       MFX_LEVEL_AVC_52, MFX_LEVEL_AVC_62 },
36     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxDecoderDescription.decoder.decprofile.Profile",                  MFX_PROFILE_AVC_HIGH, MFX_PROFILE_AVC_HIGH_422 },
37     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxDecoderDescription.decoder.decprofile.decmemdesc.MemHandleType", MFX_RESOURCE_SYSTEM_SURFACE, MFX_RESOURCE_DX12_RESOURCE },
38     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxDecoderDescription.decoder.decprofile.decmemdesc.ColorFormats",  MFX_FOURCC_I420, MFX_FOURCC_NV12 },
39 
40     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxEncoderDescription.encoder.CodecID",                             MFX_CODEC_HEVC, MFX_CODEC_VC1 },
41     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxEncoderDescription.encoder.MaxcodecLevel",                       MFX_LEVEL_HEVC_51, MFX_LEVEL_HEVC_62 },
42     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxEncoderDescription.encoder.BiDirectionalPrediction",             1, 0xefef },
43     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxEncoderDescription.encoder.encprofile.Profile",                  MFX_PROFILE_AV1_MAIN, MFX_PROFILE_AV1_PRO },
44     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxEncoderDescription.encoder.encprofile.encmemdesc.MemHandleType", MFX_RESOURCE_SYSTEM_SURFACE, MFX_RESOURCE_DX12_RESOURCE },
45     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxEncoderDescription.encoder.encprofile.encmemdesc.ColorFormats",  MFX_FOURCC_I420, MFX_FOURCC_NV12 },
46 
47     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxVPPDescription.filter.FilterFourCC",                             MFX_EXTBUFF_VPP_COLOR_CONVERSION, MFX_EXTBUFF_VPP_DEINTERLACING },
48     { MFX_VARIANT_TYPE_U16, "mfxImplDescription.mfxVPPDescription.filter.MaxDelayInFrames",                         1, 0xefef },
49     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxVPPDescription.filter.memdesc.MemHandleType",                    MFX_RESOURCE_SYSTEM_SURFACE, MFX_RESOURCE_DX12_RESOURCE },
50     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxVPPDescription.filter.memdesc.format.InFormat",                  MFX_FOURCC_I420, MFX_FOURCC_NV12 },
51     { MFX_VARIANT_TYPE_U32, "mfxImplDescription.mfxVPPDescription.filter.memdesc.format.OutFormats",                MFX_FOURCC_I010, MFX_FOURCC_P010 },
52 };
53 
54 #define NUM_TEST_PROP_INT (sizeof(TestPropIntTab) / sizeof(TestPropVal))
55 
56 struct TestPropPtr {
57     mfxVariantType varType;
58     const char *name;
59     const void *validData;
60     const void *invalidData;
61 };
62 
63 static const mfxRange32U cpuRangeValid         = { 64, 4096, 8 };
64 static const mfxRange32U cpuRangeInvalidMin    = { 32, 4096, 8 };
65 static const mfxRange32U cpuRangeInvalidMax    = { 64, 9000, 8 };
66 static const mfxRange32U cpuRangeInvalidStep   = { 64, 4096, 4 };
67 
68 static const TestPropPtr TestPropPtrTab[] = {
69     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.ImplName",                                                          "oneAPI VPL CPU Implementation", "INVALID" },
70     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.License",                                                           "MIT", "INVALID" },
71     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.Keywords",                                                          "CPU", "INVALID" },
72 
73     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxDeviceDescription.device.DeviceID",                              "0000", "efef" },
74 
75     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxDecoderDescription.decoder.decprofile.decmemdesc.Width",         reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidMin)  },
76     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxDecoderDescription.decoder.decprofile.decmemdesc.Height",        reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidMax)  },
77 
78     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxEncoderDescription.encoder.encprofile.encmemdesc.Width",         reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidStep) },
79     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxEncoderDescription.encoder.encprofile.encmemdesc.Height",        reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidMin)  },
80 
81     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxVPPDescription.filter.memdesc.Width",                            reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidMax)  },
82     { MFX_VARIANT_TYPE_PTR, "mfxImplDescription.mfxVPPDescription.filter.memdesc.Height",                           reinterpret_cast<const void *>(&cpuRangeValid), reinterpret_cast<const void *>(&cpuRangeInvalidStep) },
83 
84     { MFX_VARIANT_TYPE_PTR, "mfxImplementedFunctions.FunctionsName",                                                "MFXVideoDECODE_VPP_Init", "INVALID" },
85 };
86 
87 #define NUM_TEST_PROP_PTR (sizeof(TestPropPtrTab) / sizeof(TestPropPtr))
88 
89 // set all properties in a separate cfg object for each
TEST(Dispatcher_SW_MultiProp,AllPropsValidOnePerConfig)90 TEST(Dispatcher_SW_MultiProp, AllPropsValidOnePerConfig) {
91     SKIP_IF_DISP_SW_DISABLED();
92 
93     mfxStatus sts    = MFX_ERR_NONE;
94     mfxLoader loader = nullptr;
95 
96     loader = MFXLoad();
97     EXPECT_FALSE(loader == nullptr);
98 
99     for (mfxU32 i = 0; i < NUM_TEST_PROP_INT; i++) {
100         sts = SetSingleProperty<mfxU64>(loader, TestPropIntTab[i].name, TestPropIntTab[i].varType, (mfxU64)TestPropIntTab[i].validData);
101         EXPECT_EQ(sts, MFX_ERR_NONE);
102     }
103 
104     for (mfxU32 i = 0; i < NUM_TEST_PROP_PTR; i++) {
105         sts = SetSingleProperty<mfxHDL>(loader, TestPropPtrTab[i].name, TestPropPtrTab[i].varType, (mfxHDL)TestPropPtrTab[i].validData);
106         EXPECT_EQ(sts, MFX_ERR_NONE);
107     }
108 
109     // create session with first implementation
110     mfxSession session = nullptr;
111     sts                = MFXCreateSession(loader, 0, &session);
112     EXPECT_EQ(sts, MFX_ERR_NONE);
113     EXPECT_NE(session, nullptr);
114 
115     sts = MFXClose(session);
116     EXPECT_EQ(sts, MFX_ERR_NONE);
117 
118     // free internal resources
119     MFXUnload(loader);
120 }
121 
122 // set all properties in the same cfg object for each
TEST(Dispatcher_SW_MultiProp,AllPropsValidSingleConfig)123 TEST(Dispatcher_SW_MultiProp, AllPropsValidSingleConfig) {
124     SKIP_IF_DISP_SW_DISABLED();
125 
126     mfxStatus sts    = MFX_ERR_NONE;
127     mfxLoader loader = nullptr;
128 
129     loader = MFXLoad();
130     EXPECT_FALSE(loader == nullptr);
131 
132     mfxConfig cfg = MFXCreateConfig(loader);
133     EXPECT_FALSE(cfg == nullptr);
134 
135     for (mfxU32 i = 0; i < NUM_TEST_PROP_INT; i++) {
136         sts = SetSingleProperty<mfxU64>(loader, cfg, TestPropIntTab[i].name, TestPropIntTab[i].varType, (mfxU64)TestPropIntTab[i].validData);
137         EXPECT_EQ(sts, MFX_ERR_NONE);
138     }
139 
140     for (mfxU32 i = 0; i < NUM_TEST_PROP_PTR; i++) {
141         sts = SetSingleProperty<mfxHDL>(loader, cfg, TestPropPtrTab[i].name, TestPropPtrTab[i].varType, (mfxHDL)TestPropPtrTab[i].validData);
142         EXPECT_EQ(sts, MFX_ERR_NONE);
143     }
144 
145     // create session with first implementation
146     mfxSession session = nullptr;
147     sts                = MFXCreateSession(loader, 0, &session);
148     EXPECT_EQ(sts, MFX_ERR_NONE);
149     EXPECT_NE(session, nullptr);
150 
151     sts = MFXClose(session);
152     EXPECT_EQ(sts, MFX_ERR_NONE);
153 
154     // free internal resources
155     MFXUnload(loader);
156 }
157 
TestAllPropsIntSingleInvalid(mfxU32 invalidIdx,bool bUseSingleConfig=false)158 static mfxStatus TestAllPropsIntSingleInvalid(mfxU32 invalidIdx, bool bUseSingleConfig = false) {
159     mfxStatus sts    = MFX_ERR_NONE;
160     mfxLoader loader = nullptr;
161 
162     loader = MFXLoad();
163     EXPECT_FALSE(loader == nullptr);
164 
165     mfxConfig cfg = nullptr;
166     if (bUseSingleConfig) {
167         cfg = MFXCreateConfig(loader);
168         EXPECT_FALSE(cfg == nullptr);
169     }
170 
171     for (mfxU32 i = 0; i < NUM_TEST_PROP_INT; i++) {
172         mfxU64 data = (i == invalidIdx ? (mfxU64)TestPropIntTab[i].invalidData : (mfxU64)TestPropIntTab[i].validData);
173 
174         if (bUseSingleConfig)
175             sts = SetSingleProperty<mfxU64>(loader, cfg, TestPropIntTab[i].name, TestPropIntTab[i].varType, data);
176         else
177             sts = SetSingleProperty<mfxU64>(loader, TestPropIntTab[i].name, TestPropIntTab[i].varType, data);
178 
179         EXPECT_EQ(sts, MFX_ERR_NONE);
180     }
181 
182     // expect to fail with one invalid property
183     mfxSession session = nullptr;
184     sts                = MFXCreateSession(loader, 0, &session);
185     EXPECT_EQ(sts, MFX_ERR_NOT_FOUND);
186 
187     // free internal resources
188     MFXUnload(loader);
189 
190     return sts;
191 }
192 
TestAllPropsPtrSingleInvalid(mfxU32 invalidIdx,bool bUseSingleConfig=false)193 static mfxStatus TestAllPropsPtrSingleInvalid(mfxU32 invalidIdx, bool bUseSingleConfig = false) {
194     mfxStatus sts    = MFX_ERR_NONE;
195     mfxLoader loader = nullptr;
196 
197     loader = MFXLoad();
198     EXPECT_FALSE(loader == nullptr);
199 
200     mfxConfig cfg = nullptr;
201     if (bUseSingleConfig) {
202         cfg = MFXCreateConfig(loader);
203         EXPECT_FALSE(cfg == nullptr);
204     }
205 
206     for (mfxU32 i = 0; i < NUM_TEST_PROP_PTR; i++) {
207         mfxHDL data = (i == invalidIdx ? (mfxHDL)TestPropPtrTab[i].invalidData : (mfxHDL)TestPropPtrTab[i].validData);
208 
209         if (bUseSingleConfig)
210             sts = SetSingleProperty<mfxHDL>(loader, cfg, TestPropPtrTab[i].name, TestPropPtrTab[i].varType, data);
211         else
212             sts = SetSingleProperty<mfxHDL>(loader, TestPropPtrTab[i].name, TestPropPtrTab[i].varType, data);
213 
214         EXPECT_EQ(sts, MFX_ERR_NONE);
215     }
216 
217     // expect to fail with one invalid property
218     mfxSession session = nullptr;
219     sts                = MFXCreateSession(loader, 0, &session);
220     EXPECT_EQ(sts, MFX_ERR_NOT_FOUND);
221 
222     // free internal resources
223     MFXUnload(loader);
224 
225     return sts;
226 }
227 
228 // end table formatting
229 // clang-format on
230 
231 // set all properties to valid (INT), except set one to invalid
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_00)232 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_00) {
233     SKIP_IF_DISP_SW_DISABLED();
234     TestAllPropsIntSingleInvalid(0);
235 }
236 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_01)237 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_01) {
238     SKIP_IF_DISP_SW_DISABLED();
239     TestAllPropsIntSingleInvalid(1);
240 }
241 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_02)242 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_02) {
243     SKIP_IF_DISP_SW_DISABLED();
244     TestAllPropsIntSingleInvalid(2);
245 }
246 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_03)247 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_03) {
248     SKIP_IF_DISP_SW_DISABLED();
249     TestAllPropsIntSingleInvalid(3);
250 }
251 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_04)252 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_04) {
253     SKIP_IF_DISP_SW_DISABLED();
254     TestAllPropsIntSingleInvalid(4);
255 }
256 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_05)257 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_05) {
258     SKIP_IF_DISP_SW_DISABLED();
259     TestAllPropsIntSingleInvalid(5);
260 }
261 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_06)262 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_06) {
263     SKIP_IF_DISP_SW_DISABLED();
264     TestAllPropsIntSingleInvalid(6);
265 }
266 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_07)267 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_07) {
268     SKIP_IF_DISP_SW_DISABLED();
269     TestAllPropsIntSingleInvalid(7);
270 }
271 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_08)272 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_08) {
273     SKIP_IF_DISP_SW_DISABLED();
274     TestAllPropsIntSingleInvalid(8);
275 }
276 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_09)277 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_09) {
278     SKIP_IF_DISP_SW_DISABLED();
279     TestAllPropsIntSingleInvalid(9);
280 }
281 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_10)282 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_10) {
283     SKIP_IF_DISP_SW_DISABLED();
284     TestAllPropsIntSingleInvalid(10);
285 }
286 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_11)287 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_11) {
288     SKIP_IF_DISP_SW_DISABLED();
289     TestAllPropsIntSingleInvalid(11);
290 }
291 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_12)292 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_12) {
293     SKIP_IF_DISP_SW_DISABLED();
294     TestAllPropsIntSingleInvalid(12);
295 }
296 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_13)297 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_13) {
298     SKIP_IF_DISP_SW_DISABLED();
299     TestAllPropsIntSingleInvalid(13);
300 }
301 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_14)302 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_14) {
303     SKIP_IF_DISP_SW_DISABLED();
304     TestAllPropsIntSingleInvalid(14);
305 }
306 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_15)307 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_15) {
308     SKIP_IF_DISP_SW_DISABLED();
309     TestAllPropsIntSingleInvalid(15);
310 }
311 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_16)312 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_16) {
313     SKIP_IF_DISP_SW_DISABLED();
314     TestAllPropsIntSingleInvalid(16);
315 }
316 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_17)317 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_17) {
318     SKIP_IF_DISP_SW_DISABLED();
319     TestAllPropsIntSingleInvalid(17);
320 }
321 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_18)322 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_18) {
323     SKIP_IF_DISP_SW_DISABLED();
324     TestAllPropsIntSingleInvalid(18);
325 }
326 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_19)327 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_19) {
328     SKIP_IF_DISP_SW_DISABLED();
329     TestAllPropsIntSingleInvalid(19);
330 }
331 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_20)332 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_20) {
333     SKIP_IF_DISP_SW_DISABLED();
334     TestAllPropsIntSingleInvalid(20);
335 }
336 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_21)337 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_21) {
338     SKIP_IF_DISP_SW_DISABLED();
339     TestAllPropsIntSingleInvalid(21);
340 }
341 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_22)342 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_22) {
343     SKIP_IF_DISP_SW_DISABLED();
344     TestAllPropsIntSingleInvalid(22);
345 }
346 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsInt_InvalidProp_23)347 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsInt_InvalidProp_23) {
348     SKIP_IF_DISP_SW_DISABLED();
349     TestAllPropsIntSingleInvalid(23);
350 }
351 
352 // set all properties to valid (PTR), except set one to invalid
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_00)353 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_00) {
354     SKIP_IF_DISP_SW_DISABLED();
355     TestAllPropsPtrSingleInvalid(0);
356 }
357 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_01)358 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_01) {
359     SKIP_IF_DISP_SW_DISABLED();
360     TestAllPropsPtrSingleInvalid(1);
361 }
362 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_02)363 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_02) {
364     SKIP_IF_DISP_SW_DISABLED();
365     TestAllPropsPtrSingleInvalid(2);
366 }
367 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_03)368 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_03) {
369     SKIP_IF_DISP_SW_DISABLED();
370     TestAllPropsPtrSingleInvalid(3);
371 }
372 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_04)373 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_04) {
374     SKIP_IF_DISP_SW_DISABLED();
375     TestAllPropsPtrSingleInvalid(4);
376 }
377 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_05)378 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_05) {
379     SKIP_IF_DISP_SW_DISABLED();
380     TestAllPropsPtrSingleInvalid(5);
381 }
382 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_06)383 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_06) {
384     SKIP_IF_DISP_SW_DISABLED();
385     TestAllPropsPtrSingleInvalid(6);
386 }
387 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_07)388 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_07) {
389     SKIP_IF_DISP_SW_DISABLED();
390     TestAllPropsPtrSingleInvalid(7);
391 }
392 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_08)393 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_08) {
394     SKIP_IF_DISP_SW_DISABLED();
395     TestAllPropsPtrSingleInvalid(8);
396 }
397 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_09)398 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_09) {
399     SKIP_IF_DISP_SW_DISABLED();
400     TestAllPropsPtrSingleInvalid(9);
401 }
402 
TEST(Dispatcher_SW_MultiProp,MultiConfig_AllPropsPtr_InvalidProp_10)403 TEST(Dispatcher_SW_MultiProp, MultiConfig_AllPropsPtr_InvalidProp_10) {
404     SKIP_IF_DISP_SW_DISABLED();
405     TestAllPropsPtrSingleInvalid(10);
406 }
407 
408 // repeat tests, but use same config object for all properties
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_00)409 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_00) {
410     SKIP_IF_DISP_SW_DISABLED();
411     TestAllPropsIntSingleInvalid(0, true);
412 }
413 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_01)414 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_01) {
415     SKIP_IF_DISP_SW_DISABLED();
416     TestAllPropsIntSingleInvalid(1, true);
417 }
418 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_02)419 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_02) {
420     SKIP_IF_DISP_SW_DISABLED();
421     TestAllPropsIntSingleInvalid(2, true);
422 }
423 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_03)424 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_03) {
425     SKIP_IF_DISP_SW_DISABLED();
426     TestAllPropsIntSingleInvalid(3, true);
427 }
428 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_04)429 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_04) {
430     SKIP_IF_DISP_SW_DISABLED();
431     TestAllPropsIntSingleInvalid(4, true);
432 }
433 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_05)434 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_05) {
435     SKIP_IF_DISP_SW_DISABLED();
436     TestAllPropsIntSingleInvalid(5, true);
437 }
438 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_06)439 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_06) {
440     SKIP_IF_DISP_SW_DISABLED();
441     TestAllPropsIntSingleInvalid(6, true);
442 }
443 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_07)444 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_07) {
445     SKIP_IF_DISP_SW_DISABLED();
446     TestAllPropsIntSingleInvalid(7, true);
447 }
448 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_08)449 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_08) {
450     SKIP_IF_DISP_SW_DISABLED();
451     TestAllPropsIntSingleInvalid(8, true);
452 }
453 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_09)454 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_09) {
455     SKIP_IF_DISP_SW_DISABLED();
456     TestAllPropsIntSingleInvalid(9, true);
457 }
458 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_10)459 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_10) {
460     SKIP_IF_DISP_SW_DISABLED();
461     TestAllPropsIntSingleInvalid(10, true);
462 }
463 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_11)464 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_11) {
465     SKIP_IF_DISP_SW_DISABLED();
466     TestAllPropsIntSingleInvalid(11, true);
467 }
468 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_12)469 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_12) {
470     SKIP_IF_DISP_SW_DISABLED();
471     TestAllPropsIntSingleInvalid(12, true);
472 }
473 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_13)474 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_13) {
475     SKIP_IF_DISP_SW_DISABLED();
476     TestAllPropsIntSingleInvalid(13, true);
477 }
478 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_14)479 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_14) {
480     SKIP_IF_DISP_SW_DISABLED();
481     TestAllPropsIntSingleInvalid(14, true);
482 }
483 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_15)484 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_15) {
485     SKIP_IF_DISP_SW_DISABLED();
486     TestAllPropsIntSingleInvalid(15, true);
487 }
488 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_16)489 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_16) {
490     SKIP_IF_DISP_SW_DISABLED();
491     TestAllPropsIntSingleInvalid(16, true);
492 }
493 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_17)494 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_17) {
495     SKIP_IF_DISP_SW_DISABLED();
496     TestAllPropsIntSingleInvalid(17, true);
497 }
498 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_18)499 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_18) {
500     SKIP_IF_DISP_SW_DISABLED();
501     TestAllPropsIntSingleInvalid(18, true);
502 }
503 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_19)504 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_19) {
505     SKIP_IF_DISP_SW_DISABLED();
506     TestAllPropsIntSingleInvalid(19, true);
507 }
508 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_20)509 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_20) {
510     SKIP_IF_DISP_SW_DISABLED();
511     TestAllPropsIntSingleInvalid(20, true);
512 }
513 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_21)514 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_21) {
515     SKIP_IF_DISP_SW_DISABLED();
516     TestAllPropsIntSingleInvalid(21, true);
517 }
518 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_22)519 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_22) {
520     SKIP_IF_DISP_SW_DISABLED();
521     TestAllPropsIntSingleInvalid(22, true);
522 }
523 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsInt_InvalidProp_23)524 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsInt_InvalidProp_23) {
525     SKIP_IF_DISP_SW_DISABLED();
526     TestAllPropsIntSingleInvalid(23, true);
527 }
528 
529 // set all properties to valid (PTR), except set one to invalid
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_00)530 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_00) {
531     SKIP_IF_DISP_SW_DISABLED();
532     TestAllPropsPtrSingleInvalid(0, true);
533 }
534 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_01)535 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_01) {
536     SKIP_IF_DISP_SW_DISABLED();
537     TestAllPropsPtrSingleInvalid(1, true);
538 }
539 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_02)540 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_02) {
541     SKIP_IF_DISP_SW_DISABLED();
542     TestAllPropsPtrSingleInvalid(2, true);
543 }
544 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_03)545 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_03) {
546     SKIP_IF_DISP_SW_DISABLED();
547     TestAllPropsPtrSingleInvalid(3, true);
548 }
549 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_04)550 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_04) {
551     SKIP_IF_DISP_SW_DISABLED();
552     TestAllPropsPtrSingleInvalid(4, true);
553 }
554 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_05)555 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_05) {
556     SKIP_IF_DISP_SW_DISABLED();
557     TestAllPropsPtrSingleInvalid(5, true);
558 }
559 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_06)560 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_06) {
561     SKIP_IF_DISP_SW_DISABLED();
562     TestAllPropsPtrSingleInvalid(6, true);
563 }
564 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_07)565 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_07) {
566     SKIP_IF_DISP_SW_DISABLED();
567     TestAllPropsPtrSingleInvalid(7, true);
568 }
569 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_08)570 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_08) {
571     SKIP_IF_DISP_SW_DISABLED();
572     TestAllPropsPtrSingleInvalid(8, true);
573 }
574 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_09)575 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_09) {
576     SKIP_IF_DISP_SW_DISABLED();
577     TestAllPropsPtrSingleInvalid(9, true);
578 }
579 
TEST(Dispatcher_SW_MultiProp,SingleConfig_AllPropsPtr_InvalidProp_10)580 TEST(Dispatcher_SW_MultiProp, SingleConfig_AllPropsPtr_InvalidProp_10) {
581     SKIP_IF_DISP_SW_DISABLED();
582     TestAllPropsPtrSingleInvalid(10, true);
583 }
584