@@ -13,7 +13,7 @@ template <typename T>
13
13
class TensorOpTest : public ::testing::Test {
14
14
};
15
15
16
- using TensorOpTestTypes = ::testing::Types<float , MLFloat16>;
16
+ using TensorOpTestTypes = ::testing::Types<float , MLFloat16, uint8_t >;
17
17
TYPED_TEST_SUITE (TensorOpTest, TensorOpTestTypes);
18
18
19
19
TEST (TensorOpTest, SpaceToDepthTest_1) {
@@ -224,6 +224,7 @@ TEST(TensorOpTest, DepthToSpaceTest_1_double) {
224
224
test.AddOutput <double >(" output" , {N, C / (blocksize * blocksize), H * blocksize, W * blocksize}, result);
225
225
test.Run ();
226
226
}
227
+
227
228
TEST (TensorOpTest, DepthToSpaceTest_2) {
228
229
OpTester test (" DepthToSpace" , 7 ); // create an opset 7 model
229
230
constexpr int64_t blocksize = 2 ;
@@ -308,14 +309,24 @@ TYPED_TEST(TensorOpTest, DepthToSpaceTest_3) {
308
309
if constexpr (std::is_same<TypeParam, float >::value) {
309
310
test.AddInput <float >(" input" , {N, C, H, W}, X);
310
311
test.AddOutput <float >(" output" , {2 , 3 , 6 , 4 }, result);
311
- } else {
312
+ } else if constexpr (std::is_same<TypeParam, MLFloat16>::value) {
312
313
std::vector<TypeParam> X_fp16 (X.size ());
313
314
std::vector<TypeParam> result_fp16 (result.size ());
314
- ConvertFloatToMLFloat16 (result.data (), result_fp16.data (), result.size ());
315
315
ConvertFloatToMLFloat16 (X.data (), X_fp16.data (), X.size ());
316
- test. AddOutput <TypeParam>( " output " , { 2 , 3 , 6 , 4 }, result_fp16 );
316
+ ConvertFloatToMLFloat16 (result. data (), result_fp16. data (), result. size () );
317
317
test.AddInput <TypeParam>(" input" , {N, C, H, W}, X_fp16);
318
+ test.AddOutput <TypeParam>(" output" , {2 , 3 , 6 , 4 }, result_fp16);
319
+ } else if constexpr (std::is_same<TypeParam, uint8_t >::value) {
320
+ std::vector<uint8_t > X_u8 (X.size ());
321
+ std::vector<uint8_t > result_u8 (result.size ());
322
+ ConvertFloatToUint8_t (X.data (), X_u8.data (), X.size ());
323
+ ConvertFloatToUint8_t (result.data (), result_u8.data (), result.size ());
324
+ test.AddInput <uint8_t >(" input" , {N, C, H, W}, X_u8);
325
+ test.AddOutput <uint8_t >(" output" , {2 , 3 , 6 , 4 }, result_u8);
326
+ } else {
327
+ ORT_THROW (" Type not supported" );
318
328
}
329
+
319
330
// TODO: Test is flaky on QNN EP (CPU backend).
320
331
// Re-enable when the QnnCPUBackendTests.DISABLED_SpaceToDepth_Flaky test is fixed.
321
332
test.Run (OpTester::ExpectResult::kExpectSuccess , " " , {kQnnExecutionProvider });
@@ -363,13 +374,22 @@ TYPED_TEST(TensorOpTest, DepthToSpaceTest_4) {
363
374
if constexpr (std::is_same<TypeParam, float >::value) {
364
375
test.AddInput <float >(" input" , {N, C, H, W}, X);
365
376
test.AddOutput <float >(" output" , {2 , 3 , 6 , 4 }, result);
366
- } else {
377
+ } else if constexpr (std::is_same<TypeParam, MLFloat16>::value) {
367
378
std::vector<TypeParam> X_fp16 (X.size ());
368
379
std::vector<TypeParam> result_fp16 (result.size ());
369
380
ConvertFloatToMLFloat16 (X.data (), X_fp16.data (), X.size ());
370
381
ConvertFloatToMLFloat16 (result.data (), result_fp16.data (), result.size ());
371
382
test.AddInput <TypeParam>(" input" , {N, C, H, W}, X_fp16);
372
383
test.AddOutput <TypeParam>(" output" , {2 , 3 , 6 , 4 }, result_fp16);
384
+ } else if constexpr (std::is_same<TypeParam, uint8_t >::value) {
385
+ std::vector<uint8_t > X_u8 (X.size ());
386
+ std::vector<uint8_t > result_u8 (result.size ());
387
+ ConvertFloatToUint8_t (X.data (), X_u8.data (), X.size ());
388
+ ConvertFloatToUint8_t (result.data (), result_u8.data (), result.size ());
389
+ test.AddInput <uint8_t >(" input" , {N, C, H, W}, X_u8);
390
+ test.AddOutput <uint8_t >(" output" , {2 , 3 , 6 , 4 }, result_u8);
391
+ } else {
392
+ ORT_THROW (" Type not supported" );
373
393
}
374
394
375
395
// TODO: Test is flaky on QNN EP (CPU backend).
@@ -401,14 +421,24 @@ TYPED_TEST(TensorOpTest, DepthToSpaceTest_5) {
401
421
if constexpr (std::is_same<TypeParam, float >::value) {
402
422
test.AddInput <float >(" input" , {N, C, H, W}, X);
403
423
test.AddOutput <float >(" output" , {1 , 1 , 4 , 6 }, result);
404
- } else {
424
+ } else if constexpr (std::is_same<TypeParam, MLFloat16>::value) {
405
425
std::vector<TypeParam> X_fp16 (X.size ());
406
426
std::vector<TypeParam> result_fp16 (result.size ());
407
427
ConvertFloatToMLFloat16 (X.data (), X_fp16.data (), X.size ());
408
428
ConvertFloatToMLFloat16 (result.data (), result_fp16.data (), result.size ());
409
429
test.AddInput <TypeParam>(" input" , {N, C, H, W}, X_fp16);
410
430
test.AddOutput <TypeParam>(" output" , {1 , 1 , 4 , 6 }, result_fp16);
431
+ } else if constexpr (std::is_same<TypeParam, uint8_t >::value) {
432
+ std::vector<uint8_t > X_u8 (X.size ());
433
+ std::vector<uint8_t > result_u8 (result.size ());
434
+ ConvertFloatToUint8_t (X.data (), X_u8.data (), X.size ());
435
+ ConvertFloatToUint8_t (result.data (), result_u8.data (), result.size ());
436
+ test.AddInput <uint8_t >(" input" , {N, C, H, W}, X_u8);
437
+ test.AddOutput <uint8_t >(" output" , {1 , 1 , 4 , 6 }, result_u8);
438
+ } else {
439
+ ORT_THROW (" Type not supported" );
411
440
}
441
+
412
442
// TODO: Test is flaky on QNN EP (CPU backend).
413
443
// Re-enable when the QnnCPUBackendTests.DISABLED_SpaceToDepth_Flaky2 test is fixed.
414
444
test.Run (OpTester::ExpectResult::kExpectSuccess , " " , {kQnnExecutionProvider });
0 commit comments