Imported Upstream version 1.25.0
[platform/core/ml/nnfw.git] / compiler / luci-interpreter / src / kernels / Select.test.cpp
1 /*
2  * Copyright (c) 2023 Samsung Electronics Co., Ltd. All Rights Reserved
3  * Copyright 2018 The TensorFlow Authors. All Rights Reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *    http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include "kernels/Select.h"
19 #include "kernels/TestUtils.h"
20
21 #include "luci_interpreter/TestMemoryManager.h"
22
23 namespace luci_interpreter
24 {
25 namespace kernels
26 {
27 namespace
28 {
29
30 using namespace testing;
31
32 class SelectTest : public ::testing::Test
33 {
34 protected:
35   void SetUp() override { _memory_manager = std::make_unique<TestMemoryManager>(); }
36
37   std::unique_ptr<IMemoryManager> _memory_manager;
38 };
39
40 std::vector<unsigned char> c_data{
41   1, 1, 1, // Row 1
42   0, 0, 0, // Row 2
43 };
44
45 std::vector<float> t_data{
46   0.5, 0.7, 0.9, // Row 1
47   1,   0,   -1,  // Row 2
48 };
49
50 std::vector<float> e_data{
51   0.9, 0.7, 0.5, // Row 1
52   -1,  0,   1,   // Row 2
53 };
54
55 std::vector<float> ref_output_data{
56   0.5, 0.7, 0.9, // Row 1
57   -1,  0,   1,   // Row 2
58 };
59
60 TEST_F(SelectTest, FloatSimple)
61 {
62   Tensor c_tensor = makeInputTensor<DataType::BOOL>({2, 3}, c_data, _memory_manager.get());
63   Tensor t_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, t_data, _memory_manager.get());
64   Tensor e_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, e_data, _memory_manager.get());
65   Tensor output_tensor = makeOutputTensor(DataType::FLOAT32);
66
67   Select kernel(&c_tensor, &t_tensor, &e_tensor, &output_tensor);
68   kernel.configure();
69   _memory_manager->allocate_memory(output_tensor);
70   kernel.execute();
71
72   EXPECT_THAT(extractTensorData<float>(output_tensor),
73               ::testing::ElementsAreArray(ref_output_data));
74   EXPECT_THAT(extractTensorShape(output_tensor), ::testing::ElementsAreArray({2, 3}));
75 }
76
77 TEST_F(SelectTest, Invalid_C_Type_NEG)
78 {
79   std::vector<float> i_c_data{
80     1, 1, 1, // Row 1
81     0, 0, 0, // Row 2
82   };
83
84   Tensor c_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, i_c_data, _memory_manager.get());
85   Tensor t_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, t_data, _memory_manager.get());
86   Tensor e_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, e_data, _memory_manager.get());
87   Tensor output_tensor = makeOutputTensor(DataType::FLOAT32);
88
89   Select kernel(&c_tensor, &t_tensor, &e_tensor, &output_tensor);
90   EXPECT_ANY_THROW(kernel.configure());
91 }
92
93 TEST_F(SelectTest, Invalid_O_Type_NEG)
94 {
95   Tensor c_tensor = makeInputTensor<DataType::BOOL>({2, 3}, c_data, _memory_manager.get());
96   Tensor t_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, t_data, _memory_manager.get());
97   Tensor e_tensor = makeInputTensor<DataType::FLOAT32>({2, 3}, e_data, _memory_manager.get());
98   Tensor output_tensor = makeOutputTensor(DataType::BOOL);
99
100   Select kernel(&c_tensor, &t_tensor, &e_tensor, &output_tensor);
101   EXPECT_ANY_THROW(kernel.configure());
102 }
103
104 } // namespace
105 } // namespace kernels
106 } // namespace luci_interpreter