2 // Copyright (c) 2018 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 ///////////////////////////////////////////////////////////////////////////////////////////////////
18 #include <gtest/gtest.h>
19 #include "api/CPP/memory.hpp"
20 #include <api/CPP/input_layout.hpp>
21 #include "api/CPP/select.hpp"
22 #include <api/CPP/topology.hpp>
23 #include <api/CPP/network.hpp>
24 #include <api/CPP/engine.hpp>
25 #include "test_utils/test_utils.h"
27 using namespace cldnn;
28 using namespace tests;
31 TEST(select_gpu_f32, select_basic) {
32 const auto& engine = get_test_engine();
34 auto input = memory::allocate(engine, { data_types::f32, format::yxfb, { 2, 2, 2, 2 } });
35 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb, { 2, 2, 2, 2 } });
36 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
39 topology.add(input_layout("input", input.get_layout()));
40 topology.add(input_layout("input2", input2.get_layout()));
41 topology.add(input_layout("mask", mask.get_layout()));
42 topology.add(cldnn::select("select", "input", "input2", "mask"));
52 0.5f, 2.5f, 0.5f, 2.5f,
54 15.f, 17.f, 8.f, 10.f,
55 -2.f, 6.5f, -0.5f, -2.5f });
61 1.f, 0.f, 1.f, 0.f });
63 network network(engine, topology);
65 network.set_input_data("input", input);
66 network.set_input_data("input2", input2);
67 network.set_input_data("mask", mask);
68 auto outputs = network.execute();
70 auto output = outputs.at("select").get_memory();
72 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
74 15.f, 0.5f, 8.f, 12.f,
75 4.f, 6.5f, 8.f, -2.5f };
77 auto output_ptr = output.pointer<float>();
79 for (int i = 0; i < 16; i++)
81 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
85 TEST(select_gpu_f32, select_basic_negative) {
86 const auto& engine = get_test_engine();
88 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
89 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
90 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
93 topology.add(input_layout("input", input.get_layout()));
94 topology.add(input_layout("input2", input2.get_layout()));
95 topology.add(input_layout("mask", mask.get_layout()));
96 topology.add(cldnn::select("select", "input", "input2", "mask"));
101 3.f, 0.5f, 7.f, 12.f,
106 0.5f, 2.5f, 0.5f, 2.5f,
108 15.f, 17.f, 8.f, 10.f,
109 -2.f, 6.5f, -0.5f, -2.5f });
112 -0.f, -0.f, -0.f, -0.f,
113 -1.f, -1.f, -1.f, -1.f,
114 -0.f, -1.f, -0.f, -1.f,
115 -1.f, -0.f, -1.f, -0.f });
117 network network(engine, topology);
119 network.set_input_data("input", input);
120 network.set_input_data("input2", input2);
121 network.set_input_data("mask", mask);
122 auto outputs = network.execute();
124 auto output = outputs.at("select").get_memory();
126 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
128 15.f, 0.5f, 8.f, 12.f,
129 4.f, 6.5f, 8.f, -2.5f };
131 auto output_ptr = output.pointer<float>();
133 for (int i = 0; i < 16; i++)
135 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
139 TEST(select_gpu_f32, select_basic_comma) {
140 const auto& engine = get_test_engine();
142 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
143 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
144 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
147 topology.add(input_layout("input", input.get_layout()));
148 topology.add(input_layout("input2", input2.get_layout()));
149 topology.add(input_layout("mask", mask.get_layout()));
150 topology.add(cldnn::select("select", "input", "input2", "mask"));
155 3.f, 0.5f, 7.f, 12.f,
160 0.5f, 2.5f, 0.5f, 2.5f,
162 15.f, 17.f, 8.f, 10.f,
163 -2.f, 6.5f, -0.5f, -2.5f });
167 0.1f, 0.3f, 0.5f, 0.7f,
168 -0.f, -0.1f, -0.f, -0.5f,
169 -0.7f, -0.f, -1.5f, -0.f });
171 network network(engine, topology);
173 network.set_input_data("input", input);
174 network.set_input_data("input2", input2);
175 network.set_input_data("mask", mask);
176 auto outputs = network.execute();
178 auto output = outputs.at("select").get_memory();
180 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
182 15.f, 0.5f, 8.f, 12.f,
183 4.f, 6.5f, 8.f, -2.5f };
185 auto output_ptr = output.pointer<float>();
187 for (int i = 0; i < 16; i++)
189 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
193 TEST(select_gpu_f32, select_basic_error_input_sizes) {
194 const auto& engine = get_test_engine();
196 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
197 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 3, 4, 5, 6 } });
198 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
201 topology.add(input_layout("input", input.get_layout()));
202 topology.add(input_layout("input2", input2.get_layout()));
203 topology.add(input_layout("mask", mask.get_layout()));
204 topology.add(cldnn::select("select", "input", "input2", "mask"));
206 EXPECT_ANY_THROW(network(engine, topology));
209 TEST(select_gpu_f32, select_basic_error_mask_sizes) {
210 const auto& engine = get_test_engine();
212 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
213 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
214 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 3, 4, 5, 6 } });
217 topology.add(input_layout("input", input.get_layout()));
218 topology.add(input_layout("input2", input2.get_layout()));
219 topology.add(input_layout("mask", mask.get_layout()));
220 topology.add(cldnn::select("select", "input", "input2", "mask"));
222 EXPECT_ANY_THROW(network(engine, topology));
225 TEST(select_gpu_f32, select_basic_error_input_types) {
226 const auto& engine = get_test_engine();
228 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
229 auto input2 = memory::allocate(engine, { data_types::i8, format::yxfb,{ 2, 2, 2, 2 } });
230 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
233 topology.add(input_layout("input", input.get_layout()));
234 topology.add(input_layout("input2", input2.get_layout()));
235 topology.add(input_layout("mask", mask.get_layout()));
236 topology.add(cldnn::select("select", "input", "input2", "mask"));
237 EXPECT_ANY_THROW(network(engine, topology));
240 TEST(select_gpu_f32, select_basic_error_input_formats) {
241 const auto& engine = get_test_engine();
243 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
244 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
245 auto mask = memory::allocate(engine, { data_types::f32, format::bfyx,{ 2, 2, 2, 2 } });
248 topology.add(input_layout("input", input.get_layout()));
249 topology.add(input_layout("input2", input2.get_layout()));
250 topology.add(input_layout("mask", mask.get_layout()));
251 topology.add(cldnn::select("select", "input", "input2", "mask"));
253 EXPECT_ANY_THROW(network(engine, topology));
256 TEST(select_gpu_f32, select_basic_byxf) {
257 const auto& engine = get_test_engine();
259 auto input = memory::allocate(engine, { data_types::f32, format::byxf,{ 2, 2, 2, 2 } });
260 auto input2 = memory::allocate(engine, { data_types::f32, format::byxf,{ 2, 2, 2, 2 } });
261 auto mask = memory::allocate(engine, { data_types::f32, format::byxf,{ 2, 2, 2, 2 } });
264 topology.add(input_layout("input", input.get_layout()));
265 topology.add(input_layout("input2", input2.get_layout()));
266 topology.add(input_layout("mask", mask.get_layout()));
267 topology.add(cldnn::select("select", "input", "input2", "mask"));
272 3.f, 0.5f, 7.f, 12.f,
277 0.5f, 2.5f, 0.5f, 2.5f,
279 15.f, 17.f, 8.f, 10.f,
280 -2.f, 6.5f, -0.5f, -2.5f });
286 1.f, 0.f, 1.f, 0.f });
288 network network(engine, topology);
290 network.set_input_data("input", input);
291 network.set_input_data("input2", input2);
292 network.set_input_data("mask", mask);
293 auto outputs = network.execute();
295 auto output = outputs.at("select").get_memory();
297 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
299 15.f, 0.5f, 8.f, 12.f,
300 4.f, 6.5f, 8.f, -2.5f };
302 auto output_ptr = output.pointer<float>();
304 for (int i = 0; i < 16; i++)
306 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
310 TEST(select_gpu_f32, select_basic_mask_f16) {
311 const auto& engine = get_test_engine();
313 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
314 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
315 auto mask = memory::allocate(engine, { data_types::f16, format::yxfb,{ 2, 2, 2, 2 } });
318 topology.add(input_layout("input", input.get_layout()));
319 topology.add(input_layout("input2", input2.get_layout()));
320 topology.add(input_layout("mask", mask.get_layout()));
321 topology.add(cldnn::select("select", "input", "input2", "mask"));
326 3.f, 0.5f, 7.f, 12.f,
331 0.5f, 2.5f, 0.5f, 2.5f,
333 15.f, 17.f, 8.f, 10.f,
334 -2.f, 6.5f, -0.5f, -2.5f });
336 set_values<uint16_t>(mask, {
342 network network(engine, topology);
344 network.set_input_data("input", input);
345 network.set_input_data("input2", input2);
346 network.set_input_data("mask", mask);
347 auto outputs = network.execute();
349 auto output = outputs.at("select").get_memory();
351 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
353 15.f, 0.5f, 8.f, 12.f,
354 4.f, 6.5f, 8.f, -2.5f };
356 auto output_ptr = output.pointer<float>();
358 for (int i = 0; i < 16; i++)
360 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
364 TEST(select_gpu_f32, select_basic_mask_i8) {
365 const auto& engine = get_test_engine();
367 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
368 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
369 auto mask = memory::allocate(engine, { data_types::i8, format::yxfb,{ 2, 2, 2, 2 } });
372 topology.add(input_layout("input", input.get_layout()));
373 topology.add(input_layout("input2", input2.get_layout()));
374 topology.add(input_layout("mask", mask.get_layout()));
375 topology.add(cldnn::select("select", "input", "input2", "mask"));
380 3.f, 0.5f, 7.f, 12.f,
385 0.5f, 2.5f, 0.5f, 2.5f,
387 15.f, 17.f, 8.f, 10.f,
388 -2.f, 6.5f, -0.5f, -2.5f });
390 set_values<char>(mask, {
396 network network(engine, topology);
398 network.set_input_data("input", input);
399 network.set_input_data("input2", input2);
400 network.set_input_data("mask", mask);
401 auto outputs = network.execute();
403 auto output = outputs.at("select").get_memory();
405 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
407 15.f, 0.5f, 8.f, 12.f,
408 4.f, 6.5f, 8.f, -2.5f };
410 auto output_ptr = output.pointer<float>();
412 for (int i = 0; i < 16; i++)
414 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
418 TEST(select_gpu_f32, select_basic_mask_u8) {
419 const auto& engine = get_test_engine();
421 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
422 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 2, 2, 2, 2 } });
423 auto mask = memory::allocate(engine, { data_types::u8, format::yxfb,{ 2, 2, 2, 2 } });
426 topology.add(input_layout("input", input.get_layout()));
427 topology.add(input_layout("input2", input2.get_layout()));
428 topology.add(input_layout("mask", mask.get_layout()));
429 topology.add(cldnn::select("select", "input", "input2", "mask"));
434 3.f, 0.5f, 7.f, 12.f,
439 0.5f, 2.5f, 0.5f, 2.5f,
441 15.f, 17.f, 8.f, 10.f,
442 -2.f, 6.5f, -0.5f, -2.5f });
444 set_values<unsigned char>(mask, {
450 network network(engine, topology);
452 network.set_input_data("input", input);
453 network.set_input_data("input2", input2);
454 network.set_input_data("mask", mask);
455 auto outputs = network.execute();
457 auto output = outputs.at("select").get_memory();
459 float answers[16] = { 0.5f, 2.5f, 0.5f, 2.5f,
461 15.f, 0.5f, 8.f, 12.f,
462 4.f, 6.5f, 8.f, -2.5f };
464 auto output_ptr = output.pointer<float>();
466 for (int i = 0; i < 16; i++)
468 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
472 TEST(select_gpu_f32, select_basic_1x1x2x2) {
473 const auto& engine = get_test_engine();
475 auto input = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
476 auto input2 = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
477 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
480 topology.add(input_layout("input", input.get_layout()));
481 topology.add(input_layout("input2", input2.get_layout()));
482 topology.add(input_layout("mask", mask.get_layout()));
483 topology.add(cldnn::select("select", "input", "input2", "mask"));
497 network network(engine, topology);
499 network.set_input_data("input", input);
500 network.set_input_data("input2", input2);
501 network.set_input_data("mask", mask);
502 auto outputs = network.execute();
504 auto output = outputs.at("select").get_memory();
510 auto output_ptr = output.pointer<float>();
512 for (int i = 0; i < 4; i++)
514 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
518 TEST(select_gpu_f32, select_basic_bfyx_1x1x2x2) {
519 const auto& engine = get_test_engine();
521 auto input = memory::allocate(engine, { data_types::f32, format::bfyx,{ 1, 1, 2, 2 } });
522 auto input2 = memory::allocate(engine, { data_types::f32, format::bfyx,{ 1, 1, 2, 2 } });
523 auto mask = memory::allocate(engine, { data_types::f32, format::bfyx,{ 1, 1, 2, 2 } });
526 topology.add(input_layout("input", input.get_layout()));
527 topology.add(input_layout("input2", input2.get_layout()));
528 topology.add(input_layout("mask", mask.get_layout()));
529 topology.add(cldnn::select("select", "input", "input2", "mask"));
546 network network(engine, topology);
548 network.set_input_data("input", input);
549 network.set_input_data("input2", input2);
550 network.set_input_data("mask", mask);
551 auto outputs = network.execute();
553 auto output = outputs.at("select").get_memory();
560 auto output_ptr = output.pointer<float>();
562 for (int i = 0; i < 4; i++)
564 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
568 TEST(select_gpu_f32, select_basic_byxf_1x1x2x2) {
569 const auto& engine = get_test_engine();
571 auto input = memory::allocate(engine, { data_types::f32, format::byxf,{ 1, 1, 2, 2 } });
572 auto input2 = memory::allocate(engine, { data_types::f32, format::byxf,{ 1, 1, 2, 2 } });
573 auto mask = memory::allocate(engine, { data_types::f32, format::byxf,{ 1, 1, 2, 2 } });
576 topology.add(input_layout("input", input.get_layout()));
577 topology.add(input_layout("input2", input2.get_layout()));
578 topology.add(input_layout("mask", mask.get_layout()));
579 topology.add(cldnn::select("select", "input", "input2", "mask"));
596 network network(engine, topology);
598 network.set_input_data("input", input);
599 network.set_input_data("input2", input2);
600 network.set_input_data("mask", mask);
601 auto outputs = network.execute();
603 auto output = outputs.at("select").get_memory();
610 auto output_ptr = output.pointer<float>();
612 for (int i = 0; i < 4; i++)
614 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
619 TEST(select_gpu_f16, select_basic_1x1x2x2) {
620 const auto& engine = get_test_engine();
622 auto input = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
623 auto input2 = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
624 auto mask = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
627 topology.add(input_layout("input", input.get_layout()));
628 topology.add(input_layout("input2", input2.get_layout()));
629 topology.add(input_layout("mask", mask.get_layout()));
630 topology.add(cldnn::select("select", "input", "input2", "mask"));
632 set_values<uint16_t>(input, {
637 set_values<uint16_t>(input2, {
642 set_values<uint16_t>(mask, {
647 network network(engine, topology);
649 network.set_input_data("input", input);
650 network.set_input_data("input2", input2);
651 network.set_input_data("mask", mask);
652 auto outputs = network.execute();
654 auto output = outputs.at("select").get_memory();
656 uint16_t answers[4] = {
661 auto output_ptr = output.pointer<uint16_t>();
663 for (int i = 0; i < 4; i++)
665 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
669 TEST(select_gpu_f16, select_basic_mask_f32_1x1x2x2) {
670 const auto& engine = get_test_engine();
672 auto input = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
673 auto input2 = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
674 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
677 topology.add(input_layout("input", input.get_layout()));
678 topology.add(input_layout("input2", input2.get_layout()));
679 topology.add(input_layout("mask", mask.get_layout()));
680 topology.add(cldnn::select("select", "input", "input2", "mask"));
682 set_values<uint16_t>(input, {
687 set_values<uint16_t>(input2, {
692 set_values<float>(mask, {
697 network network(engine, topology);
699 network.set_input_data("input", input);
700 network.set_input_data("input2", input2);
701 network.set_input_data("mask", mask);
702 auto outputs = network.execute();
704 auto output = outputs.at("select").get_memory();
706 uint16_t answers[4] = {
711 auto output_ptr = output.pointer<uint16_t>();
713 for (int i = 0; i < 4; i++)
715 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
719 TEST(select_gpu_f16, select_basic_mask_i8_1x1x2x2) {
720 const auto& engine = get_test_engine();
722 auto input = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
723 auto input2 = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
724 auto mask = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
727 topology.add(input_layout("input", input.get_layout()));
728 topology.add(input_layout("input2", input2.get_layout()));
729 topology.add(input_layout("mask", mask.get_layout()));
730 topology.add(cldnn::select("select", "input", "input2", "mask"));
732 set_values<uint16_t>(input, {
737 set_values<uint16_t>(input2, {
742 set_values<char>(mask, {
747 network network(engine, topology);
749 network.set_input_data("input", input);
750 network.set_input_data("input2", input2);
751 network.set_input_data("mask", mask);
752 auto outputs = network.execute();
754 auto output = outputs.at("select").get_memory();
756 uint16_t answers[4] = {
761 auto output_ptr = output.pointer<uint16_t>();
763 for (int i = 0; i < 4; i++)
765 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
769 TEST(select_gpu_f16, select_basic_mask_u8_1x1x2x2) {
770 const auto& engine = get_test_engine();
772 auto input = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
773 auto input2 = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
774 auto mask = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
777 topology.add(input_layout("input", input.get_layout()));
778 topology.add(input_layout("input2", input2.get_layout()));
779 topology.add(input_layout("mask", mask.get_layout()));
780 topology.add(cldnn::select("select", "input", "input2", "mask"));
782 set_values<uint16_t>(input, {
787 set_values<uint16_t>(input2, {
792 set_values<unsigned char>(mask, {
797 network network(engine, topology);
799 network.set_input_data("input", input);
800 network.set_input_data("input2", input2);
801 network.set_input_data("mask", mask);
802 auto outputs = network.execute();
804 auto output = outputs.at("select").get_memory();
806 uint16_t answers[4] = {
811 auto output_ptr = output.pointer<uint16_t>();
813 for (int i = 0; i < 4; i++)
815 EXPECT_TRUE(are_equal(answers[i], output_ptr[i]));
820 TEST(select_gpu_i8, select_basic_1x1x2x2) {
821 const auto& engine = get_test_engine();
823 auto input = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
824 auto input2 = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
825 auto mask = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
828 topology.add(input_layout("input", input.get_layout()));
829 topology.add(input_layout("input2", input2.get_layout()));
830 topology.add(input_layout("mask", mask.get_layout()));
831 topology.add(cldnn::select("select", "input", "input2", "mask"));
833 set_values<char>(input, {
838 set_values<char>(input2, {
843 set_values<char>(mask, {
848 network network(engine, topology);
850 network.set_input_data("input", input);
851 network.set_input_data("input2", input2);
852 network.set_input_data("mask", mask);
853 auto outputs = network.execute();
855 auto output = outputs.at("select").get_memory();
862 auto output_ptr = output.pointer<char>();
864 for (int i = 0; i < 4; i++)
866 EXPECT_EQ(answers[i], output_ptr[i]);
870 TEST(select_gpu_i8, select_basic_mask_f32_1x1x2x2) {
871 const auto& engine = get_test_engine();
873 auto input = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
874 auto input2 = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
875 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
878 topology.add(input_layout("input", input.get_layout()));
879 topology.add(input_layout("input2", input2.get_layout()));
880 topology.add(input_layout("mask", mask.get_layout()));
881 topology.add(cldnn::select("select", "input", "input2", "mask"));
883 set_values<char>(input, {
888 set_values<char>(input2, {
893 set_values<float>(mask, {
898 network network(engine, topology);
900 network.set_input_data("input", input);
901 network.set_input_data("input2", input2);
902 network.set_input_data("mask", mask);
903 auto outputs = network.execute();
905 auto output = outputs.at("select").get_memory();
912 auto output_ptr = output.pointer<char>();
914 for (int i = 0; i < 4; i++)
916 EXPECT_EQ(answers[i], output_ptr[i]);
920 TEST(select_gpu_i8, select_basic_mask_f16_1x1x2x2) {
921 const auto& engine = get_test_engine();
923 auto input = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
924 auto input2 = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
925 auto mask = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
928 topology.add(input_layout("input", input.get_layout()));
929 topology.add(input_layout("input2", input2.get_layout()));
930 topology.add(input_layout("mask", mask.get_layout()));
931 topology.add(cldnn::select("select", "input", "input2", "mask"));
933 set_values<char>(input, {
938 set_values<char>(input2, {
943 set_values<uint16_t>(mask, {
948 network network(engine, topology);
950 network.set_input_data("input", input);
951 network.set_input_data("input2", input2);
952 network.set_input_data("mask", mask);
953 auto outputs = network.execute();
955 auto output = outputs.at("select").get_memory();
962 auto output_ptr = output.pointer<char>();
964 for (int i = 0; i < 4; i++)
966 EXPECT_EQ(answers[i], output_ptr[i]);
970 TEST(select_gpu_i8, select_basic_mask_u8_1x1x2x2) {
971 const auto& engine = get_test_engine();
973 auto input = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
974 auto input2 = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
975 auto mask = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
978 topology.add(input_layout("input", input.get_layout()));
979 topology.add(input_layout("input2", input2.get_layout()));
980 topology.add(input_layout("mask", mask.get_layout()));
981 topology.add(cldnn::select("select", "input", "input2", "mask"));
983 set_values<char>(input, {
988 set_values<char>(input2, {
993 set_values<unsigned char>(mask, {
998 network network(engine, topology);
1000 network.set_input_data("input", input);
1001 network.set_input_data("input2", input2);
1002 network.set_input_data("mask", mask);
1003 auto outputs = network.execute();
1005 auto output = outputs.at("select").get_memory();
1012 auto output_ptr = output.pointer<char>();
1014 for (int i = 0; i < 4; i++)
1016 EXPECT_EQ(answers[i], output_ptr[i]);
1021 TEST(select_gpu_u8, select_basic_1x1x2x2) {
1022 const auto& engine = get_test_engine();
1024 auto input = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1025 auto input2 = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1026 auto mask = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1029 topology.add(input_layout("input", input.get_layout()));
1030 topology.add(input_layout("input2", input2.get_layout()));
1031 topology.add(input_layout("mask", mask.get_layout()));
1032 topology.add(cldnn::select("select", "input", "input2", "mask"));
1034 set_values<unsigned char>(input, {
1039 set_values<unsigned char>(input2, {
1044 set_values<unsigned char>(mask, {
1049 network network(engine, topology);
1051 network.set_input_data("input", input);
1052 network.set_input_data("input2", input2);
1053 network.set_input_data("mask", mask);
1054 auto outputs = network.execute();
1056 auto output = outputs.at("select").get_memory();
1058 unsigned char answers[4] = {
1063 auto output_ptr = output.pointer<unsigned char>();
1065 for (int i = 0; i < 4; i++)
1067 EXPECT_EQ(answers[i], output_ptr[i]);
1071 TEST(select_gpu_u8, select_basic_mask_f32_1x1x2x2) {
1072 const auto& engine = get_test_engine();
1074 auto input = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1075 auto input2 = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1076 auto mask = memory::allocate(engine, { data_types::f32, format::yxfb,{ 1, 1, 2, 2 } });
1079 topology.add(input_layout("input", input.get_layout()));
1080 topology.add(input_layout("input2", input2.get_layout()));
1081 topology.add(input_layout("mask", mask.get_layout()));
1082 topology.add(cldnn::select("select", "input", "input2", "mask"));
1084 set_values<unsigned char>(input, {
1089 set_values<unsigned char>(input2, {
1094 set_values<float>(mask, {
1099 network network(engine, topology);
1101 network.set_input_data("input", input);
1102 network.set_input_data("input2", input2);
1103 network.set_input_data("mask", mask);
1104 auto outputs = network.execute();
1106 auto output = outputs.at("select").get_memory();
1113 auto output_ptr = output.pointer<unsigned char>();
1115 for (int i = 0; i < 4; i++)
1117 EXPECT_EQ(answers[i], output_ptr[i]);
1121 TEST(select_gpu_u8, select_basic_mask_f16_1x1x2x2) {
1122 const auto& engine = get_test_engine();
1124 auto input = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1125 auto input2 = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1126 auto mask = memory::allocate(engine, { data_types::f16, format::yxfb,{ 1, 1, 2, 2 } });
1129 topology.add(input_layout("input", input.get_layout()));
1130 topology.add(input_layout("input2", input2.get_layout()));
1131 topology.add(input_layout("mask", mask.get_layout()));
1132 topology.add(cldnn::select("select", "input", "input2", "mask"));
1134 set_values<unsigned char>(input, {
1139 set_values<unsigned char>(input2, {
1144 set_values<uint16_t>(mask, {
1149 network network(engine, topology);
1151 network.set_input_data("input", input);
1152 network.set_input_data("input2", input2);
1153 network.set_input_data("mask", mask);
1154 auto outputs = network.execute();
1156 auto output = outputs.at("select").get_memory();
1158 unsigned char answers[4] = {
1163 auto output_ptr = output.pointer<unsigned char>();
1165 for (int i = 0; i < 4; i++)
1167 EXPECT_EQ(answers[i], output_ptr[i]);
1171 TEST(select_gpu_u8, select_basic_mask_i8_1x1x2x2) {
1172 const auto& engine = get_test_engine();
1174 auto input = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1175 auto input2 = memory::allocate(engine, { data_types::u8, format::yxfb,{ 1, 1, 2, 2 } });
1176 auto mask = memory::allocate(engine, { data_types::i8, format::yxfb,{ 1, 1, 2, 2 } });
1179 topology.add(input_layout("input", input.get_layout()));
1180 topology.add(input_layout("input2", input2.get_layout()));
1181 topology.add(input_layout("mask", mask.get_layout()));
1182 topology.add(cldnn::select("select", "input", "input2", "mask"));
1184 set_values<unsigned char>(input, {
1189 set_values<unsigned char>(input2, {
1194 set_values<char>(mask, {
1199 network network(engine, topology);
1201 network.set_input_data("input", input);
1202 network.set_input_data("input2", input2);
1203 network.set_input_data("mask", mask);
1204 auto outputs = network.execute();
1206 auto output = outputs.at("select").get_memory();
1208 unsigned char answers[4] = {
1213 auto output_ptr = output.pointer<unsigned char>();
1215 for (int i = 0; i < 4; i++)
1217 EXPECT_EQ(answers[i], output_ptr[i]);