xref: /aosp_15_r20/external/ComputeLibrary/tests/validation/CL/Logical.cpp (revision c217d954acce2dbc11938adb493fc0abd69584f3)
1*c217d954SCole Faust /*
2*c217d954SCole Faust  * Copyright (c) 2020 Arm Limited.
3*c217d954SCole Faust  *
4*c217d954SCole Faust  * SPDX-License-Identifier: MIT
5*c217d954SCole Faust  *
6*c217d954SCole Faust  * Permission is hereby granted, free of charge, to any person obtaining a copy
7*c217d954SCole Faust  * of this software and associated documentation files (the "Software"), to
8*c217d954SCole Faust  * deal in the Software without restriction, including without limitation the
9*c217d954SCole Faust  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*c217d954SCole Faust  * sell copies of the Software, and to permit persons to whom the Software is
11*c217d954SCole Faust  * furnished to do so, subject to the following conditions:
12*c217d954SCole Faust  *
13*c217d954SCole Faust  * The above copyright notice and this permission notice shall be included in all
14*c217d954SCole Faust  * copies or substantial portions of the Software.
15*c217d954SCole Faust  *
16*c217d954SCole Faust  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*c217d954SCole Faust  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*c217d954SCole Faust  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*c217d954SCole Faust  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*c217d954SCole Faust  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*c217d954SCole Faust  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*c217d954SCole Faust  * SOFTWARE.
23*c217d954SCole Faust  */
24*c217d954SCole Faust #include "arm_compute/core/Types.h"
25*c217d954SCole Faust #include "arm_compute/runtime/CL/functions/CLLogicalAnd.h"
26*c217d954SCole Faust #include "arm_compute/runtime/CL/functions/CLLogicalNot.h"
27*c217d954SCole Faust #include "arm_compute/runtime/CL/functions/CLLogicalOr.h"
28*c217d954SCole Faust #include "arm_compute/runtime/Tensor.h"
29*c217d954SCole Faust #include "arm_compute/runtime/TensorAllocator.h"
30*c217d954SCole Faust #include "tests/CL/CLAccessor.h"
31*c217d954SCole Faust #include "tests/PaddingCalculator.h"
32*c217d954SCole Faust #include "tests/datasets/ShapeDatasets.h"
33*c217d954SCole Faust #include "tests/framework/Asserts.h"
34*c217d954SCole Faust #include "tests/framework/Macros.h"
35*c217d954SCole Faust #include "tests/framework/datasets/Datasets.h"
36*c217d954SCole Faust #include "tests/validation/Validation.h"
37*c217d954SCole Faust #include "tests/validation/fixtures/LogicalFixture.h"
38*c217d954SCole Faust 
39*c217d954SCole Faust namespace
40*c217d954SCole Faust {
41*c217d954SCole Faust using namespace arm_compute;
42*c217d954SCole Faust 
43*c217d954SCole Faust const auto correct_shape = TensorShape(1, 2, 3, 4); // target shape to check against
44*c217d954SCole Faust const auto wrong_shape   = TensorShape(1, 2, 2, 4); // wrong shape to check validate logic
45*c217d954SCole Faust const auto correct_dt    = DataType::U8;            // correct data type to check against
46*c217d954SCole Faust const auto wrong_dt      = DataType::F32;           // wrong data type to check validate logic
47*c217d954SCole Faust }
48*c217d954SCole Faust 
49*c217d954SCole Faust namespace arm_compute
50*c217d954SCole Faust {
51*c217d954SCole Faust namespace test
52*c217d954SCole Faust {
53*c217d954SCole Faust namespace validation
54*c217d954SCole Faust {
55*c217d954SCole Faust TEST_SUITE(CL)
TEST_SUITE(LogicalOr)56*c217d954SCole Faust TEST_SUITE(LogicalOr)
57*c217d954SCole Faust TEST_SUITE(Validate)
58*c217d954SCole Faust TEST_CASE(NullPtr, framework::DatasetMode::ALL)
59*c217d954SCole Faust {
60*c217d954SCole Faust     Status s = CLLogicalOr::validate(nullptr, nullptr, nullptr);
61*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
62*c217d954SCole Faust }
63*c217d954SCole Faust 
TEST_CASE(WrongDataType,framework::DatasetMode::ALL)64*c217d954SCole Faust TEST_CASE(WrongDataType, framework::DatasetMode::ALL)
65*c217d954SCole Faust {
66*c217d954SCole Faust     TensorInfo in1{ correct_shape, 1, correct_dt };
67*c217d954SCole Faust     TensorInfo in2{ correct_shape, 1, wrong_dt };
68*c217d954SCole Faust     TensorInfo out{ correct_shape, 1, correct_dt };
69*c217d954SCole Faust 
70*c217d954SCole Faust     Status s = CLLogicalOr::validate(&in1, &in2, &out);
71*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
72*c217d954SCole Faust }
73*c217d954SCole Faust TEST_SUITE_END() // Validate
74*c217d954SCole Faust template <typename T>
75*c217d954SCole Faust using CLLogicalOrFixture = LogicalOrValidationFixture<CLTensor, CLAccessor, CLLogicalOr, T>;
76*c217d954SCole Faust 
FIXTURE_DATA_TEST_CASE(RunSmall,CLLogicalOrFixture<uint8_t>,framework::DatasetMode::ALL,zip (datasets::SmallShapes (),datasets::SmallShapes ()))77*c217d954SCole Faust FIXTURE_DATA_TEST_CASE(RunSmall, CLLogicalOrFixture<uint8_t>, framework::DatasetMode::ALL, zip(datasets::SmallShapes(), datasets::SmallShapes()))
78*c217d954SCole Faust {
79*c217d954SCole Faust     // Validate output
80*c217d954SCole Faust     validate(CLAccessor(_target), _reference);
81*c217d954SCole Faust }
82*c217d954SCole Faust 
FIXTURE_DATA_TEST_CASE(RunSmallBroadcast,CLLogicalOrFixture<uint8_t>,framework::DatasetMode::ALL,datasets::SmallShapesBroadcast ())83*c217d954SCole Faust FIXTURE_DATA_TEST_CASE(RunSmallBroadcast, CLLogicalOrFixture<uint8_t>, framework::DatasetMode::ALL, datasets::SmallShapesBroadcast())
84*c217d954SCole Faust {
85*c217d954SCole Faust     // Validate output
86*c217d954SCole Faust     validate(CLAccessor(_target), _reference);
87*c217d954SCole Faust }
88*c217d954SCole Faust TEST_SUITE_END() // LogicalOr
89*c217d954SCole Faust 
TEST_SUITE(LogicalAnd)90*c217d954SCole Faust TEST_SUITE(LogicalAnd)
91*c217d954SCole Faust TEST_SUITE(Validate)
92*c217d954SCole Faust TEST_CASE(NullPtr, framework::DatasetMode::ALL)
93*c217d954SCole Faust {
94*c217d954SCole Faust     Status s = CLLogicalAnd::validate(nullptr, nullptr, nullptr);
95*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
96*c217d954SCole Faust }
97*c217d954SCole Faust 
TEST_CASE(WrongDataType,framework::DatasetMode::ALL)98*c217d954SCole Faust TEST_CASE(WrongDataType, framework::DatasetMode::ALL)
99*c217d954SCole Faust {
100*c217d954SCole Faust     TensorInfo in1{ correct_shape, 1, correct_dt };
101*c217d954SCole Faust     TensorInfo in2{ correct_shape, 1, wrong_dt };
102*c217d954SCole Faust     TensorInfo out{ correct_shape, 1, correct_dt };
103*c217d954SCole Faust 
104*c217d954SCole Faust     Status s = CLLogicalAnd::validate(&in1, &in2, &out);
105*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
106*c217d954SCole Faust }
107*c217d954SCole Faust TEST_SUITE_END() // Validate
108*c217d954SCole Faust template <typename T>
109*c217d954SCole Faust using CLLogicalAndFixture = LogicalAndValidationFixture<CLTensor, CLAccessor, CLLogicalAnd, T>;
110*c217d954SCole Faust 
FIXTURE_DATA_TEST_CASE(RunSmall,CLLogicalAndFixture<uint8_t>,framework::DatasetMode::ALL,zip (datasets::SmallShapes (),datasets::SmallShapes ()))111*c217d954SCole Faust FIXTURE_DATA_TEST_CASE(RunSmall, CLLogicalAndFixture<uint8_t>, framework::DatasetMode::ALL, zip(datasets::SmallShapes(), datasets::SmallShapes()))
112*c217d954SCole Faust {
113*c217d954SCole Faust     // Validate output
114*c217d954SCole Faust     validate(CLAccessor(_target), _reference);
115*c217d954SCole Faust }
116*c217d954SCole Faust 
FIXTURE_DATA_TEST_CASE(RunSmallBroadcast,CLLogicalAndFixture<uint8_t>,framework::DatasetMode::ALL,datasets::SmallShapesBroadcast ())117*c217d954SCole Faust FIXTURE_DATA_TEST_CASE(RunSmallBroadcast, CLLogicalAndFixture<uint8_t>, framework::DatasetMode::ALL, datasets::SmallShapesBroadcast())
118*c217d954SCole Faust {
119*c217d954SCole Faust     // Validate output
120*c217d954SCole Faust     validate(CLAccessor(_target), _reference);
121*c217d954SCole Faust }
122*c217d954SCole Faust TEST_SUITE_END() // LogicalAnd
TEST_SUITE(LogicalNot)123*c217d954SCole Faust TEST_SUITE(LogicalNot)
124*c217d954SCole Faust 
125*c217d954SCole Faust TEST_SUITE(Validate)
126*c217d954SCole Faust TEST_CASE(NullPtr, framework::DatasetMode::ALL)
127*c217d954SCole Faust {
128*c217d954SCole Faust     Status s = CLLogicalNot::validate(nullptr, nullptr);
129*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
130*c217d954SCole Faust }
131*c217d954SCole Faust 
TEST_CASE(WrongDataType,framework::DatasetMode::ALL)132*c217d954SCole Faust TEST_CASE(WrongDataType, framework::DatasetMode::ALL)
133*c217d954SCole Faust {
134*c217d954SCole Faust     TensorInfo in{ correct_shape, 1, correct_dt };
135*c217d954SCole Faust     TensorInfo out{ correct_shape, 1, wrong_dt };
136*c217d954SCole Faust 
137*c217d954SCole Faust     Status s = CLLogicalNot::validate(&in, &out);
138*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
139*c217d954SCole Faust 
140*c217d954SCole Faust     in  = TensorInfo{ correct_shape, 1, wrong_dt };
141*c217d954SCole Faust     out = TensorInfo{ correct_shape, 1, correct_dt };
142*c217d954SCole Faust 
143*c217d954SCole Faust     s = CLLogicalNot::validate(&in, &out);
144*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
145*c217d954SCole Faust 
146*c217d954SCole Faust     in  = TensorInfo{ correct_shape, 1, wrong_dt };
147*c217d954SCole Faust     out = TensorInfo{ correct_shape, 1, wrong_dt };
148*c217d954SCole Faust 
149*c217d954SCole Faust     s = CLLogicalNot::validate(&in, &out);
150*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
151*c217d954SCole Faust }
152*c217d954SCole Faust 
TEST_CASE(WrongShape,framework::DatasetMode::ALL)153*c217d954SCole Faust TEST_CASE(WrongShape, framework::DatasetMode::ALL)
154*c217d954SCole Faust {
155*c217d954SCole Faust     TensorInfo in{ correct_shape, 1, correct_dt };
156*c217d954SCole Faust     TensorInfo out{ wrong_shape, 1, correct_dt };
157*c217d954SCole Faust 
158*c217d954SCole Faust     Status s = CLLogicalNot::validate(&in, &out);
159*c217d954SCole Faust     ARM_COMPUTE_EXPECT((bool)s == false, framework::LogLevel::ERRORS);
160*c217d954SCole Faust }
161*c217d954SCole Faust TEST_SUITE_END() // Validate
162*c217d954SCole Faust 
163*c217d954SCole Faust template <typename T>
164*c217d954SCole Faust using CLLogicalNotFixture = LogicalNotValidationFixture<CLTensor, CLAccessor, CLLogicalNot, T>;
165*c217d954SCole Faust 
166*c217d954SCole Faust FIXTURE_DATA_TEST_CASE(RunSmall, CLLogicalNotFixture<uint8_t>, framework::DatasetMode::ALL, combine(datasets::SmallShapes(), framework::dataset::make("DataType",
167*c217d954SCole Faust                                                                                                     DataType::U8)))
168*c217d954SCole Faust {
169*c217d954SCole Faust     // Validate output
170*c217d954SCole Faust     validate(CLAccessor(_target), _reference);
171*c217d954SCole Faust }
172*c217d954SCole Faust TEST_SUITE_END() // LogicalNot
173*c217d954SCole Faust TEST_SUITE_END() // CL
174*c217d954SCole Faust } // namespace validation
175*c217d954SCole Faust } // namespace test
176*c217d954SCole Faust } // namespace arm_compute
177