// // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ElementwiseUnaryTestHelper.hpp" #include "LogicalTestHelper.hpp" #include #include #include #include namespace armnnDelegate { void LogicalBinaryAndBoolTest(std::vector& backends) { 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, backends, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryAndBroadcastTest(std::vector& backends) { 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, backends, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryOrBoolTest(std::vector& backends) { 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, backends, input0Shape, input1Shape, expectedOutputShape, input0Values, input1Values, expectedOutputValues); } void LogicalBinaryOrBroadcastTest(std::vector& backends) { 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, backends, 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& backends) { 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, backends, inputShape, inputValues, expectedOutputValues); } TEST_SUITE("LogicalBinaryTests_GpuAccTests") { TEST_CASE ("LogicalBinary_AND_Bool_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; LogicalBinaryAndBoolTest(backends); } TEST_CASE ("LogicalBinary_AND_Broadcast_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; LogicalBinaryAndBroadcastTest(backends); } TEST_CASE ("Logical_NOT_Bool_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; LogicalNotBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Bool_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; LogicalBinaryOrBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Broadcast_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; LogicalBinaryOrBroadcastTest(backends); } } TEST_SUITE("LogicalBinaryTests_CpuAccTests") { TEST_CASE ("LogicalBinary_AND_Bool_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; LogicalBinaryAndBoolTest(backends); } TEST_CASE ("LogicalBinary_AND_Broadcast_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; LogicalBinaryAndBroadcastTest(backends); } TEST_CASE ("Logical_NOT_Bool_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; LogicalNotBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Bool_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; LogicalBinaryOrBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Broadcast_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; LogicalBinaryOrBroadcastTest(backends); } } TEST_SUITE("LogicalBinaryTests_CpuRefTests") { TEST_CASE ("LogicalBinary_AND_Bool_CpuRef_Test") { std::vector backends = { armnn::Compute::CpuRef }; LogicalBinaryAndBoolTest(backends); } TEST_CASE ("LogicalBinary_AND_Broadcast_CpuRef_Test") { std::vector backends = { armnn::Compute::CpuRef }; LogicalBinaryAndBroadcastTest(backends); } TEST_CASE ("Logical_NOT_Bool_CpuRef_Test") { std::vector backends = { armnn::Compute::CpuRef }; LogicalNotBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Bool_CpuRef_Test") { std::vector backends = { armnn::Compute::CpuRef }; LogicalBinaryOrBoolTest(backends); } TEST_CASE ("LogicalBinary_OR_Broadcast_CpuRef_Test") { std::vector backends = { armnn::Compute::CpuRef }; LogicalBinaryOrBroadcastTest(backends); } } } // namespace armnnDelegate