//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include "DriverTestHelpers.hpp"

#include <armnn/utility/IgnoreUnused.hpp>

#include <boost/math/special_functions/relative_difference.hpp>

#include <array>

using ArmnnDriver   = armnn_driver::ArmnnDriver;
using DriverOptions = armnn_driver::DriverOptions;

using namespace driverTestHelpers;
using namespace android::hardware;

namespace
{

template<typename T>
RequestArgument CreateRequestArgument(const std::vector<T>& value, unsigned int poolIndex)
{
    DataLocation inputInloc = {};
    inputInloc.poolIndex = poolIndex;
    inputInloc.offset = 0;
    inputInloc.length = value.size() * sizeof(T);
    RequestArgument inputRequestArgument = {};
    inputRequestArgument.location = inputInloc;
    inputRequestArgument.dimensions = hidl_vec<uint32_t>{};
    return inputRequestArgument;
}

// Returns true if the relative difference between two float values is less than the tolerance value given.
// This is used because the floating point comparison tolerance (set on each BOOST_AUTO_TEST_CASE) does not work!
bool TolerantCompareEqual(float a, float b, float tolerance = 0.00001f)
{
    float rd;
    if (a == 0.0f)
    {
        rd = fabs(b);
    }
    else if (b == 0.0f)
    {
        rd = fabs(a);
    }
    else
    {
        rd = boost::math::relative_difference(a, b);
    }
    return rd < tolerance;
}

// Helper function to create an OperandLifeTime::NO_VALUE for testing.
// To be used on optional input operands that have no values - these are valid and should be tested.
V1_0::OperandLifeTime CreateNoValueLifeTime(const hidl_vec<uint32_t>& dimensions)
{
    // Only create a NO_VALUE for optional operands that have no elements
    if (dimensions.size() == 0 || dimensions[0] == 0)
    {
        return V1_0::OperandLifeTime::NO_VALUE;
    }
    return V1_0::OperandLifeTime::CONSTANT_COPY;
}

template<typename HalModel>
void ExecuteModel(const HalModel& model, armnn_driver::ArmnnDriver& driver, const V1_0::Request& request)
{
    android::sp<V1_0::IPreparedModel> preparedModel = PrepareModel(model, driver);
    if (preparedModel.get() != nullptr)
    {
        Execute(preparedModel, request);
    }
}

#if defined(ARMNN_ANDROID_NN_V1_2) || defined(ARMNN_ANDROID_NN_V1_3)

template<>
void ExecuteModel<armnn_driver::hal_1_2::HalPolicy::Model>(const armnn_driver::hal_1_2::HalPolicy::Model& model,
                                                           armnn_driver::ArmnnDriver& driver,
                                                           const V1_0::Request& request)
{
    android::sp<V1_2::IPreparedModel> preparedModel = PrepareModel_1_2(model, driver);
    if (preparedModel.get() != nullptr)
    {
        Execute(preparedModel, request);
    }
}

#endif

} // anonymous namespace

#ifndef ARMCOMPUTECL_ENABLED
static const std::array<armnn::Compute, 1> COMPUTE_DEVICES = {{ armnn::Compute::CpuRef }};
#else
static const std::array<armnn::Compute, 2> COMPUTE_DEVICES = {{ armnn::Compute::CpuRef, armnn::Compute::GpuAcc }};
#endif

// Add our own tests here since we fail the lstm tests which Google supplies (because of non-const weights)
template <typename HalPolicy>
void LstmTestImpl(const hidl_vec<uint32_t>&   inputDimensions,
                  const std::vector<float>&   inputValue,
                  const hidl_vec<uint32_t>&   inputToInputWeightsDimensions,
                  const std::vector<float>&   inputToInputWeightsValue,
                  const hidl_vec<uint32_t>&   inputToForgetWeightsDimensions,
                  const std::vector<float>&   inputToForgetWeightsValue,
                  const hidl_vec<uint32_t>&   inputToCellWeightsDimensions,
                  const std::vector<float>&   inputToCellWeightsValue,
                  const hidl_vec<uint32_t>&   inputToOutputWeightsDimensions,
                  const std::vector<float>&   inputToOutputWeightsValue,
                  const hidl_vec<uint32_t>&   recurrentToInputWeightsDimensions,
                  const std::vector<float>&   recurrentToInputWeightsValue,
                  const hidl_vec<uint32_t>&   recurrentToForgetWeightsDimensions,
                  const std::vector<float>&   recurrentToForgetWeightsValue,
                  const hidl_vec<uint32_t>&   recurrentToCellWeightsDimensions,
                  const std::vector<float>&   recurrentToCellWeightsValue,
                  const hidl_vec<uint32_t>&   recurrentToOutputWeightsDimensions,
                  const std::vector<float>&   recurrentToOutputWeightsValue,
                  const hidl_vec<uint32_t>&   cellToInputWeightsDimensions,
                  const std::vector<float>&   cellToInputWeightsValue,
                  const hidl_vec<uint32_t>&   cellToForgetWeightsDimensions,
                  const std::vector<float>&   cellToForgetWeightsValue,
                  const hidl_vec<uint32_t>&   cellToOutputWeightsDimensions,
                  const std::vector<float>&   cellToOutputWeightsValue,
                  const hidl_vec<uint32_t>&   inputGateBiasDimensions,
                  const std::vector<float>&   inputGateBiasValue,
                  const hidl_vec<uint32_t>&   forgetGateBiasDimensions,
                  const std::vector<float>&   forgetGateBiasValue,
                  const hidl_vec<uint32_t>&   cellBiasDimensions,
                  const std::vector<float>&   cellBiasValue,
                  const hidl_vec<uint32_t>&   outputGateBiasDimensions,
                  const std::vector<float>&   outputGateBiasValue,
                  const hidl_vec<uint32_t>&   projectionWeightsDimensions,
                  const std::vector<float>&   projectionWeightsValue,
                  const hidl_vec<uint32_t>&   projectionBiasDimensions,
                  const std::vector<float>&   projectionBiasValue,
                  const hidl_vec<uint32_t>&   outputStateInDimensions,
                  const std::vector<float>&   outputStateInValue,
                  const hidl_vec<uint32_t>&   cellStateInDimensions,
                  const std::vector<float>&   cellStateInValue,
                  const hidl_vec<uint32_t>&   activationFunctionDimensions,
                  const std::vector<int32_t>& activationFunctionValue,
                  const hidl_vec<uint32_t>&   cellClippingThresholdDimensions,
                  const std::vector<float>&   cellClippingThresholdValue,
                  const hidl_vec<uint32_t>&   projectionClippingThresholdDimensions,
                  const std::vector<float>&   projectionClippingThresholdValue,
                  const hidl_vec<uint32_t>&   inputLayerNormWeightsDimensions,
                  const std::vector<float>&   inputLayerNormWeightsValue,
                  const hidl_vec<uint32_t>&   forgetLayerNormWeightsDimensions,
                  const std::vector<float>&   forgetLayerNormWeightsValue,
                  const hidl_vec<uint32_t>&   cellLayerNormWeightsDimensions,
                  const std::vector<float>&   cellLayerNormWeightsValue,
                  const hidl_vec<uint32_t>&   outputLayerNormWeightsDimensions,
                  const std::vector<float>&   outputLayerNormWeightsValue,
                  const hidl_vec<uint32_t>&   scratchBufferDimensions,
                  const std::vector<float>&   scratchBufferValue,
                  const hidl_vec<uint32_t>&   outputStateOutDimensions,
                  const std::vector<float>&   outputStateOutValue,
                  const hidl_vec<uint32_t>&   cellStateOutDimensions,
                  const std::vector<float>&   cellStateOutValue,
                  const hidl_vec<uint32_t>&   outputDimensions,
                  const std::vector<float>&   outputValue,
                  armnn::Compute              compute)
{
    auto driver = std::make_unique<ArmnnDriver>(DriverOptions(compute));
    using Model = typename HalPolicy::Model;
    Model model = {};

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    AddInputOperand<HalPolicy>(model, inputDimensions);

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    AddTensorOperand<HalPolicy>(model,
                                inputToInputWeightsDimensions,
                                inputToInputWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(inputToInputWeightsDimensions));
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    AddTensorOperand<HalPolicy>(model, inputToForgetWeightsDimensions, inputToForgetWeightsValue);
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    // [num_units, input_size].
    AddTensorOperand<HalPolicy>(model, inputToCellWeightsDimensions, inputToCellWeightsValue);
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    AddTensorOperand<HalPolicy>(model, inputToOutputWeightsDimensions, inputToOutputWeightsValue);
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    AddTensorOperand<HalPolicy>(model,
                                recurrentToInputWeightsDimensions,
                                recurrentToInputWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(recurrentToInputWeightsDimensions));
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand<HalPolicy>(model, recurrentToForgetWeightsDimensions, recurrentToForgetWeightsValue);
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand<HalPolicy>(model, recurrentToCellWeightsDimensions, recurrentToCellWeightsValue);
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand<HalPolicy>(model, recurrentToOutputWeightsDimensions, recurrentToOutputWeightsValue);
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model,
                                cellToInputWeightsDimensions,
                                cellToInputWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(cellToInputWeightsDimensions));
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model,
                                cellToForgetWeightsDimensions,
                                cellToForgetWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(cellToForgetWeightsDimensions));
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model,
                                cellToOutputWeightsDimensions,
                                cellToOutputWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(cellToOutputWeightsDimensions));
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model,
                                inputGateBiasDimensions,
                                inputGateBiasValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(inputGateBiasDimensions));
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model, forgetGateBiasDimensions, forgetGateBiasValue);
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model, cellBiasDimensions, cellBiasValue);
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand<HalPolicy>(model, outputGateBiasDimensions, outputGateBiasValue);
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    AddTensorOperand<HalPolicy>(model,
                                projectionWeightsDimensions,
                                projectionWeightsValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(projectionWeightsDimensions));
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    AddTensorOperand<HalPolicy>(model,
                                projectionBiasDimensions,
                                projectionBiasValue,
                                HalPolicy::OperandType::TENSOR_FLOAT32,
                                CreateNoValueLifeTime(projectionBiasDimensions));

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    AddInputOperand<HalPolicy>(model, outputStateInDimensions);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    AddInputOperand<HalPolicy>(model, cellStateInDimensions);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    AddTensorOperand<HalPolicy>(model,
                                activationFunctionDimensions,
                                activationFunctionValue,
                                HalPolicy::OperandType::INT32);
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    AddTensorOperand<HalPolicy>(model,
                                cellClippingThresholdDimensions,
                                cellClippingThresholdValue,
                                HalPolicy::OperandType::FLOAT32);
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    AddTensorOperand<HalPolicy>(model,
                                projectionClippingThresholdDimensions,
                                projectionClippingThresholdValue,
                                HalPolicy::OperandType::FLOAT32);

    bool normalizationEnabled = false;

    // If any of the tensors have a value all normalization tensors are set
    if (!inputLayerNormWeightsValue.empty()  ||
        !forgetLayerNormWeightsValue.empty() ||
        !cellLayerNormWeightsValue.empty()   ||
        !outputLayerNormWeightsValue.empty())
    {
        // Normalization:
        // 23:The input layer normalization weights. A 1-D tensor of shape [num_units].
        //    Used to rescale normalized inputs to activation at input gate.
        AddTensorOperand<HalPolicy>(model,
                                    inputLayerNormWeightsDimensions,
                                    inputLayerNormWeightsValue,
                                    HalPolicy::OperandType::TENSOR_FLOAT32,
                                    CreateNoValueLifeTime(inputLayerNormWeightsDimensions));
        // 24:The forget layer normalization weights. A 1-D tensor of shape [num_units].
        //    Used to rescale normalized inputs to activation at forget gate.
        AddTensorOperand<HalPolicy>(model,
                                    forgetLayerNormWeightsDimensions,
                                    forgetLayerNormWeightsValue,
                                    HalPolicy::OperandType::TENSOR_FLOAT32,
                                    CreateNoValueLifeTime(forgetLayerNormWeightsDimensions));
        // 25:The cell layer normalization weights. A 1-D tensor of shape [num_units].
        //    Used to rescale normalized inputs to activation at cell gate.
        AddTensorOperand<HalPolicy>(model,
                                    cellLayerNormWeightsDimensions,
                                    cellLayerNormWeightsValue,
                                    HalPolicy::OperandType::TENSOR_FLOAT32,
                                    CreateNoValueLifeTime(cellLayerNormWeightsDimensions));
        // 26:The output layer normalization weights. A 1-D tensor of shape [num_units].
        //    Used to rescale normalized inputs to activation at output gate.
        AddTensorOperand<HalPolicy>(model,
                                    outputLayerNormWeightsDimensions,
                                    outputLayerNormWeightsValue,
                                    HalPolicy::OperandType::TENSOR_FLOAT32,
                                    CreateNoValueLifeTime(outputLayerNormWeightsDimensions));

        normalizationEnabled = true;
    }

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    AddOutputOperand<HalPolicy>(model, scratchBufferDimensions);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    AddOutputOperand<HalPolicy>(model, outputStateOutDimensions);
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    AddOutputOperand<HalPolicy>(model, cellStateOutDimensions);
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    AddOutputOperand<HalPolicy>(model, outputDimensions);

    // make the lstm operation
    model.operations.resize(1);
    model.operations[0].type = HalPolicy::OperationType::LSTM;

    if (normalizationEnabled)
    {
        model.operations[0].inputs = hidl_vec<uint32_t> { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,
                                                         14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
        model.operations[0].outputs = hidl_vec<uint32_t> {27, 28, 29, 30};
    }
    else
    {
        model.operations[0].inputs = hidl_vec<uint32_t> { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,
                                                         12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
        model.operations[0].outputs = hidl_vec<uint32_t> {23, 24, 25, 26};
    }

    // define the input values
    hidl_vec<RequestArgument> inputArguments;
    inputArguments.resize(3);

    inputArguments[0] = CreateRequestArgument<float>(inputValue, 0);
    inputArguments[1] = CreateRequestArgument<float>(outputStateInValue, 1);
    inputArguments[2] = CreateRequestArgument<float>(cellStateInValue, 2);

    // define the expected output values
    hidl_vec<RequestArgument> outputArguments;
    outputArguments.resize(4);

    outputArguments[0] = CreateRequestArgument<float>(scratchBufferValue, 3);
    outputArguments[1] = CreateRequestArgument<float>(outputStateOutValue, 4);
    outputArguments[2] = CreateRequestArgument<float>(cellStateOutValue, 5);
    outputArguments[3] = CreateRequestArgument<float>(outputValue, 6);

    V1_0::Request request = {};
    request.inputs  = inputArguments;
    request.outputs = outputArguments;

    // set the input data
    AddPoolAndSetData(inputValue.size(), request, inputValue.data());
    AddPoolAndSetData(outputStateInValue.size(), request, outputStateInValue.data());
    AddPoolAndSetData(cellStateInValue.size(), request, cellStateInValue.data());

    // add memory for the outputs
    AddPoolAndGetData<float>(scratchBufferValue.size(), request);
    android::sp<IMemory> outputStateOutMemory = AddPoolAndGetData<float>(outputStateOutValue.size(), request);
    float* outputStateOutData = static_cast<float*>(static_cast<void*>(outputStateOutMemory->getPointer()));
    android::sp<IMemory> cellStateOutMemory = AddPoolAndGetData<float>(cellStateOutValue.size(), request);
    float* cellStateOutData = static_cast<float*>(static_cast<void*>(cellStateOutMemory->getPointer()));
    android::sp<IMemory> outputMemory = AddPoolAndGetData<float>(outputValue.size(), request);
    float* outputData = static_cast<float*>(static_cast<void*>(outputMemory->getPointer()));

    // make the prepared model and run the execution
    ExecuteModel(model, *driver, request);

    // check the results
    for (size_t i = 0; i < outputStateOutValue.size(); ++i)
    {
        BOOST_TEST(TolerantCompareEqual(outputStateOutValue[i], outputStateOutData[i]),
                   "outputStateOut[" << i << "]: " << outputStateOutValue[i] << " != " << outputStateOutData[i]);
    }
    for (size_t i = 0; i < cellStateOutValue.size(); ++i)
    {
        BOOST_TEST(TolerantCompareEqual(cellStateOutValue[i], cellStateOutData[i]),
                   "cellStateOut[" << i << "]: " << cellStateOutValue[i] << " != " << cellStateOutData[i]);
    }
    for (size_t i = 0; i < outputValue.size(); ++i)
    {
        BOOST_TEST(TolerantCompareEqual(outputValue[i], outputData[i]),
                   "output[" << i << "]: " << outputValue[i] << " != " << outputData[i]);
    }
}

template <typename HalPolicy>
void QuantizedLstmTestImpl(const hidl_vec<uint32_t>&    inputDimensions,
                           const std::vector<uint8_t>&  inputValue,
                           const hidl_vec<uint32_t>&    inputToInputWeightsDimensions,
                           const std::vector<uint8_t>&  inputToInputWeightsValue,
                           const hidl_vec<uint32_t>&    inputToForgetWeightsDimensions,
                           const std::vector<uint8_t>&  inputToForgetWeightsValue,
                           const hidl_vec<uint32_t>&    inputToCellWeightsDimensions,
                           const std::vector<uint8_t>&  inputToCellWeightsValue,
                           const hidl_vec<uint32_t>&    inputToOutputWeightsDimensions,
                           const std::vector<uint8_t>&  inputToOutputWeightsValue,
                           const hidl_vec<uint32_t>&    recurrentToInputWeightsDimensions,
                           const std::vector<uint8_t>&  recurrentToInputWeightsValue,
                           const hidl_vec<uint32_t>&    recurrentToForgetWeightsDimensions,
                           const std::vector<uint8_t>&  recurrentToForgetWeightsValue,
                           const hidl_vec<uint32_t>&    recurrentToCellWeightsDimensions,
                           const std::vector<uint8_t>&  recurrentToCellWeightsValue,
                           const hidl_vec<uint32_t>&    recurrentToOutputWeightsDimensions,
                           const std::vector<uint8_t>&  recurrentToOutputWeightsValue,
                           const hidl_vec<uint32_t>&    inputGateBiasDimensions,
                           const std::vector<int32_t>&  inputGateBiasValue,
                           const hidl_vec<uint32_t>&    forgetGateBiasDimensions,
                           const std::vector<int32_t>&  forgetGateBiasValue,
                           const hidl_vec<uint32_t>&    cellBiasDimensions,
                           const std::vector<int32_t>&  cellBiasValue,
                           const hidl_vec<uint32_t>&    outputGateBiasDimensions,
                           const std::vector<int32_t>&  outputGateBiasValue,
                           const hidl_vec<uint32_t>&    previousOutputInDimensions,
                           const std::vector<uint8_t>&  previousOutputInValue,
                           const hidl_vec<uint32_t>&    previousCellStateInDimensions,
                           const std::vector<int16_t>&  previousCellStateInValue,
                           const hidl_vec<uint32_t>&    cellStateOutDimensions,
                           const std::vector<int16_t>&  cellStateOutValue,
                           const hidl_vec<uint32_t>&    outputDimensions,
                           const std::vector<uint8_t>&  outputValue)
{
    auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::GpuAcc));
    using Model = typename HalPolicy::Model;
    Model model = {};

    float inputOutputScale = 0.0078125f;
    int32_t inputOutputOffset = 128;

    float cellStateScale = 0.00048828125f;
    int32_t cellStateOffset = 0;

    float weightsScale = 0.00408021f;
    int32_t weightsOffset = 100;

    float biasScale = 3.1876640625e-05f;
    int32_t biasOffset = 0;

    // Inputs:
    // 0: The input: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape [numBatches, inputSize]
    //    specifying the input to the LSTM cell. Tensor is quantized with a fixed quantization range of -1, 127/128.
    AddInputOperand<HalPolicy>(model,
                               inputDimensions,
                               HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                               inputOutputScale,
                               inputOutputOffset);

    // 1: The input-to-input weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-input part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                inputToInputWeightsDimensions,
                                inputToInputWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(inputToInputWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 2: The input-to-forget weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-forget part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                inputToForgetWeightsDimensions,
                                inputToForgetWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(inputToForgetWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 3: The input-to-cell weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-cell part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                inputToCellWeightsDimensions,
                                inputToCellWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(inputToCellWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 4: The input-to-output weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-output part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                inputToOutputWeightsDimensions,
                                inputToOutputWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(inputToOutputWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 5: The recurrent-to-input weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-input part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                recurrentToInputWeightsDimensions,
                                recurrentToInputWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(recurrentToInputWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 6: The recurrent-to-forget weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-forget part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                recurrentToForgetWeightsDimensions,
                                recurrentToForgetWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(recurrentToForgetWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 7: The recurrent-to-cell weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-cell part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                recurrentToCellWeightsDimensions,
                                recurrentToCellWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(recurrentToCellWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 8: The recurrent-to-output weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-output part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    AddTensorOperand<HalPolicy>(model,
                                recurrentToOutputWeightsDimensions,
                                recurrentToOutputWeightsValue,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                CreateNoValueLifeTime(recurrentToOutputWeightsDimensions),
                                weightsScale,
                                weightsOffset);
    // 9: The input gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying the
    //    bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //    of input and weights scales and zeroPoint equal to 0.
    AddTensorOperand<HalPolicy>(model,
                                inputGateBiasDimensions,
                                inputGateBiasValue,
                                HalPolicy::OperandType::TENSOR_INT32,
                                CreateNoValueLifeTime(inputGateBiasDimensions),
                                biasScale,
                                biasOffset);
    // 10: The forget gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying
    //     the bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //     of input and weights scales and zeroPoint equal to 0.
    AddTensorOperand<HalPolicy>(model,
                                forgetGateBiasDimensions,
                                forgetGateBiasValue,
                                HalPolicy::OperandType::TENSOR_INT32,
                                CreateNoValueLifeTime(forgetGateBiasDimensions),
                                biasScale,
                                biasOffset);
    // 11: The cell bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying the bias
    //     for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product of input
    //     and weights scales and zeroPoint equal to 0.
    AddTensorOperand<HalPolicy>(model,
                                cellBiasDimensions,
                                cellBiasValue,
                                HalPolicy::OperandType::TENSOR_INT32,
                                CreateNoValueLifeTime(cellBiasDimensions),
                                biasScale,
                                biasOffset);
    // 12: The output gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying
    //     the bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //     of input and weights scales and zeroPoint equal to 0.
    AddTensorOperand<HalPolicy>(model,
                                outputGateBiasDimensions,
                                outputGateBiasValue,
                                HalPolicy::OperandType::TENSOR_INT32,
                                CreateNoValueLifeTime(outputGateBiasDimensions),
                                biasScale,
                                biasOffset);

    //13: The previous cell state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT16_SYMM and shape
    //    [numBatches, outputSize] specifying the cell state from the previous time step of the LSTM cell.
    //    It is quantized using a quantization range of -2^4, 2^4 * 32767/32768.
    AddInputOperand<HalPolicy>(model,
                               previousCellStateInDimensions,
                               HalPolicy::OperandType::TENSOR_QUANT16_SYMM,
                               cellStateScale,
                               cellStateOffset);
    // 14: The previous output state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //     [numBathes, outputSize] specifying the output of the LSTM cell from previous time-step. Tensor
    //     is quantized with a fixed quantization range of -1, 127/128.
    AddInputOperand<HalPolicy>(model,
                               previousOutputInDimensions,
                               HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                               inputOutputScale,
                               inputOutputOffset);

    // Outputs:
    // 0: The cell state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT16_SYMM and shape [numBatches, outputSize]
    //    which contains a cell state from the current time step. Tensor is quantized using a quantization range
    //    of -2^4, 2^4 * 32767/32768.
    AddOutputOperand<HalPolicy>(model,
                                cellStateOutDimensions,
                                HalPolicy::OperandType::TENSOR_QUANT16_SYMM,
                                cellStateScale,
                                cellStateOffset);
    // 1: The output: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape [numBathes, outputSize] which
    //      contains the output value. Tensor is quantized with a fixed quantization range of -1, 127/128.
    AddOutputOperand<HalPolicy>(model,
                                outputDimensions,
                                HalPolicy::OperandType::TENSOR_QUANT8_ASYMM,
                                inputOutputScale,
                                inputOutputOffset);

    // make the lstm operation
    model.operations.resize(1);
    model.operations[0].type = HalPolicy::OperationType::QUANTIZED_16BIT_LSTM;

    model.operations[0].inputs = hidl_vec<uint32_t> { 0,  1,  2,  3,  4,  5,  6,  7,
                                                      8,  9,  10, 11, 12, 13, 14};
    model.operations[0].outputs = hidl_vec<uint32_t> {15, 16};

    // define the input values
    hidl_vec<RequestArgument> inputArguments;
    inputArguments.resize(3);

    inputArguments[0] = CreateRequestArgument<uint8_t>(inputValue, 0);
    inputArguments[1] = CreateRequestArgument<int16_t>(previousCellStateInValue, 1);
    inputArguments[2] = CreateRequestArgument<uint8_t>(previousOutputInValue, 2);

    // define the expected output values
    hidl_vec<RequestArgument> outputArguments;
    outputArguments.resize(2);

    outputArguments[0] = CreateRequestArgument<int16_t>(cellStateOutValue, 3);
    outputArguments[1] = CreateRequestArgument<uint8_t>(outputValue, 4);

    V1_0::Request request = {};
    request.inputs  = inputArguments;
    request.outputs = outputArguments;

    // set the input data
    AddPoolAndSetData(inputValue.size(), request, inputValue.data());
    AddPoolAndSetData(previousCellStateInValue.size(), request, previousCellStateInValue.data());
    AddPoolAndSetData(previousOutputInValue.size(), request, previousOutputInValue.data());

    // add memory for the outputs
    android::sp<IMemory> cellStateOutMemory = AddPoolAndGetData<int16_t>(cellStateOutValue.size(), request);
    int16_t* cellStateOutData = static_cast<int16_t*>(static_cast<void*>(cellStateOutMemory->getPointer()));
    android::sp<IMemory> outputMemory = AddPoolAndGetData<uint8_t>(outputValue.size(), request);
    uint8_t* outputData = static_cast<uint8_t*>(static_cast<void*>(outputMemory->getPointer()));

    // make the prepared model and run the execution
    ExecuteModel(model, *driver, request);

    // check the results
    for (size_t i = 0; i < cellStateOutValue.size(); ++i)
    {
        BOOST_TEST(TolerantCompareEqual(cellStateOutValue[i], cellStateOutData[i], 1.0f),
                   "cellStateOut[" << i << "]: " << cellStateOutValue[i] << " != " << cellStateOutData[i]);
    }
    for (size_t i = 0; i < outputValue.size(); ++i)
    {
        BOOST_TEST(TolerantCompareEqual(outputValue[i], outputData[i], 1.0f),
                   "output[" << i << "]: " << outputValue[i] << " != " << outputData[i]);
    }
}

template <typename HalPolicy>
void LstmNoCifgNoPeepholeNoProjection(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/lstm.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/lstm.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 1;
    uint32_t inputSize = 2;
    uint32_t numUnits = 4;
    uint32_t outputSize = numUnits;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{2.0f, 3.0f};

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToInputWeightsValue{-0.45018822f, -0.02338299f,
                                                -0.08705890f, -0.34550029f,
                                                 0.04266912f, -0.15680569f,
                                                -0.34856534f,  0.43890524f};
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue{ 0.09701663f,  0.20334584f,
                                                 -0.50592935f, -0.31343272f,
                                                 -0.40032279f,  0.44781327f,
                                                  0.01387155f, -0.35593212f};
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue{-0.50013041f,  0.13702840f,
                                                0.11810488f,  0.20131630f,
                                               -0.20583314f,  0.44344562f,
                                                0.22077113f, -0.29909778f};
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue{-0.25065863f, -0.28290087f,
                                                  0.04613829f,  0.40525138f,
                                                  0.44272184f,  0.03897077f,
                                                 -0.15568960f,  0.19487578f};
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToInputWeightsValue{-0.00635350f, -0.20423880f,  0.31454784f, -0.35746509f,
                                                     0.28902304f,  0.08183324f, -0.16555229f,  0.02286911f,
                                                    -0.13566875f,  0.03034258f,  0.48091322f, -0.12528998f,
                                                     0.24077177f, -0.51332325f, -0.33502164f,  0.10629296f};
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue{-0.48684245f, -0.06655136f,  0.42224967f,  0.21126390f,
                                                      0.27654213f,  0.20864892f, -0.07646349f,  0.45877004f,
                                                      0.00141793f, -0.14609534f,  0.36447752f,  0.09196436f,
                                                      0.28053468f,  0.01560611f, -0.20127171f, -0.01140004f};
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue{-0.34074140f,  0.24443203f, -0.20785320f,  0.26320225f,
                                                    0.05695659f, -0.00123841f, -0.47447860f, -0.35869038f,
                                                   -0.06418842f, -0.13502428f, -0.50176400f,  0.22830659f,
                                                   -0.46367589f,  0.26016325f, -0.03894562f, -0.16368064f};
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue{ 0.43385774f, -0.17194885f,  0.27182370f,  0.09215671f,
                                                      0.24107647f, -0.39835793f,  0.18212086f,  0.01301402f,
                                                      0.48572797f, -0.50656658f,  0.20047462f, -0.20607421f,
                                                     -0.51818722f, -0.15390486f,  0.04681480f,  0.39922136f};
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{0};
    std::vector<float> cellToInputWeightsValue;
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{0};
    std::vector<float> cellToForgetWeightsValue;
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{0};
    std::vector<float> cellToOutputWeightsValue;
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{numUnits};
    std::vector<float> inputGateBiasValue(numUnits, 0.0f);
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue(numUnits, 1.0f);
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue(numUnits, 0.0f);
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue(numUnits, 0.0f);
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{0};
    std::vector<float> projectionWeightsValue;
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{0};
    std::vector<float> projectionBiasValue;

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23:The input layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{0};
    std::vector<float> inputLayerNormWeightsValue;
    // 24:The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{0};
    std::vector<float> forgetLayerNormWeightsValue;
    // 25:The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{0};
    std::vector<float> cellLayerNormWeightsValue;
    // 26:The output layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{0};
    std::vector<float> outputLayerNormWeightsValue;

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 4};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 4, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue {-0.0297319f, 0.122947f, 0.208851f, -0.153588f};
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue {-0.145439f, 0.157475f, 0.293663f, -0.277353f};
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue {-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f};

    LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                            inputToInputWeightsDimensions,         inputToInputWeightsValue,
                            inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                            inputToCellWeightsDimensions,          inputToCellWeightsValue,
                            inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                            recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                            recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                            recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                            recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                            cellToInputWeightsDimensions,          cellToInputWeightsValue,
                            cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                            cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                            inputGateBiasDimensions,               inputGateBiasValue,
                            forgetGateBiasDimensions,              forgetGateBiasValue,
                            cellBiasDimensions,                    cellBiasValue,
                            outputGateBiasDimensions,              outputGateBiasValue,
                            projectionWeightsDimensions,           projectionWeightsValue,
                            projectionBiasDimensions,              projectionBiasValue,
                            outputStateInDimensions,               outputStateInValue,
                            cellStateInDimensions,                 cellStateInValue,
                            activationFunctionDimensions,          activationFunctionValue,
                            cellClippingThresholdDimensions,       cellClippingThresholdValue,
                            projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                            inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                            forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                            cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                            outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                            scratchBufferDimensions,               scratchBufferValue,
                            outputStateOutDimensions,              outputStateOutValue,
                            cellStateOutDimensions,                cellStateOutValue,
                            outputDimensions,                      outputValue,
                            compute);
}

template <typename HalPolicy>
void LstmCifgPeepholeNoProjection(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/lstm2.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/lstm2.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 1;
    uint32_t inputSize = 2;
    uint32_t numUnits = 4;
    uint32_t outputSize = numUnits;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{2.0f, 3.0f};

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{0};
    std::vector<float> inputToInputWeightsValue;
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue{-0.55291498f, -0.42866567f,
                                                  0.13056988f, -0.36333650f,
                                                 -0.22755712f,  0.28253698f,
                                                  0.24407166f,  0.33826375f};
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue{-0.49770179f, -0.27711356f,
                                               -0.09624726f,  0.05100781f,
                                                0.04717243f,  0.48944736f,
                                               -0.38535351f, -0.17212132f};
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue{ 0.10725588f, -0.02335852f,
                                                 -0.55932593f, -0.09426838f,
                                                 -0.44257352f,  0.54939759f,
                                                  0.01533556f,  0.42751634f};
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{0}; // VTS was {4, 4} -> {0} ?
    std::vector<float> recurrentToInputWeightsValue;
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue{-0.13832897f, -0.05151010f, -0.23590070f, -0.16661474f,
                                                     -0.14340827f,  0.36986142f,  0.23414481f,  0.55899000f,
                                                      0.10798943f, -0.41174671f,  0.17751795f, -0.34484994f,
                                                     -0.35874045f, -0.11352962f,  0.27268326f,  0.54058349f};
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue{ 0.54066205f, -0.32668582f, -0.43562764f, -0.56094903f,
                                                    0.42957711f,  0.01841056f, -0.32764608f, -0.33027974f,
                                                   -0.10826075f,  0.20675004f,  0.19069612f, -0.03026325f,
                                                   -0.54532051f,  0.33003211f,  0.44901288f,  0.21193194f};
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue{0.41613156f,  0.42610586f, -0.16495961f, -0.56638730f,
                                                     0.30579174f, -0.05115908f, -0.33941799f,  0.23364776f,
                                                     0.11178309f,  0.09481031f, -0.26424935f,  0.46261835f,
                                                     0.50248802f,  0.26114327f, -0.43736315f,  0.33149987f};
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{0};
    std::vector<float> cellToInputWeightsValue;
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{4};
    std::vector<float> cellToForgetWeightsValue{0.47485286f, -0.51955009f, -0.24458408f, 0.31544167f};
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{4};
    std::vector<float> cellToOutputWeightsValue{-0.17135078f, 0.82760304f, 0.85573703f, -0.77109635f};
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{0}; // VTS was {4} -> {0} ?
    std::vector<float> inputGateBiasValue;
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue(numUnits, 1.0f);
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue(numUnits, 0.0f);
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue(numUnits, 0.0f);
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{0};
    std::vector<float> projectionWeightsValue;
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{0};
    std::vector<float> projectionBiasValue;

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23:The input layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{0};
    std::vector<float> inputLayerNormWeightsValue;
    // 24:The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{0};
    std::vector<float> forgetLayerNormWeightsValue;
    // 25:The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{0};
    std::vector<float> cellLayerNormWeightsValue;
    // 26:The output layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{0};
    std::vector<float> outputLayerNormWeightsValue;

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 3};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 3, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue{-0.364445f, -0.00352185f, 0.128866f, -0.0516365f};
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue{-0.760444f, -0.0180416f, 0.182264f, -0.0649371f};
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue{-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f};

    LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                            inputToInputWeightsDimensions,         inputToInputWeightsValue,
                            inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                            inputToCellWeightsDimensions,          inputToCellWeightsValue,
                            inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                            recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                            recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                            recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                            recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                            cellToInputWeightsDimensions,          cellToInputWeightsValue,
                            cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                            cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                            inputGateBiasDimensions,               inputGateBiasValue,
                            forgetGateBiasDimensions,              forgetGateBiasValue,
                            cellBiasDimensions,                    cellBiasValue,
                            outputGateBiasDimensions,              outputGateBiasValue,
                            projectionWeightsDimensions,           projectionWeightsValue,
                            projectionBiasDimensions,              projectionBiasValue,
                            outputStateInDimensions,               outputStateInValue,
                            cellStateInDimensions,                 cellStateInValue,
                            activationFunctionDimensions,          activationFunctionValue,
                            cellClippingThresholdDimensions,       cellClippingThresholdValue,
                            projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                            inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                            forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                            cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                            outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                            scratchBufferDimensions,               scratchBufferValue,
                            outputStateOutDimensions,              outputStateOutValue,
                            cellStateOutDimensions,                cellStateOutValue,
                            outputDimensions,                      outputValue,
                            compute);
}

template <typename HalPolicy>
void LstmNoCifgPeepholeProjection(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/lstm3.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/lstm3.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 2;
    uint32_t inputSize = 5;
    uint32_t numUnits = 20;
    uint32_t outputSize = 16;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{0.787926f, 0.151646f, 0.071352f, 0.118426f, 0.458058f,
                                  0.295743f, 0.544053f, 0.690064f, 0.858138f, 0.497181f};

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToInputWeightsValue
    {
         0.0213936830f,  0.0612455100f,  0.0469051670f, -0.0146576770f, -0.0314946300f,
         0.0917180300f,  0.1464780100f,  0.1079719300f, -0.0057968358f,  0.0019193048f,
        -0.2726754000f,  0.1015402900f, -0.0185398850f,  0.0803498850f, -0.1026238500f,
        -0.0225997870f, -0.0912115500f, -0.0086759670f, -0.0452061030f, -0.0821282000f,
        -0.0080459520f,  0.0154780810f,  0.0552172470f,  0.0387195870f,  0.0441536270f,
        -0.0645324300f,  0.0503182500f, -0.0469351080f, -0.0081644309f,  0.0145742260f,
        -0.1671009000f, -0.1551955200f, -0.1681979700f, -0.1397126900f, -0.1195305900f,
         0.2500548700f, -0.2279098300f,  0.0098550870f, -0.0281409580f, -0.1120069800f,
         0.1129540800f, -0.0035217577f,  0.0544850750f,  0.0518469500f,  0.0647112060f,
         0.1098919300f,  0.1167478600f,  0.0349060700f,  0.0772735700f,  0.1139058500f,
        -0.1863375000f, -0.1034451000f, -0.1394518900f, -0.0494012270f, -0.1876706300f,
         0.0424839030f,  0.1423355200f,  0.1383258100f,  0.1835016500f,  0.1454560300f,
        -0.0285457040f,  0.0249395310f,  0.0509297180f,  0.0076203286f, -0.0029723682f,
        -0.0424842240f, -0.1182759600f, -0.0917110400f, -0.1080862800f, -0.1632798800f,
        -0.2273378000f, -0.0993647000f, -0.0171551070f,  0.0023917493f,  0.0492727640f,
         0.0038534778f,  0.0547645050f,  0.0897537840f,  0.0694723400f,  0.0801447600f,
        -0.0454423400f, -0.0497073000f, -0.0713563100f, -0.0489291060f, -0.0040420120f,
        -0.0092840260f,  0.0180420540f,  0.0036860977f, -0.0742730200f, -0.1143460400f,
        -0.0189954560f,  0.0314875430f,  0.0128349080f,  0.0199777540f,  0.0442566540f,
        -0.3929261300f, -0.1851933400f, -0.1165128100f, -0.0680989200f,  0.0113736770f
    };
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue
    {
        -0.0018401089f, -0.0048522370f,  0.0369842400f,  0.0141817040f,  0.0282732360f,
        -0.0167261940f, -0.0524975900f, -0.1020426100f,  0.0086106600f, -0.0409795050f,
        -0.0098991870f,  0.0192389200f, -0.0281772690f, -0.0853510300f, -0.1458549500f,
         0.1066256700f, -0.0190973100f, -0.0178835340f, -0.0047269356f, -0.0451033230f,
         0.0030784295f,  0.0767847750f,  0.0746369600f,  0.0945313950f,  0.0814421000f,
        -0.1225789900f, -0.0339457580f, -0.0313034650f,  0.0456306260f,  0.0684388700f,
        -0.1349294500f, -0.0124800070f, -0.0811829000f, -0.0722449900f, -0.0962879100f,
         0.0451009460f,  0.0012300825f,  0.0139646620f,  0.0993723940f,  0.0254305900f,
         0.0695832400f,  0.0342572960f,  0.0482646000f,  0.0626799700f,  0.0526250680f,
         0.1278466600f,  0.0707789700f,  0.0257259350f,  0.0416500900f,  0.0724190500f,
         0.0186686440f, -0.0373772940f, -0.0627778300f, -0.0883363600f, -0.0401206050f,
        -0.0114055860f, -0.0078083350f, -0.0103013860f, -0.0051021670f,  0.0277174640f,
         0.0548342300f,  0.1144911100f,  0.1128965200f,  0.1093983900f,  0.1339650600f,
        -0.0840216600f, -0.0190146200f, -0.0446783040f, -0.0772056500f,  0.0143500630f,
        -0.1175795800f, -0.0652038000f, -0.0818573300f, -0.0767543240f, -0.0926143750f,
         0.1040549100f,  0.0529603360f,  0.0357558950f,  0.0358393860f, -0.0125405530f,
         0.0368812980f,  0.0291337600f,  0.0342015900f,  0.0544844700f, -0.0545233530f,
         0.0258271500f,  0.0232735500f, -0.0118571790f, -0.0011980024f, -0.0346417170f,
        -0.0261250940f, -0.1758261500f, -0.1592365700f, -0.2748677400f, -0.0006143371f,
         0.0001771948f, -8.470171e-05f,  0.0265180700f,  0.0457907650f,  0.069564960f
    };
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue
    {
        -0.0458028300f, -0.0954946200f, -0.0324189850f, -0.0645463300f, -0.0435284530f,
         0.0430185870f, -0.0491523440f, -0.1241814400f, -0.0789854750f, -0.0759688900f,
         0.0194843620f, -0.1143496200f, -0.0074034138f, -0.0631484400f, -0.0929814950f,
         0.0062155537f, -0.0250343380f, -0.0028890965f,  0.0489295270f,  0.0623507500f,
         0.1066591800f, -0.0320367920f, -0.0850591600f, -0.1084335800f, -0.1300243300f,
        -0.0368164370f, -0.0213013400f, -0.0165182390f,  0.0047691227f, -0.0025825808f,
         0.0660178660f,  0.0299915340f, -0.1065283600f, -0.1037554000f, -0.1305607100f,
        -0.0326664300f, -0.0337024140f, -0.0064734240f, -0.0461169200f,  0.0144193390f,
        -0.0251743230f,  0.0396852000f,  0.0817775060f,  0.0615746800f,  0.1021009500f,
        -0.0096581940f,  0.0465117170f,  0.0360390600f,  0.0069369148f,  0.0159600950f,
        -0.0650766600f,  0.0955159800f,  0.0535688360f,  0.0640871400f,  0.1283566700f,
        -0.0087143290f, -0.2021196600f, -0.1209367400f,  0.0294504720f,  0.2849013000f,
        -0.0292279010f,  0.1164364000f, -0.0856026300f,  0.0994178600f, -0.0369995650f,
        -0.0288426260f, -0.0033637602f, -0.0170129020f, -0.0972086500f, -0.1119335100f,
        -0.0291551170f, -0.0179360340f, -0.0097689360f, -0.0422332400f, -0.0361596350f,
         0.0650511200f, -0.0217428920f, -0.0233772120f, -0.0722136400f, -0.0643055200f,
         0.0545386500f,  0.0911498140f,  0.0638733100f,  0.0075183930f,  0.0559609530f,
         0.0697793440f,  0.0464111680f,  0.1050991100f,  0.0746389400f,  0.0075130584f,
         0.0128509820f,  0.0455543100f,  0.0569556880f,  0.0655528500f,  0.0508014560f,
        -0.0098626830f,  0.0082677200f, -0.0265556090f, -0.0073611983f, -0.0014897042f
    };
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue
    {
        -0.0998932000f, -0.0720195600f, -0.0528037730f, -0.1562959300f, -0.1500191800f,
        -0.0765075100f,  0.0235985500f, -0.0751553550f, -0.0803770900f, -0.1509353400f,
         0.0295175520f, -0.0475139300f,  0.0103505310f, -0.0266485100f, -0.0168397220f,
        -0.0231211630f,  0.0077019283f,  0.0128512570f, -0.0504064900f, -0.0129761000f,
        -0.0217377470f, -0.0383057930f, -0.0687058600f, -0.0148124700f, -0.0012853940f,
         0.1012423600f,  0.0831228350f,  0.0533130060f, -0.0622356460f, -0.0756371540f,
        -0.0278339030f,  0.0297749710f,  0.1130802000f,  0.0921890600f,  0.0950613500f,
        -0.0866657640f, -0.0371627060f, -0.0388809140f, -0.0358328450f, -0.0144815640f,
        -0.0982500300f, -0.1204856900f, -0.0976655860f, -0.0528763300f, -0.0964047000f,
        -0.1136642900f,  0.0357775050f,  0.1356881900f,  0.0524513830f,  0.0506493040f,
         0.0579895100f, -0.0218523350f, -0.0998488440f,  0.0147404750f, -0.0788979460f,
         0.0497469900f,  0.0141604730f,  0.0697393200f,  0.0496494200f,  0.0333646460f,
         0.0819012400f,  0.0255353670f,  0.0508931650f,  0.0485142540f,  0.0694581300f,
        -0.0789075640f, -0.0670761600f, -0.1184450800f, -0.0998668800f, -0.0750940300f,
         0.0626322600f,  0.1492558700f,  0.2018843600f,  0.1209845100f,  0.1463941500f,
         0.0015017595f, -0.0142673820f, -0.0341725700f,  0.0127114680f,  0.0028300495f,
        -0.0247584820f, -0.0509854800f, -0.0821182000f,  0.0142256720f,  0.0215441580f,
         0.0894972500f,  0.0750526800f, -0.0020780868f,  0.0490825800f,  0.0647629500f,
        -0.0229070630f,  0.0275624560f,  0.0401857350f,  0.0195675770f, -0.0155987390f,
        -0.0490973030f, -0.0171218660f, -0.0833682340f, -0.0233200200f, -0.084095600f
    };
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToInputWeightsValue
    {
        -0.001374326f, -0.078856036f, 0.10672688f, 0.029162422f,        // 00
        -0.11585556f, 0.02557986f, -0.13446963f, -0.035785314f,
        -0.01244275f, 0.025961924f, -0.02337298f, -0.044228926f,
        -0.055839065f, -0.046598054f, -0.010546039f, -0.06900766f,
         0.027239809f, 0.022582639f, -0.013296484f, -0.05459212f,        // 01
         0.08981f, -0.045407712f, 0.08682226f, -0.06867011f,
        -0.14390695f, -0.02916037f, 0.000996957f, 0.091420636f,
         0.14283475f, -0.07390571f, -0.06402044f, 0.062524505f,
        -0.093129106f, 0.04860203f, -0.08364217f, -0.08119002f,         // 02
         0.009352075f, 0.22920375f, 0.0016303885f, 0.11583097f,
        -0.13732095f, 0.012405723f, -0.07551853f, 0.06343048f,
         0.12162708f, -0.031923793f, -0.014335606f, 0.01790974f,
        -0.10650317f, -0.0724401f, 0.08554849f, -0.05727212f,           // 03
         0.06556731f, -0.042729504f, -0.043227166f, 0.011683251f,
        -0.013082158f, -0.029302018f, -0.010899579f, -0.062036745f,
        -0.022509435f, -0.00964907f, -0.01567329f, 0.04260106f,
        -0.07787477f, -0.11576462f, 0.017356863f, 0.048673786f,         // 04
        -0.017577527f, -0.05527947f, -0.082487635f, -0.040137455f,
        -0.10820036f, -0.04666372f, 0.022746278f, -0.07851417f,
         0.01068115f, 0.032956902f, 0.022433773f, 0.0026891115f,
         0.08944216f, -0.0685835f, 0.010513544f, 0.07228705f,            // 05
         0.02032331f, -0.059686817f, -0.0005566496f, -0.086984694f,
         0.040414046f, -0.1380399f, 0.094208956f, -0.05722982f,
         0.012092817f, -0.04989123f, -0.086576f, -0.003399834f,
        -0.04696032f, -0.045747425f, 0.10091314f, 0.048676282f,         // 06
        -0.029037097f, 0.031399418f, -0.0040285117f, 0.047237843f,
         0.09504992f, 0.041799378f, -0.049185462f, -0.031518843f,
        -0.10516937f, 0.026374253f, 0.10058866f, -0.0033195973f,
        -0.041975245f, 0.0073591834f, 0.0033782164f, -0.004325073f,     // 07
        -0.10167381f, 0.042500053f, -0.01447153f, 0.06464186f,
        -0.017142897f, 0.03312627f, 0.009205989f, 0.024138335f,
        -0.011337001f, 0.035530265f, -0.010912711f, 0.0706555f,
        -0.005894094f, 0.051841937f, -0.1401738f, -0.02351249f,         // 08
         0.0365468f, 0.07590991f, 0.08838724f, 0.021681072f,
        -0.10086113f, 0.019608743f, -0.06195883f, 0.077335775f,
         0.023646897f, -0.095322326f, 0.02233014f, 0.09756986f,
        -0.048691444f, -0.009579111f, 0.07595467f, 0.11480546f,         // 09
        -0.09801813f, 0.019894179f, 0.08502348f, 0.004032281f,
         0.037211012f, 0.068537936f, -0.048005626f, -0.091520436f,
        -0.028379958f, -0.01556313f, 0.06554592f, -0.045599163f,
        -0.01672207f, -0.020169014f, -0.011877351f, -0.20212261f,       // 10
         0.010889619f, 0.0047078193f, 0.038385306f, 0.08540671f,
        -0.017140968f, -0.0035865551f, 0.016678626f, 0.005633034f,
         0.015963363f, 0.00871737f, 0.060130805f, 0.028611384f,
         0.10109069f, -0.015060172f, -0.07894427f, 0.06401885f,          // 11
         0.011584063f, -0.024466386f, 0.0047652307f, -0.09041358f,
         0.030737216f, -0.0046374933f, 0.14215417f, -0.11823516f,
         0.019899689f, 0.006106124f, -0.027092824f, 0.0786356f,
         0.05052217f, -0.058925f, -0.011402121f, -0.024987547f,          // 12
        -0.0013661642f, -0.06832946f, -0.015667673f, -0.1083353f,
        -0.00096863037f, -0.06988685f, -0.053350925f, -0.027275559f,
        -0.033664223f, -0.07978348f, -0.025200296f, -0.017207067f,
        -0.058403496f, -0.055697463f, 0.005798788f, 0.12965427f,        // 13
        -0.062582195f, 0.0013350133f, -0.10482091f, 0.0379771f,
         0.072521195f, -0.0029455067f, -0.13797039f, -0.03628521f,
         0.013806405f, -0.017858358f, -0.01008298f, -0.07700066f,
        -0.017081132f, 0.019358726f, 0.0027079724f, 0.004635139f,       // 14
         0.062634714f, -0.02338735f, -0.039547626f, -0.02050681f,
         0.03385117f, -0.083611414f, 0.002862572f, -0.09421313f,
         0.058618143f, -0.08598433f, 0.00972939f, 0.023867095f,
        -0.053934585f, -0.023203006f, 0.07452513f, -0.048767887f,       // 15
        -0.07314807f, -0.056307215f, -0.10433547f, -0.06440842f,
         0.04328182f, 0.04389765f, -0.020006588f, -0.09076438f,
        -0.11652589f, -0.021705797f, 0.03345259f, -0.010329105f,
        -0.025767034f, 0.013057034f, -0.07316461f, -0.10145612f,        // 16
         0.06358255f, 0.18531723f, 0.07759293f, 0.12006465f,
         0.1305557f, 0.058638252f, -0.03393652f, 0.09622831f,
        -0.16253184f, -2.4580743e-06f, 0.079869635f, -0.070196845f,
        -0.005644518f, 0.06857898f, -0.12598175f, -0.035084512f,        // 17
         0.03156317f, -0.12794146f, -0.031963028f, 0.04692781f,
         0.030070418f, 0.0071660685f, -0.095516115f, -0.004643372f,
         0.040170413f, -0.062104587f, -0.0037324072f, 0.0554317f,
         0.08184801f, -0.019164372f, 0.06791302f, 0.034257166f,          // 18
        -0.10307039f, 0.021943003f, 0.046745934f, 0.0790918f,
        -0.0265588f, -0.007824208f, 0.042546265f, -0.00977924f,
        -0.0002440307f, -0.017384544f, -0.017990116f, 0.12252321f,
        -0.014512694f, -0.08251313f, 0.08861942f, 0.13589665f,          // 19
         0.026351685f, 0.012641483f, 0.07466548f, 0.044301085f,
        -0.045414884f, -0.051112458f, 0.03444247f, -0.08502782f,
        -0.04106223f, -0.028126027f, 0.028473156f, 0.10467447f
    };
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue
    {
        -0.057784554f, -0.026057621f, -0.068447545f, -0.022581743f,     // 00
         0.14811787f, 0.10826372f, 0.09471067f, 0.03987225f,
        -0.0039523416f, 0.00030638507f, 0.053185795f, 0.10572994f,
         0.08414449f, -0.022036452f, -0.00066928595f, -0.09203576f,
         0.032950465f, -0.10985798f, -0.023809856f, 0.0021431844f,       // 01
        -0.02196096f, -0.00326074f, 0.00058621005f, -0.074678116f,
        -0.06193199f, 0.055729095f, 0.03736828f, 0.020123724f,
         0.061878487f, -0.04729229f, 0.034919553f, -0.07585433f,
        -0.04421272f, -0.044019096f, 0.085488975f, 0.04058006f,         // 02
        -0.06890133f, -0.030951202f, -0.024628663f, -0.07672815f,
         0.034293607f, 0.08556707f, -0.05293577f, -0.033561368f,
        -0.04899627f, 0.0241671f, 0.015736353f, -0.095442444f,
        -0.029564252f, 0.016493602f, -0.035026584f, 0.022337519f,       // 03
        -0.026871363f, 0.004780428f, 0.0077918363f, -0.03601621f,
         0.016435321f, -0.03263031f, -0.09543275f, -0.047392778f,
         0.013454138f, 0.028934088f, 0.01685226f, -0.086110644f,
        -0.046250615f, -0.01847454f, 0.047608484f, 0.07339695f,         // 04
         0.034546845f, -0.04881143f, 0.009128804f, -0.08802852f,
         0.03761666f, 0.008096139f, -0.014454086f, 0.014361001f,
        -0.023502491f, -0.0011840804f, -0.07607001f, 0.001856849f,
        -0.06509276f, -0.006021153f, -0.08570962f, -0.1451793f,         // 05
         0.060212336f, 0.055259194f, 0.06974018f, 0.049454916f,
        -0.027794661f, -0.08077226f, -0.016179763f, 0.1169753f,
         0.17213494f, -0.0056326236f, -0.053934924f, -0.0124349f,
        -0.11520337f, 0.05409887f, 0.088759385f, 0.0019655675f,         // 06
         0.0042065294f, 0.03881498f, 0.019844765f, 0.041858196f,
        -0.05695512f, 0.047233116f, 0.038937137f, -0.06542224f,
         0.014429736f, -0.09719407f, 0.13908425f, -0.05379757f,
         0.012321099f, 0.082840554f, -0.029899208f, 0.044217527f,        // 07
         0.059855383f, 0.07711018f, -0.045319796f, 0.0948846f,
        -0.011724666f, -0.0033288454f, -0.033542685f, -0.04764985f,
        -0.13873616f, 0.040668588f, 0.034832682f, -0.015319203f,
        -0.018715994f, 0.046002675f, 0.0599172f, -0.043107376f,         // 08
         0.0294216f, -0.002314414f, -0.022424703f, 0.0030315618f,
         0.0014641669f, 0.0029166266f, -0.11878115f, 0.013738511f,
         0.12375372f, -0.0006038222f, 0.029104086f, 0.087442465f,
         0.052958444f, 0.07558703f, 0.04817258f, 0.044462286f,           // 09
        -0.015213451f, -0.08783778f, -0.0561384f, -0.003008196f,
         0.047060397f, -0.002058388f, 0.03429439f, -0.018839769f,
         0.024734668f, 0.024614193f, -0.042046934f, 0.09597743f,
        -0.0043254104f, 0.04320769f, 0.0064070094f, -0.0019131786f,     // 10
        -0.02558259f, -0.022822596f, -0.023273505f, -0.02464396f,
        -0.10991725f, -0.006240552f, 0.0074488563f, 0.024044557f,
         0.04383914f, -0.046476185f, 0.028658995f, 0.060410924f,
         0.050786525f, 0.009452605f, -0.0073054377f, -0.024810238f,      // 11
         0.0052906186f, 0.0066939713f, -0.0020913032f, 0.014515517f,
         0.015898481f, 0.021362653f, -0.030262267f, 0.016587038f,
        -0.011442813f, 0.041154444f, -0.007631438f, -0.03423484f,
        -0.010977775f, 0.036152758f, 0.0066366293f, 0.11915515f,        // 12
         0.02318443f, -0.041350313f, 0.021485701f, -0.10906167f,
        -0.028218046f, -0.00954771f, 0.020531068f, -0.11995105f,
        -0.03672871f, 0.024019798f, 0.014255957f, -0.05221243f,
        -0.00661567f, -0.04630967f, 0.033188973f, 0.10107534f,          // 13
        -0.014027541f, 0.030796422f, -0.10270911f, -0.035999842f,
         0.15443139f, 0.07684145f, 0.036571592f, -0.035900835f,
        -0.0034699554f, 0.06209149f, 0.015920248f, -0.031122351f,
        -0.03858649f, 0.01849943f, 0.13872518f, 0.01503974f,            // 14
         0.069941424f, -0.06948533f, -0.0088794185f, 0.061282158f,
        -0.047401894f, 0.03100163f, -0.041533746f, -0.10430945f,
         0.044574402f, -0.01425562f, -0.024290353f, 0.034563623f,
         0.05866852f, 0.023947537f, -0.09445152f, 0.035450947f,          // 15
         0.02247216f, -0.0042998926f, 0.061146557f, -0.10250651f,
         0.020881841f, -0.06747029f, 0.10062043f, -0.0023941975f,
         0.03532124f, -0.016341697f, 0.09685456f, -0.016764693f,
         0.051808182f, 0.05875331f, -0.04536488f, 0.001626336f,          // 16
        -0.028892258f, -0.01048663f, -0.009793449f, -0.017093895f,
         0.010987891f, 0.02357273f, -0.00010856845f, 0.0099760275f,
        -0.001845119f, -0.03551521f, 0.0018358806f, 0.05763657f,
        -0.01769146f, 0.040995963f, 0.02235177f, -0.060430344f,         // 17
         0.11475477f, -0.023854522f, 0.10071741f, 0.0686208f,
        -0.014250481f, 0.034261297f, 0.047418304f, 0.08562733f,
        -0.030519066f, 0.0060542435f, 0.014653856f, -0.038836084f,
         0.04096551f, 0.032249358f, -0.08355519f, -0.026823482f,         // 18
         0.056386515f, -0.010401743f, -0.028396193f, 0.08507674f,
         0.014410365f, 0.020995233f, 0.17040324f, 0.11511526f,
         0.02459721f, 0.0066619175f, 0.025853224f, -0.023133837f,
        -0.081302024f, 0.017264642f, -0.009585969f, 0.09491168f,        // 19
        -0.051313367f, 0.054532815f, -0.014298593f, 0.10657464f,
         0.007076659f, 0.10964551f, 0.0409152f, 0.008275321f,
        -0.07283536f, 0.07937492f, 0.04192024f, -0.1075027f
    };
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue
    {
        -0.037322544f, 0.018592842f, 0.0056175636f, -0.06253426f,
         0.055647098f, -0.05713207f, -0.05626563f, 0.005559383f,
         0.03375411f, -0.025757805f, -0.088049285f, 0.06017052f,
        -0.06570978f, 0.007384076f, 0.035123326f, -0.07920549f,
         0.053676967f, 0.044480428f, -0.07663568f, 0.0071805613f,
         0.08089997f, 0.05143358f, 0.038261272f, 0.03339287f,
        -0.027673481f, 0.044746667f, 0.028349208f, 0.020090483f,
        -0.019443132f, -0.030755889f, -0.0040000007f, 0.04465846f,
        -0.021585021f, 0.0031670958f, 0.0053199246f, -0.056117613f,
        -0.10893326f, 0.076739706f, -0.08509834f, -0.027997585f,
         0.037871376f, 0.01449768f, -0.09002357f, -0.06111149f,
        -0.046195522f, 0.0422062f, -0.005683705f, -0.1253618f,
        -0.012925729f, -0.04890792f, 0.06985068f, 0.037654128f,
         0.03398274f, -0.004781977f, 0.007032333f, -0.031787455f,
         0.010868644f, -0.031489216f, 0.09525667f, 0.013939797f,
         0.0058680447f, 0.0167067f, 0.02668468f, -0.04797466f,
        -0.048885044f, -0.12722108f, 0.035304096f, 0.06554885f,
         0.00972396f, -0.039238118f, -0.05159735f, -0.11329045f,
         0.1613692f, -0.03750952f, 0.06529313f, -0.071974665f,
        -0.11769596f, 0.015524369f, -0.0013754242f, -0.12446318f,
         0.02786344f, -0.014179351f, 0.005264273f, 0.14376344f,
         0.015983658f, 0.03406988f, -0.06939408f, 0.040699873f,
         0.02111075f, 0.09669095f, 0.041345075f, -0.08316494f,
        -0.07684199f, -0.045768797f, 0.032298047f, -0.041805092f,
         0.0119405f, 0.0061010392f, 0.12652606f, 0.0064572375f,
        -0.024950314f, 0.11574242f, 0.04508852f, -0.04335324f,
         0.06760663f, -0.027437469f, 0.07216407f, 0.06977076f,
        -0.05438599f, 0.034033038f, -0.028602652f, 0.05346137f,
         0.043184172f, -0.037189785f, 0.10420091f, 0.00882477f,
        -0.054019816f, -0.074273005f, -0.030617684f, -0.0028467078f,
         0.024302477f, -0.0038869337f, 0.005332455f, 0.0013399826f,
         0.04361412f, -0.007001822f, 0.09631092f, -0.06702025f,
        -0.042049985f, -0.035070654f, -0.04103342f, -0.10273396f,
         0.0544271f, 0.037184782f, -0.13150354f, -0.0058036847f,
        -0.008264958f, 0.042035464f, 0.05891794f, 0.029673764f,
         0.0063542654f, 0.044788733f, 0.054816857f, 0.062257513f,
        -0.00093483756f, 0.048938446f, -0.004952862f, -0.007730018f,
        -0.04043371f, -0.017094059f, 0.07229206f, -0.023670016f,
        -0.052195564f, -0.025616996f, -0.01520939f, 0.045104615f,
        -0.007376126f, 0.003533447f, 0.006570588f, 0.056037236f,
         0.12436656f, 0.051817212f, 0.028532185f, -0.08686856f,
         0.11868599f, 0.07663395f, -0.07323171f, 0.03463402f,
        -0.050708205f, -0.04458982f, -0.11590894f, 0.021273347f,
         0.1251325f, -0.15313013f, -0.12224372f, 0.17228661f,
         0.023029093f, 0.086124025f, 0.006445803f, -0.03496501f,
         0.028332196f, 0.04449512f, -0.042436164f, -0.026587414f,
        -0.006041347f, -0.09292539f, -0.05678812f, 0.03897832f,
         0.09465633f, 0.008115513f, -0.02171956f, 0.08304309f,
         0.071401566f, 0.019622514f, 0.032163795f, -0.004167056f,
         0.02295182f, 0.030739572f, 0.056506045f, 0.004612461f,
         0.06524936f, 0.059999723f, 0.046395954f, -0.0045512207f,
        -0.1335546f, -0.030136576f, 0.11584653f, -0.014678886f,
         0.0020118146f, -0.09688814f, -0.0790206f, 0.039770417f,
        -0.0329582f, 0.07922767f, 0.029322514f, 0.026405897f,
         0.04207835f, -0.07073373f, 0.063781224f, 0.0859677f,
        -0.10925287f, -0.07011058f, 0.048005477f, 0.03438226f,
        -0.09606514f, -0.006669445f, -0.043381985f, 0.04240257f,
        -0.06955775f, -0.06769346f, 0.043903265f, -0.026784198f,
        -0.017840602f, 0.024307009f, -0.040079936f, -0.019946516f,
         0.045318738f, -0.12233574f, 0.026170589f, 0.0074471775f,
         0.15978073f, 0.10185836f, 0.10298046f, -0.015476589f,
        -0.039390966f, -0.072174534f, 0.0739445f, -0.1211869f,
        -0.0347889f, -0.07943156f, 0.014809798f, -0.12412325f,
        -0.0030663363f, 0.039695457f, 0.0647603f, -0.08291318f,
        -0.018529687f, -0.004423833f, 0.0037507233f, 0.084633216f,
        -0.01514876f, -0.056505352f, -0.012800942f, -0.06994386f,
         0.012962922f, -0.031234352f, 0.07029052f, 0.016418684f,
         0.03618972f, 0.055686004f, -0.08663945f, -0.017404709f,
        -0.054761406f, 0.029065743f, 0.052404847f, 0.020238016f,
         0.0048197987f, -0.0214882f, 0.07078733f, 0.013016777f,
         0.06262858f, 0.009184685f, 0.020785125f, -0.043904778f,
        -0.0270329f, -0.03299152f, -0.060088247f, -0.015162964f,
        -0.001828936f, 0.12642565f, -0.056757294f, 0.013586685f,
         0.09232601f, -0.035886683f, 0.06000002f, 0.05229691f,
        -0.052580316f, -0.082029596f, -0.010794592f, 0.012947712f,
        -0.036429964f, -0.085508935f, -0.13127148f, -0.017744139f,
         0.031502828f, 0.036232427f, -0.031581745f, 0.023051167f,
        -0.05325106f, -0.03421577f, 0.028793324f, -0.034633752f,
        -0.009881397f, -0.043551125f, -0.018609839f, 0.0019097115f,
        -0.008799762f, 0.056595087f, 0.0022273948f, 0.055752404f
    };
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue
    {
         0.025825322f, -0.05813119f, 0.09495884f, -0.045984812f,
        -0.01255415f, -0.0026479573f, -0.08196161f, -0.054914974f,
        -0.0046604523f, -0.029587349f, -0.044576716f, -0.07480124f,
        -0.082868785f, 0.023254942f, 0.027502948f, -0.0039728214f,
        -0.08683098f, -0.08116779f, -0.014675607f, -0.037924774f,
        -0.023314456f, -0.007401714f, -0.09255757f, 0.029460307f,
        -0.08829125f, -0.005139627f, -0.08989442f, -0.0555066f,
         0.13596267f, -0.025062224f, -0.048351806f, -0.03850004f,
         0.07266485f, -0.022414139f, 0.05940088f, 0.075114764f,
         0.09597592f, -0.010211725f, -0.0049794707f, -0.011523867f,
        -0.025980417f, 0.072999895f, 0.11091378f, -0.081685916f,
         0.014416728f, 0.043229222f, 0.034178585f, -0.07530371f,
         0.035837382f, -0.085607f, -0.007721233f, -0.03287832f,
        -0.043848954f, -0.06404588f, -0.06632928f, -0.073643476f,
         0.008214239f, -0.045984086f, 0.039764922f, 0.03474462f,
         0.060612556f, -0.080590084f, 0.049127717f, 0.04151091f,
        -0.030063879f, 0.008801774f, -0.023021035f, -0.019558564f,
         0.05158114f, -0.010947698f, -0.011825728f, 0.0075720972f,
         0.0699727f, -0.0039981045f, 0.069350146f, 0.08799282f,
         0.016156472f, 0.035502106f, 0.11695009f, 0.006217345f,
         0.13392477f, -0.037875112f, 0.025745004f, 0.08940699f,
        -0.00924166f, 0.0046702605f, -0.036598757f, -0.08811812f,
         0.10522024f, -0.032441203f, 0.008176899f, -0.04454919f,
         0.07058152f, 0.0067963637f, 0.039206743f, 0.03259838f,
         0.03725492f, -0.09515802f, 0.013326398f, -0.052055415f,
        -0.025676316f, 0.03198509f, -0.015951829f, -0.058556724f,
         0.036879618f, 0.043357447f, 0.028362012f, -0.05908629f,
         0.0059240665f, -0.04995891f, -0.019187413f, 0.0276265f,
        -0.01628143f, 0.0025863599f, 0.08800015f, 0.035250366f,
        -0.022165963f, -0.07328642f, -0.009415526f, -0.07455109f,
         0.11690406f, 0.0363299f, 0.07411125f, 0.042103454f,
        -0.009660886f, 0.019076364f, 0.018299393f, -0.046004917f,
         0.08891175f, 0.0431396f, -0.026327137f, -0.051502608f,
         0.08979574f, -0.051670972f, 0.04940282f, -0.07491107f,
        -0.021240504f, 0.022596184f, -0.034280192f, 0.060163025f,
        -0.058211457f, -0.051837247f, -0.01349775f, -0.04639988f,
        -0.035936575f, -0.011681591f, 0.064818054f, 0.0073146066f,
        -0.021745546f, -0.043124277f, -0.06471268f, -0.07053354f,
        -0.029321948f, -0.05330136f, 0.016933719f, -0.053782392f,
         0.13747959f, -0.1361751f, -0.11569455f, 0.0033329215f,
         0.05693899f, -0.053219706f, 0.063698f, 0.07977434f,
        -0.07924483f, 0.06936997f, 0.0034815092f, -0.007305279f,
        -0.037325785f, -0.07251102f, -0.033633437f, -0.08677009f,
         0.091591336f, -0.14165086f, 0.021752775f, 0.019683983f,
         0.0011612234f, -0.058154266f, 0.049996935f, 0.0288841f,
        -0.0024567875f, -0.14345716f, 0.010955264f, -0.10234828f,
         0.1183656f, -0.0010731248f, -0.023590032f, -0.072285876f,
        -0.0724771f, -0.026382286f, -0.0014920527f, 0.042667855f,
         0.0018776858f, 0.02986552f, 0.009814309f, 0.0733756f,
         0.12289186f, 0.018043943f, -0.0458958f, 0.049412545f,
         0.033632483f, 0.05495232f, 0.036686596f, -0.013781798f,
        -0.010036754f, 0.02576849f, -0.08307328f, 0.010112348f,
         0.042521734f, -0.05869831f, -0.071689695f, 0.03876447f,
        -0.13275425f, -0.0352966f, -0.023077697f, 0.10285965f,
         0.084736146f, 0.15568255f, -0.00040734606f, 0.027835453f,
        -0.10292561f, -0.032401145f, 0.10053256f, -0.026142767f,
        -0.08271222f, -0.0030240538f, -0.016368777f, 0.1070414f,
         0.042672627f, 0.013456989f, -0.0437609f, -0.022309763f,
         0.11576483f, 0.04108048f, 0.061026827f, -0.0190714f,
        -0.0869359f, 0.037901703f, 0.0610107f, 0.07202949f,
         0.01675338f, 0.086139716f, -0.08795751f, -0.014898893f,
        -0.023771819f, -0.01965048f, 0.007955471f, -0.043740474f,
         0.03346837f, -0.10549954f, 0.090567775f, 0.042013682f,
        -0.03176985f, 0.12569028f, -0.02421228f, -0.029526481f,
         0.023851605f, 0.031539805f, 0.05292009f, -0.02344001f,
        -0.07811758f, -0.08834428f, 0.10094801f, 0.16594367f,
        -0.06861939f, -0.021256343f, -0.041093912f, -0.06669611f,
         0.035498552f, 0.021757556f, -0.09302526f, -0.015403468f,
        -0.06614931f, -0.051798206f, -0.013874718f, 0.03630673f,
         0.010412845f, -0.08077351f, 0.046185967f, 0.0035662893f,
         0.03541868f, -0.094149634f, -0.034814864f, 0.003128424f,
        -0.020674974f, -0.03944324f, -0.008110165f, -0.11113267f,
         0.08484226f, 0.043586485f, 0.040582247f, 0.0968012f,
        -0.065249965f, -0.028036479f, 0.0050708856f, 0.0017462453f,
         0.0326779f, 0.041296225f, 0.09164146f, -0.047743853f,
        -0.015952192f, -0.034451712f, 0.084197424f, -0.05347844f,
        -0.11768019f, 0.085926116f, -0.08251791f, -0.045081906f,
         0.0948852f, 0.068401024f, 0.024856757f, 0.06978981f,
        -0.057309967f, -0.012775832f, -0.0032452994f, 0.01977615f,
        -0.041040014f, -0.024264973f, 0.063464895f, 0.05431621f
    };
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{numUnits};
    std::vector<float> cellToInputWeightsValue
    {
         0.040369894f, 0.030746894f, 0.24704495f, 0.018586371f, -0.037586458f,
        -0.15312155f, -0.11812848f, -0.11465643f, 0.20259799f, 0.11418174f,
        -0.10116027f, -0.011334949f, 0.12411352f, -0.076769054f, -0.052169047f,
         0.21198851f, -0.38871562f, -0.09061183f, -0.09683246f, -0.21929175f
    };
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{numUnits};
    std::vector<float> cellToForgetWeightsValue
    {
        -0.01998659f, -0.15568835f, -0.24248174f, -0.012770197f, 0.041331276f,
        -0.072311886f, -0.052123554f, -0.0066330447f, -0.043891653f, 0.036225766f,
        -0.047248036f, 0.021479502f, 0.033189066f, 0.11952997f, -0.020432774f,
         0.64658105f, -0.06650122f, -0.03467612f, 0.095340036f, 0.23647355f
    };
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{numUnits};
    std::vector<float> cellToOutputWeightsValue
    {
         0.08286371f, -0.08261836f, -0.51210177f, 0.002913762f, 0.17764764f,
        -0.5495371f, -0.08460716f, -0.24552552f, 0.030037103f, 0.04123544f,
        -0.11940523f, 0.007358328f, 0.1890978f, 0.4833202f, -0.34441817f,
         0.36312827f, -0.26375428f, 0.1457655f, -0.19724406f, 0.15548733f
    };
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{numUnits};
    std::vector<float> inputGateBiasValue
    {
         0.02234832f, 0.14757581f, 0.18176508f, 0.10380666f, 0.053110216f,
        -0.06928846f, -0.13942584f, -0.11816189f, 0.19483899f, 0.03652339f,
        -0.10250295f, 0.036714908f, -0.18426876f, 0.036065217f, 0.21810818f,
         0.02383196f, -0.043370757f, 0.08690144f, -0.04444982f, 0.00030581196f
    };
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue
    {
        0.035185695f, -0.042891346f, -0.03032477f, 0.23027696f, 0.11098921f,
        0.15378423f, 0.09263801f, 0.09790885f, 0.09508917f, 0.061199076f,
        0.07665568f, -0.015443159f, -0.03499149f, 0.046190713f, 0.08895977f,
        0.10899629f, 0.40694186f, 0.06030037f, 0.012413437f, -0.06108739f
    };
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue
    {
        -0.024379363f, 0.0055531194f, 0.23377132f, 0.033463873f, -0.1483596f,
        -0.10639995f, -0.091433935f, 0.058573797f, -0.06809782f, -0.07889636f,
        -0.043246906f, -0.09829136f, -0.4279842f, 0.034901652f, 0.18797937f,
         0.0075234566f, 0.016178843f, 0.1749513f, 0.13975595f, 0.92058027f
    };
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue
    {
         0.046159424f, -0.0012809046f, 0.03563469f, 0.12648113f, 0.027195795f,
         0.35373217f, -0.018957434f, 0.008907322f, -0.0762701f, 0.12018895f,
         0.04216877f, 0.0022856654f, 0.040952638f, 0.3147856f, 0.08225149f,
        -0.057416286f, -0.14995944f, -0.008040261f, 0.13208859f, 0.029760877f
    };
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{outputSize, numUnits};
    std::vector<float> projectionWeightsValue
    {
        -0.009802181f, 0.09401916f, 0.0717386f, -0.13895074f, 0.09641832f,
         0.060420845f, 0.08539281f, 0.054285463f, 0.061395317f, 0.034448683f,
        -0.042991187f, 0.019801661f, -0.16840284f, -0.015726732f, -0.23041931f,
        -0.024478018f, -0.10959692f, -0.013875541f, 0.18600968f, -0.061274476f,
         0.0138165f, -0.08160894f, -0.07661644f, 0.032372914f, 0.16169067f,
         0.22465782f, -0.03993472f, -0.004017731f, 0.08633481f, -0.28869787f,
         0.08682067f, 0.17240396f, 0.014975425f, 0.056431185f, 0.031037588f,
         0.16702051f, 0.0077946745f, 0.15140012f, 0.29405436f, 0.120285f,
        -0.188994f, -0.027265169f, 0.043389652f, -0.022061434f, 0.014777949f,
        -0.20203483f, 0.094781205f, 0.19100232f, 0.13987629f, -0.036132768f,
        -0.06426278f, -0.05108664f, 0.13221376f, 0.009441198f, -0.16715929f,
         0.15859416f, -0.040437475f, 0.050779544f, -0.022187516f, 0.012166504f,
         0.027685808f, -0.07675938f, -0.0055694645f, -0.09444123f, 0.0046453946f,
         0.050794356f, 0.10770313f, -0.20790008f, -0.07149004f, -0.11425117f,
         0.008225835f, -0.035802525f, 0.14374903f, 0.15262283f, 0.048710253f,
         0.1847461f, -0.007487823f, 0.11000021f, -0.09542012f, 0.22619456f,
        -0.029149994f, 0.08527916f, 0.009043713f, 0.0042746216f, 0.016261552f,
         0.022461696f, 0.12689082f, -0.043589946f, -0.12035478f, -0.08361797f,
        -0.050666027f, -0.1248618f, -0.1275799f, -0.071875185f, 0.07377272f,
         0.09944291f, -0.18897448f, -0.1593054f, -0.06526116f, -0.040107165f,
        -0.004618631f, -0.067624845f, -0.007576253f, 0.10727444f, 0.041546922f,
        -0.20424393f, 0.06907816f, 0.050412357f, 0.00724631f, 0.039827548f,
         0.12449835f, 0.10747581f, 0.13708383f, 0.09134148f, -0.12617786f,
        -0.06428341f, 0.09956831f, 0.1208086f, -0.14676677f, -0.0727722f,
         0.1126304f, 0.010139365f, 0.015571211f, -0.038128063f, 0.022913318f,
        -0.042050496f, 0.16842307f, -0.060597885f, 0.10531834f, -0.06411776f,
        -0.07451711f, -0.03410368f, -0.13393489f, 0.06534304f, 0.003620307f,
         0.04490757f, 0.05970546f, 0.05197996f, 0.02839995f, 0.10434969f,
        -0.013699693f, -0.028353551f, -0.07260381f, 0.047201227f, -0.024575593f,
        -0.036445823f, 0.07155557f, 0.009672501f, -0.02328883f, 0.009533515f,
        -0.03606021f, -0.07421458f, -0.028082801f, -0.2678904f, -0.13221288f,
         0.18419984f, -0.13012612f, -0.014588381f, -0.035059117f, -0.04824723f,
         0.07830115f, -0.056184657f, 0.03277091f, 0.025466874f, 0.14494097f,
        -0.12522776f, -0.098633975f, -0.10766018f, -0.08317623f, 0.08594209f,
         0.07749552f, 0.039474737f, 0.1776665f, -0.07409566f, -0.0477268f,
         0.29323658f, 0.10801441f, 0.1154011f, 0.013952499f, 0.10739139f,
         0.10708251f, -0.051456142f, 0.0074137426f, -0.10430189f, 0.10034707f,
         0.045594677f, 0.0635285f, -0.0715442f, -0.089667566f, -0.10811871f,
         0.00026344223f, 0.08298446f, -0.009525053f, 0.006585689f, -0.24567553f,
        -0.09450807f, 0.09648481f, 0.026996298f, -0.06419476f, -0.04752702f,
        -0.11063944f, -0.23441927f, -0.17608605f, -0.052156363f, 0.067035615f,
         0.19271925f, -0.0032889997f, -0.043264326f, 0.09663576f, -0.057112187f,
        -0.10100678f, 0.0628376f, 0.04447668f, 0.017961001f, -0.10094388f,
        -0.10190601f, 0.18335468f, 0.10494553f, -0.052095775f, -0.0026118709f,
         0.10539724f, -0.04383912f, -0.042349473f, 0.08438151f, -0.1947263f,
         0.02251204f, 0.11216432f, -0.10307853f, 0.17351969f, -0.039091777f,
         0.08066188f, -0.00561982f, 0.12633002f, 0.11335965f, -0.0088127935f,
        -0.019777594f, 0.06864014f, -0.059751723f, 0.016233567f, -0.06894641f,
        -0.28651384f, -0.004228674f, 0.019708522f, -0.16305895f, -0.07468996f,
        -0.0855457f, 0.099339016f, -0.07580735f, -0.13775392f, 0.08434318f,
         0.08330512f, -0.12131499f, 0.031935584f, 0.09180414f, -0.08876437f,
        -0.08049874f, 0.008753825f, 0.03498998f, 0.030215185f, 0.03907079f,
         0.089751154f, 0.029194152f, -0.03337423f, -0.019092513f, 0.04331237f,
         0.04299654f, -0.036394123f, -0.12915532f, 0.09793732f, 0.07512415f,
        -0.11319543f, -0.032502122f, 0.15661901f, 0.07671967f, -0.005491124f,
        -0.19379048f, -0.218606f, 0.21448623f, 0.017840758f, 0.1416943f,
        -0.07051762f, 0.19488361f, 0.02664691f, -0.18104725f, -0.09334311f,
         0.15026465f, -0.15493552f, -0.057762887f, -0.11604192f, -0.262013f,
        -0.01391798f, 0.012185008f, 0.11156489f, -0.07483202f, 0.06693364f,
        -0.26151478f, 0.046425626f, 0.036540434f, -0.16435726f, 0.17338543f,
        -0.21401681f, -0.11385144f, -0.08283257f, -0.069031075f, 0.030635102f,
         0.010969227f, 0.11109743f, 0.010919218f, 0.027526086f, 0.13519906f,
         0.01891392f, -0.046839405f, -0.040167913f, 0.017953383f, -0.09700955f,
         0.0061885654f, -0.07000971f, 0.026893595f, -0.038844477f, 0.14543656f
    };
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{outputSize};
    std::vector<float> projectionBiasValue(outputSize, 0.0f);

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23:The input layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{0};
    std::vector<float> inputLayerNormWeightsValue;
    // 24:The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{0};
    std::vector<float> forgetLayerNormWeightsValue;
    // 25:The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{0};
    std::vector<float> cellLayerNormWeightsValue;
    // 26:The output layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{0};
    std::vector<float> outputLayerNormWeightsValue;

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 4};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 4, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue
    {
        -0.00396806f, 0.029352f, -0.00279226f, 0.0159977f, -0.00835577f, -0.0211779f, 0.0283512f, -0.0114597f,
         0.00907307f, -0.0244004f, -0.0152191f, -0.0259063f, 0.00914318f, 0.00415119f, 0.017147f, 0.0134203f,
        -0.013869f, 0.0287268f, -0.00334694f, 0.00733397f, -0.0287926f, -0.0186926f, 0.0193662f, -0.0115437f,
         0.00422612f, -0.0345232f, 0.00223253f, -0.00957321f, 0.0210624f, 0.013331f, 0.0150954f, 0.0216801f
    };
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue
    {
        -0.0531632f, -0.0118138f, 0.0870833f, 0.0347929f, -0.076144f,
        -0.0659219f, -0.0463811f, 0.0141307f, -0.0127706f, -0.03782f,
        -0.00402401f, -0.00571876f, -0.187957f, -0.0247127f, 0.0711425f,
         0.008244f, 0.0492649f, 0.126972f, 0.0933097f, 0.29848f,
        -0.0966178f, -0.114417f, 0.0387229f, 0.0453255f, -0.181286f,
        -0.0651251f, -0.0996879f, -0.00276995f, 0.0617558f, -0.0100728f,
         0.056304f, -0.077416f, -0.162858f, -0.0541251f, 0.0571202f,
        -0.0525331f, 0.0724297f, 0.171029f, 0.141738f, 0.295483f
    };
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue
    {
        -0.00396806f, 0.029352f, -0.00279226f, 0.0159977f, -0.00835576f, -0.0211779f, 0.0283512f, -0.0114597f,
         0.00907307f, -0.0244004f, -0.0152191f, -0.0259063f, 0.00914318f, 0.00415118f, 0.017147f, 0.0134203f,
        -0.013869f, 0.0287268f, -0.00334693f, 0.00733398f, -0.0287926f, -0.0186926f, 0.0193662f, -0.0115437f,
         0.00422612f, -0.0345232f, 0.00223253f, -0.00957321f, 0.0210624f, 0.013331f, 0.0150954f, 0.02168f
    };

    LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                            inputToInputWeightsDimensions,         inputToInputWeightsValue,
                            inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                            inputToCellWeightsDimensions,          inputToCellWeightsValue,
                            inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                            recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                            recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                            recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                            recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                            cellToInputWeightsDimensions,          cellToInputWeightsValue,
                            cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                            cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                            inputGateBiasDimensions,               inputGateBiasValue,
                            forgetGateBiasDimensions,              forgetGateBiasValue,
                            cellBiasDimensions,                    cellBiasValue,
                            outputGateBiasDimensions,              outputGateBiasValue,
                            projectionWeightsDimensions,           projectionWeightsValue,
                            projectionBiasDimensions,              projectionBiasValue,
                            outputStateInDimensions,               outputStateInValue,
                            cellStateInDimensions,                 cellStateInValue,
                            activationFunctionDimensions,          activationFunctionValue,
                            cellClippingThresholdDimensions,       cellClippingThresholdValue,
                            projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                            inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                            forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                            cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                            outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                            scratchBufferDimensions,               scratchBufferValue,
                            outputStateOutDimensions,              outputStateOutValue,
                            cellStateOutDimensions,                cellStateOutValue,
                            outputDimensions,                      outputValue,
                            compute);
}

template <typename HalPolicy>
void LstmCifgPeepholeNoProjectionBatch2(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/lstm2.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/lstm2.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).
    // The batch size has been increased to 2 (it was 1 in the VTS test) with appropriate input and output values added.

    uint32_t batchSize = 2;
    uint32_t inputSize = 2;
    uint32_t numUnits = 4;
    uint32_t outputSize = numUnits;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{2.0f, 3.0f, 3.0f, 4.0f};

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{0};
    std::vector<float> inputToInputWeightsValue;
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue{-0.55291498f, -0.42866567f,
                                                  0.13056988f, -0.36333650f,
                                                 -0.22755712f,  0.28253698f,
                                                  0.24407166f,  0.33826375f};
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue{-0.49770179f, -0.27711356f,
                                               -0.09624726f,  0.05100781f,
                                                0.04717243f,  0.48944736f,
                                               -0.38535351f, -0.17212132f};
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue{ 0.10725588f, -0.02335852f,
                                                 -0.55932593f, -0.09426838f,
                                                 -0.44257352f,  0.54939759f,
                                                  0.01533556f,  0.42751634f};
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{0}; // VTS was {4, 4} -> {0} ?
    std::vector<float> recurrentToInputWeightsValue;
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue{-0.13832897f, -0.05151010f, -0.23590070f, -0.16661474f,
                                                     -0.14340827f,  0.36986142f,  0.23414481f,  0.55899000f,
                                                      0.10798943f, -0.41174671f,  0.17751795f, -0.34484994f,
                                                     -0.35874045f, -0.11352962f,  0.27268326f,  0.54058349f};
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue{ 0.54066205f, -0.32668582f, -0.43562764f, -0.56094903f,
                                                    0.42957711f,  0.01841056f, -0.32764608f, -0.33027974f,
                                                   -0.10826075f,  0.20675004f,  0.19069612f, -0.03026325f,
                                                   -0.54532051f,  0.33003211f,  0.44901288f,  0.21193194f};
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue{0.41613156f,  0.42610586f, -0.16495961f, -0.56638730f,
                                                     0.30579174f, -0.05115908f, -0.33941799f,  0.23364776f,
                                                     0.11178309f,  0.09481031f, -0.26424935f,  0.46261835f,
                                                     0.50248802f,  0.26114327f, -0.43736315f,  0.33149987f};
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{0};
    std::vector<float> cellToInputWeightsValue;
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{numUnits};
    std::vector<float> cellToForgetWeightsValue{0.47485286f, -0.51955009f, -0.24458408f, 0.31544167f};
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{numUnits};
    std::vector<float> cellToOutputWeightsValue{-0.17135078f, 0.82760304f, 0.85573703f, -0.77109635f};
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{0}; // VTS was {4} -> {0} ?
    std::vector<float> inputGateBiasValue;
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue{1.0f, 1.0f, 1.0f, 1.0f};
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue(numUnits, 0.0f);
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue(numUnits, 0.0f);
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{0};
    std::vector<float> projectionWeightsValue;
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{0};
    std::vector<float> projectionBiasValue;

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23:The input layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{0};
    std::vector<float> inputLayerNormWeightsValue;
    // 24:The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{0};
    std::vector<float> forgetLayerNormWeightsValue;
    // 25:The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{0};
    std::vector<float> cellLayerNormWeightsValue;
    // 26:The output layer normalization weights. A 1-D tensor of shape [num_units].
    //    Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{0};
    std::vector<float> outputLayerNormWeightsValue;

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 3};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 3, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue{-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f,
                                           -0.42734814f, -0.00478661f, 0.13455015f, -0.03560682f};
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue{-0.76044439f, -0.01804161f, 0.18226376f, -0.06493707f,
                                         -0.90477051f, -0.04355603f, 0.18475688f, -0.04158677f};
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue{-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f,
                                   -0.42734814f, -0.00478661f, 0.13455015f, -0.03560682f};

    LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                            inputToInputWeightsDimensions,         inputToInputWeightsValue,
                            inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                            inputToCellWeightsDimensions,          inputToCellWeightsValue,
                            inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                            recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                            recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                            recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                            recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                            cellToInputWeightsDimensions,          cellToInputWeightsValue,
                            cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                            cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                            inputGateBiasDimensions,               inputGateBiasValue,
                            forgetGateBiasDimensions,              forgetGateBiasValue,
                            cellBiasDimensions,                    cellBiasValue,
                            outputGateBiasDimensions,              outputGateBiasValue,
                            projectionWeightsDimensions,           projectionWeightsValue,
                            projectionBiasDimensions,              projectionBiasValue,
                            outputStateInDimensions,               outputStateInValue,
                            cellStateInDimensions,                 cellStateInValue,
                            activationFunctionDimensions,          activationFunctionValue,
                            cellClippingThresholdDimensions,       cellClippingThresholdValue,
                            projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                            inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                            forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                            cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                            outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                            scratchBufferDimensions,               scratchBufferValue,
                            outputStateOutDimensions,              outputStateOutValue,
                            cellStateOutDimensions,                cellStateOutValue,
                            outputDimensions,                      outputValue,
                            compute);
}

template <typename HalPolicy>
void LstmNoCifgPeepholeProjectionNoClippingLayerNorm(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/layer_norm_lstm.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/layer_norm_lstm.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 2;
    uint32_t inputSize = 5;
    uint32_t numUnits = 4;
    uint32_t outputSize = 3;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{ 0.7f,  0.8f,  0.1f,  0.2f,  0.3f,  // batch 0
                                   0.3f,  0.2f,  0.9f,  0.8f,  0.1f}; // batch 1

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToInputWeightsValue{ 0.5,  0.6,  0.7, -0.8, -0.9,
                                                 0.1,  0.2,  0.3, -0.4,  0.5,
                                                -0.8,  0.7, -0.6,  0.5, -0.4,
                                                -0.5, -0.4, -0.3, -0.2, -0.1};
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue{-0.6, -0.1,  0.3,  0.2,  0.9,
                                                 -0.5, -0.2, -0.4,  0.3, -0.8,
                                                 -0.4,  0.3, -0.5, -0.4, -0.6,
                                                  0.3, -0.4, -0.6, -0.5, -0.5};
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue{-0.4, -0.3, -0.2, -0.1, -0.5,
                                                0.5, -0.2, -0.3, -0.2, -0.6,
                                                0.6, -0.1, -0.4, -0.3, -0.7,
                                                0.7, -0.9, -0.5,  0.8,  0.6};
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue{-0.8, -0.4, -0.2, -0.9, -0.1,
                                                 -0.7,  0.3, -0.3, -0.8, -0.2,
                                                  0.6, -0.2,  0.4, -0.7, -0.3,
                                                 -0.5,  0.1,  0.5, -0.6, -0.4};
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToInputWeightsValue{-0.2, -0.3,  0.4,
                                                     0.1, -0.5,  0.9,
                                                    -0.2, -0.3, -0.7,
                                                    0.05, -0.2, -0.6};
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue{-0.5, -0.3, -0.5,
                                                     -0.2,  0.6,  0.4,
                                                      0.9,  0.3, -0.1,
                                                      0.2,  0.5,  0.2};
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue{-0.3,  0.2,  0.1,
                                                   -0.3,  0.8,-0.08,
                                                   -0.2,  0.3,  0.8,
                                                   -0.6, -0.1,  0.2};
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue{ 0.3, -0.1,  0.1,
                                                     -0.2, -0.5, -0.7,
                                                     -0.2, -0.6, -0.1,
                                                     -0.4, -0.7, -0.2};
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{numUnits};
    std::vector<float> cellToInputWeightsValue{0.05, 0.1, 0.25, 0.15};
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{numUnits};
    std::vector<float> cellToForgetWeightsValue{-0.02, -0.15, -0.25, -0.03};
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{numUnits};
    std::vector<float> cellToOutputWeightsValue{0.1, -0.1, -0.5, 0.05};
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{numUnits};
    std::vector<float> inputGateBiasValue{0.03, 0.15, 0.22, 0.38};
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue{0.1, -0.3, -0.2, 0.1};
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue{-0.05, 0.72, 0.25, 0.08};
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue{0.05, -0.01, 0.2, 0.1};
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{numUnits, outputSize};
    std::vector<float> projectionWeightsValue{-0.1,  0.2, 0.01,
                                              -0.2,  0.1,  0.5,
                                               0.3, 0.08, 0.07,
                                               0.2, -0.4,  0.2};
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{outputSize};
    std::vector<float> projectionBiasValue(outputSize, 0.0f);
    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23: The input layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{numUnits};
    std::vector<float> inputLayerNormWeightsValue{0.1, 0.2, 0.3, 0.5};
    // 24: The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{numUnits};
    std::vector<float> forgetLayerNormWeightsValue{0.2, 0.2, 0.4, 0.3};
    // 25: The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{numUnits};
    std::vector<float> cellLayerNormWeightsValue{0.7, 0.2, 0.3, 0.8};
    // 26: The output layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{numUnits};
    std::vector<float> outputLayerNormWeightsValue{0.6, 0.2, 0.2, 0.5};

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 4};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 4, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue { 0.02440767f,  0.12802738f, -0.00170918f,
                                            -0.00692428f,  0.08487406f,  0.06344498f};
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue {-0.45177122f,  0.37691566f,  0.22542511f,  0.23240635f,
                                          -0.25258583f,  0.33042118f,  0.01730525f,  0.36660123f};
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue{ 0.02440767f, 0.12802738f, -0.00170918f,
                                   -0.00692428f, 0.08487406f,  0.06344498f};

   LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                           inputToInputWeightsDimensions,         inputToInputWeightsValue,
                           inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                           inputToCellWeightsDimensions,          inputToCellWeightsValue,
                           inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                           recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                           recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                           recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                           recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                           cellToInputWeightsDimensions,          cellToInputWeightsValue,
                           cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                           cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                           inputGateBiasDimensions,               inputGateBiasValue,
                           forgetGateBiasDimensions,              forgetGateBiasValue,
                           cellBiasDimensions,                    cellBiasValue,
                           outputGateBiasDimensions,              outputGateBiasValue,
                           projectionWeightsDimensions,           projectionWeightsValue,
                           projectionBiasDimensions,              projectionBiasValue,
                           outputStateInDimensions,               outputStateInValue,
                           cellStateInDimensions,                 cellStateInValue,
                           activationFunctionDimensions,          activationFunctionValue,
                           cellClippingThresholdDimensions,       cellClippingThresholdValue,
                           projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                           inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                           forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                           cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                           outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                           scratchBufferDimensions,               scratchBufferValue,
                           outputStateOutDimensions,              outputStateOutValue,
                           cellStateOutDimensions,                cellStateOutValue,
                           outputDimensions,                      outputValue,
                           compute);
}

template <typename HalPolicy>
void LstmCifgPeepholeProjectionNoClippingLayerNorm(armnn::Compute compute)
{
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/layer_norm_lstm.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/layer_norm_lstm.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 2;
    uint32_t inputSize = 5;
    uint32_t numUnits = 4;
    uint32_t outputSize = 3;

    // Inputs:
    // 00: The input: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, input_size], where
    //     “batch_size” corresponds to the batching dimension, and “input_size” is the size of the input.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<float> inputValue{ 0.7f, 0.8f, 0.1f, 0.2f, 0.3f,  // batch 0
                                   0.3f, 0.2f, 0.9f, 0.8f, 0.1f}; // batch 1

    // 01: The input-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size], where “num_units” corresponds to the number of cell units.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{0};
    std::vector<float> inputToInputWeightsValue;
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToForgetWeightsValue{-0.6, -0.1,  0.3,  0.2,  0.9,
                                                 -0.5, -0.2, -0.4,  0.3, -0.8,
                                                 -0.4,  0.3, -0.5, -0.4, -0.6,
                                                  0.3, -0.4, -0.6, -0.5, -0.5};
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    hidl_vec<uint32_t> inputToCellWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToCellWeightsValue{-0.4, -0.3, -0.2, -0.1, -0.5,
                                                0.5, -0.2, -0.3, -0.2, -0.6,
                                                0.6, -0.1, -0.4, -0.3, -0.7,
                                                0.7, -0.9, -0.5,  0.8,  0.6};
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{numUnits, inputSize};
    std::vector<float> inputToOutputWeightsValue{-0.8, -0.4, -0.2, -0.9, -0.1,
                                                 -0.7,  0.3, -0.3, -0.8, -0.2,
                                                  0.6, -0.2,  0.4, -0.7, -0.3,
                                                 -0.5,  0.1,  0.5, -0.6, -0.4};
    // 05: The recurrent-to-input weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size], where “output_size” corresponds to either the number of cell units (i.e.,
    //     “num_units”), or the second dimension of the “projection_weights”, if defined.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{0};
    std::vector<float> recurrentToInputWeightsValue;
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToForgetWeightsValue{-0.5, -0.3, -0.5,
                                                     -0.2,  0.6,  0.4,
                                                      0.9,  0.3, -0.1,
                                                      0.2,  0.5,  0.2};
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToCellWeightsValue{-0.3,  0.2,  0.1,
                                                   -0.3,  0.8,-0.08,
                                                   -0.2,  0.3,  0.8,
                                                   -0.6, -0.1,  0.2};
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{numUnits, outputSize};
    std::vector<float> recurrentToOutputWeightsValue{  0.3, -0.1,  0.1,
                                                      -0.2, -0.5, -0.7,
                                                      -0.2, -0.6, -0.1,
                                                      -0.4, -0.7, -0.2};
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToInputWeightsDimensions{0};
    std::vector<float> cellToInputWeightsValue;
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToForgetWeightsDimensions{numUnits};
    std::vector<float> cellToForgetWeightsValue{-0.02, -0.15, -0.25, -0.03};
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellToOutputWeightsDimensions{numUnits};
    std::vector<float> cellToOutputWeightsValue{0.1, -0.1, -0.5, 0.05};
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> inputGateBiasDimensions{0};
    std::vector<float> inputGateBiasValue;
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions{numUnits};
    std::vector<float> forgetGateBiasValue{0.1, -0.3, -0.2, 0.1};
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> cellBiasDimensions{numUnits};
    std::vector<float> cellBiasValue{-0.05, 0.72, 0.25, 0.08};
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions{numUnits};
    std::vector<float> outputGateBiasValue{0.05, -0.01, 0.2, 0.1};
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    hidl_vec<uint32_t> projectionWeightsDimensions{numUnits, outputSize};
    std::vector<float> projectionWeightsValue{-0.1,  0.2, 0.01,
                                              -0.2,  0.1,  0.5,
                                               0.3, 0.08, 0.07,
                                               0.2, -0.4,  0.2};
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    hidl_vec<uint32_t> projectionBiasDimensions{outputSize};
    std::vector<float> projectionBiasValue(outputSize, 0.0f);
    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateInDimensions{batchSize, outputSize};
    std::vector<float> outputStateInValue(batchSize * outputSize, 0.0f);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions{batchSize, numUnits};
    std::vector<float> cellStateInValue(batchSize * numUnits, 0.0f);

    // Constant scalar values (the VTS test adds these as tensors of dim {})
    // 20: The activation function: A value indicating the activation function:
    //     0: None; 1: Relu; 3: Relu6; 4: Tanh; 6: Sigmoid.
    hidl_vec<uint32_t> activationFunctionDimensions{};
    std::vector<int32_t> activationFunctionValue{4};
    // 21: The clipping threshold: for the cell state, such that values are bound within [-cell_clip, cell_clip].
    //     If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> cellClippingThresholdDimensions{};
    std::vector<float> cellClippingThresholdValue{0.0f};
    // 22: The clipping threshold: for the output from the projection layer, such that values are bound within
    //     [-proj_clip, proj_clip]. If set to 0.0 then clipping is disabled.
    hidl_vec<uint32_t> projectionClippingThresholdDimensions{};
    std::vector<float> projectionClippingThresholdValue{0.0f};

    // Normalization:
    // 23: The input layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at input gate.
    hidl_vec<uint32_t> inputLayerNormWeightsDimensions{numUnits};
    std::vector<float> inputLayerNormWeightsValue{0.1, 0.2, 0.3, 0.5};
    // 24: The forget layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at forget gate.
    hidl_vec<uint32_t> forgetLayerNormWeightsDimensions{numUnits};
    std::vector<float> forgetLayerNormWeightsValue{0.2, 0.2, 0.4, 0.3};
    // 25: The cell layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at cell gate.
    hidl_vec<uint32_t> cellLayerNormWeightsDimensions{numUnits};
    std::vector<float> cellLayerNormWeightsValue{0.7, 0.2, 0.3, 0.8};
    // 26: The output layer normalization weights. A 1-D tensor of shape [num_units].
    //     Used to rescale normalized inputs to activation at output gate.
    hidl_vec<uint32_t> outputLayerNormWeightsDimensions{numUnits};
    std::vector<float> outputLayerNormWeightsValue{0.6, 0.2, 0.2, 0.5};

    // Outputs:
    //  0: The scratch buffer: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units * 4] with
    //     CIFG, or [batch_size, num_units * 3] without CIFG.
    // HOWEVER, by looking at the code, seems that it's the opposite: (cifg ? 3 : 4) * numUnits
    // Refer to: android/frameworks/ml/nn/common/operations/LSTM.cpp:319
    //           android/frameworks/ml/nn/common/operations/LSTMTest.cpp:114
    //           tensorflow/tensorflow/contrib/lite/kernels/lstm.cc:332
    hidl_vec<uint32_t> scratchBufferDimensions{batchSize, numUnits * 3};
    std::vector<float> scratchBufferValue(batchSize * numUnits * 3, 0.0f);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions{batchSize, outputSize};
    std::vector<float> outputStateOutValue { 0.02129706f,  0.14081624f,  0.01127331f,
                                            -0.02263505f,  0.09169482f,  0.07691758f};
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, numUnits};
    std::vector<float> cellStateOutValue{-0.35102980f,  0.42610350f,  0.21463650f,  0.27716520f,
                                         -0.18855170f,  0.32522000f,  0.02036650f,  0.48967660f};
    //  3: The output: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size]. This is
    //     effectively the same as the current “output state (out)” value.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<float> outputValue{ 0.02129706f,  0.14081624f,  0.01127331f,
                                   -0.02263505f,  0.09169482f,  0.07691758f};

    LstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                            inputToInputWeightsDimensions,         inputToInputWeightsValue,
                            inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                            inputToCellWeightsDimensions,          inputToCellWeightsValue,
                            inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                            recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                            recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                            recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                            recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                            cellToInputWeightsDimensions,          cellToInputWeightsValue,
                            cellToForgetWeightsDimensions,         cellToForgetWeightsValue,
                            cellToOutputWeightsDimensions,         cellToOutputWeightsValue,
                            inputGateBiasDimensions,               inputGateBiasValue,
                            forgetGateBiasDimensions,              forgetGateBiasValue,
                            cellBiasDimensions,                    cellBiasValue,
                            outputGateBiasDimensions,              outputGateBiasValue,
                            projectionWeightsDimensions,           projectionWeightsValue,
                            projectionBiasDimensions,              projectionBiasValue,
                            outputStateInDimensions,               outputStateInValue,
                            cellStateInDimensions,                 cellStateInValue,
                            activationFunctionDimensions,          activationFunctionValue,
                            cellClippingThresholdDimensions,       cellClippingThresholdValue,
                            projectionClippingThresholdDimensions, projectionClippingThresholdValue,
                            inputLayerNormWeightsDimensions,       inputLayerNormWeightsValue,
                            forgetLayerNormWeightsDimensions,      forgetLayerNormWeightsValue,
                            cellLayerNormWeightsDimensions,        cellLayerNormWeightsValue,
                            outputLayerNormWeightsDimensions,      outputLayerNormWeightsValue,
                            scratchBufferDimensions,               scratchBufferValue,
                            outputStateOutDimensions,              outputStateOutValue,
                            cellStateOutDimensions,                cellStateOutValue,
                            outputDimensions,                      outputValue,
                            compute);
}

template <typename HalPolicy>
void QuantizedLstm(armnn::Compute compute)
{
    armnn::IgnoreUnused(compute);
    // This replicates android/frameworks/ml/nn/runtime/test/generated/vts_models/quantized_lstm.model.cpp
    // with values from android/frameworks/ml/nn/runtime/test/generated/examples/quantized_lstm.example.cpp
    // and weights, biases and scalars passed as CONSTANT_COPY tensors (instead of MODEL_INPUT tensors).

    uint32_t batchSize = 2;
    uint32_t inputSize = 2;
    uint32_t outputSize = 4;

    // Inputs:
    // 0: The input: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape [numBatches, inputSize]
    //    specifying the input to the LSTM cell. Tensor is quantized with a fixed quantization range of -1, 127/128.
    hidl_vec<uint32_t> inputDimensions{batchSize, inputSize};
    std::vector<uint8_t> inputValue{166, 179, 50, 150};

    // 1: The input-to-input weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-input part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> inputToInputWeightsDimensions{outputSize, inputSize};
    std::vector<uint8_t> inputToInputWeightsValue{146, 250, 235, 171, 10, 218, 171, 108};
    // 2: The input-to-forget weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-forget part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> inputToForgetWeightsDimensions{outputSize, inputSize};
    std::vector<uint8_t> inputToForgetWeightsValue{24, 50, 132, 179, 158, 110, 3, 169};
    // 3: The input-to-cell weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-cell part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> inputToCellWeightsDimensions{outputSize, inputSize};
    std::vector<uint8_t> inputToCellWeightsValue{133, 34, 29, 49, 206, 109, 54, 183};
    // 4: The input-to-output weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, inputSize] specifying input-to-output part of weights for fully-connected layer inside the
    //    LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> inputToOutputWeightsDimensions{outputSize, inputSize};
    std::vector<uint8_t> inputToOutputWeightsValue{195, 187, 11, 99, 109, 10, 218, 48};
    // 5: The recurrent-to-input weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-input part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> recurrentToInputWeightsDimensions{outputSize, outputSize};
    std::vector<uint8_t> recurrentToInputWeightsValue{254, 206, 77,  168, 71, 20,  215, 6,
                                                      223, 7,   118, 225, 59, 130, 174, 26};
    // 6: The recurrent-to-forget weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-forget part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> recurrentToForgetWeightsDimensions{outputSize, outputSize};
    std::vector<uint8_t> recurrentToForgetWeightsValue{137, 240, 103, 52, 68, 51, 237, 112,
                                                       0,   220, 89,  23, 69, 4,  207, 253};
    // 7: The recurrent-to-cell weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-cell part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> recurrentToCellWeightsDimensions{outputSize, outputSize};
    std::vector<uint8_t> recurrentToCellWeightsValue{172, 60,  205, 65, 14,  0,  140, 168,
                                                     240, 223, 133, 56, 142, 64, 246, 216};
    // 8: The recurrent-to-output weights. A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //    [outputSize, outputSize] specifying recurrent-to-output part of weights for fully-connected layer inside
    //    the LSTM cell. Quantization zero point and scale must be the same across all the weights.
    hidl_vec<uint32_t> recurrentToOutputWeightsDimensions{outputSize, outputSize};
    std::vector<uint8_t> recurrentToOutputWeightsValue{106, 214, 67, 23,  59,  158, 45, 3,
                                                       119, 132, 49, 205, 129, 218, 11, 98};
    // 9: The input gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying the
    //    bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //    of input and weights scales and zeroPoint equal to 0.
    hidl_vec<uint32_t> inputGateBiasDimensions{outputSize};
    std::vector<int32_t> inputGateBiasValue{-7876, 13488, -726, 32839};
    // 10: The forget gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying
    //     the bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //     of input and weights scales and zeroPoint equal to 0.
    hidl_vec<uint32_t> forgetGateBiasDimensions{outputSize};
    std::vector<int32_t> forgetGateBiasValue{9206, -46884, -11693, -38724};
    // 11:The cell bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying the bias
    //    for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product of input
    //    and weights scales and zeroPoint equal to 0.
    hidl_vec<uint32_t> cellBiasDimensions{outputSize};
    std::vector<int32_t> cellBiasValue{39481, 48624, 48976, -21419};
    // 12:The output gate bias. A 1-D tensor of type ANEURALNETWORKS_TENSOR_INT32 and shape [outputSize] specifying
    //    the bias for the fully-connected layer inside the LSTM cell. Bias is quantized with scale being a product
    //    of input and weights scales and zeroPoint equal to 0.
    hidl_vec<uint32_t> outputGateBiasDimensions{outputSize};
    std::vector<int32_t> outputGateBiasValue{-58999, -17050, -41852, -40538};

    //13: The previous cell state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT16_SYMM and shape
    //    [numBatches, outputSize] specifying the cell state from the previous time step of the LSTM cell.
    //    It is quantized using a quantization range of -2^4, 2^4 * 32767/32768.
    hidl_vec<uint32_t> previousCellStateInDimensions{batchSize, outputSize};
    std::vector<int16_t> previousCellStateInValue{876, 1034, 955, -909, 761, 1029, 796, -1036};
    // 14: The previous output state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape
    //     [numBathes, outputSize] specifying the output of the LSTM cell from previous time-step. Tensor
    //     is quantized with a fixed quantization range of -1, 127/128.
    hidl_vec<uint32_t> previousOutputInDimensions{batchSize, outputSize};
    std::vector<uint8_t> previousOutputInValue{136, 150, 140, 115, 135, 152, 138, 112};

    // 0: The cell state: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT16_SYMM and shape [numBatches, outputSize]
    //    which contains a cell state from the current time step. Tensor is quantized using a quantization range
    //    of -2^4, 2^4 * 32767/32768.
    hidl_vec<uint32_t> cellStateOutDimensions{batchSize, outputSize};
    std::vector<int16_t> cellStateOutValue {1485, 1177, 1373, -1023, 1019, 1355, 1097, -1235};
    // 1: The output: A 2-D tensor of type ANEURALNETWORKS_TENSOR_QUANT8_ASYMM and shape [numBathes, outputSize] which
    //      contains the output value. Tensor is quantized with a fixed quantization range of -1, 127/128.
    hidl_vec<uint32_t> outputDimensions{batchSize, outputSize};
    std::vector<uint8_t> outputValue {140, 151, 146, 112, 136, 156, 142, 112};


    QuantizedLstmTestImpl<HalPolicy>(inputDimensions,                       inputValue,
                                     inputToInputWeightsDimensions,         inputToInputWeightsValue,
                                     inputToForgetWeightsDimensions,        inputToForgetWeightsValue,
                                     inputToCellWeightsDimensions,          inputToCellWeightsValue,
                                     inputToOutputWeightsDimensions,        inputToOutputWeightsValue,
                                     recurrentToInputWeightsDimensions,     recurrentToInputWeightsValue,
                                     recurrentToForgetWeightsDimensions,    recurrentToForgetWeightsValue,
                                     recurrentToCellWeightsDimensions,      recurrentToCellWeightsValue,
                                     recurrentToOutputWeightsDimensions,    recurrentToOutputWeightsValue,
                                     inputGateBiasDimensions,               inputGateBiasValue,
                                     forgetGateBiasDimensions,              forgetGateBiasValue,
                                     cellBiasDimensions,                    cellBiasValue,
                                     outputGateBiasDimensions,              outputGateBiasValue,
                                     previousOutputInDimensions,            previousOutputInValue,
                                     previousCellStateInDimensions,         previousCellStateInValue,
                                     cellStateOutDimensions,                cellStateOutValue,
                                     outputDimensions,                      outputValue);
}
