// // Copyright © 2020, 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ElementwiseUnaryTestHelper.hpp" #include "LogicalTestHelper.hpp" #include #include #include namespace armnnDelegate { void LogicalBinaryAndBoolTest() { std::vector input0Shape { 1, 2, 2 }; std::vector input1Shape { 1, 2, 2 }; std::vector expectedOutputShape { 1, 2, 2 }; // Set input and output values std::vector input0Values { 0, 0, 1, 1 }; std::vector input1Values { 0, 1, 0, 1 }; std::vector expectedOutputValues { 0, 0, 0, 1 }; LogicalBinaryTest(tflite::BuiltinOperator_LOGICAL_AND, ::tflite::TensorType_BOOL, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryAndBroadcastTest() { std::vector input0Shape { 1, 2, 2 }; std::vector input1Shape { 1, 1, 1 }; std::vector expectedOutputShape { 1, 2, 2 }; std::vector input0Values { 0, 1, 0, 1 }; std::vector input1Values { 1 }; std::vector expectedOutputValues { 0, 1, 0, 1 }; LogicalBinaryTest(tflite::BuiltinOperator_LOGICAL_AND, ::tflite::TensorType_BOOL, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryOrBoolTest() { std::vector input0Shape { 1, 2, 2 }; std::vector input1Shape { 1, 2, 2 }; std::vector expectedOutputShape { 1, 2, 2 }; std::vector input0Values { 0, 0, 1, 1 }; std::vector input1Values { 0, 1, 0, 1 }; std::vector expectedOutputValues { 0, 1, 1, 1 }; LogicalBinaryTest(tflite::BuiltinOperator_LOGICAL_OR, ::tflite::TensorType_BOOL, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryOrBroadcastTest() { std::vector input0Shape { 1, 2, 2 }; std::vector input1Shape { 1, 1, 1 }; std::vector expectedOutputShape { 1, 2, 2 }; std::vector input0Values { 0, 1, 0, 1 }; std::vector input1Values { 1 }; std::vector expectedOutputValues { 1, 1, 1, 1 }; LogicalBinaryTest(tflite::BuiltinOperator_LOGICAL_OR, ::tflite::TensorType_BOOL, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } // LogicalNot operator uses ElementwiseUnary unary layer and descriptor but is still classed as logical operator. void LogicalNotBoolTest() { std::vector inputShape { 1, 2, 2 }; std::vector inputValues { 0, 1, 0, 1 }; std::vector expectedOutputValues { 1, 0, 1, 0 }; ElementwiseUnaryBoolTest(tflite::BuiltinOperator_LOGICAL_NOT, inputShape, inputValues, expectedOutputValues); } TEST_SUITE("LogicalBinaryTests_Tests") { TEST_CASE ("LogicalBinary_AND_Bool_Test") { LogicalBinaryAndBoolTest(); } TEST_CASE ("LogicalBinary_AND_Broadcast_Test") { LogicalBinaryAndBroadcastTest(); } TEST_CASE ("Logical_NOT_Bool_Test") { LogicalNotBoolTest(); } TEST_CASE ("LogicalBinary_OR_Bool_Test") { LogicalBinaryOrBoolTest(); } TEST_CASE ("LogicalBinary_OR_Broadcast_Test") { LogicalBinaryOrBroadcastTest(); } } } // namespace armnnDelegate