//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "DriverTestHelpers.hpp"
#include <boost/test/unit_test.hpp>
#include <boost/math/special_functions/relative_difference.hpp>
#include <log/log.h>

#include "OperationsUtils.h"

#include <cmath>

BOOST_AUTO_TEST_SUITE(LstmTests)

using ArmnnDriver = armnn_driver::ArmnnDriver;
using DriverOptions = armnn_driver::DriverOptions;
using namespace driverTestHelpers;
using namespace android::hardware;

namespace
{

template<typename T>
RequestArgument CreateRequestArgument(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;
}

} // namespace

// Add our own tests here since we fail the lstm tests which Google supplies (because of non-const weights)

void LstmTestImpl(hidl_vec<uint32_t> inputDimensions,
                  std::vector<float> inputValue,
                  hidl_vec<uint32_t> inputToInputWeightsDimensions,
                  float*             inputToInputWeightsValue,
                  hidl_vec<uint32_t> inputToForgetWeightsDimensions,
                  float*             inputToForgetWeightsValue,
                  hidl_vec<uint32_t> inputToCellWeightsDimensions,
                  float*             inputToCellWeightsValue,
                  hidl_vec<uint32_t> inputToOutputWeightsDimensions,
                  float*             inputToOutputWeightsValue,
                  hidl_vec<uint32_t> recurrentToInputWeightsDimensions,
                  float*             recurrentToInputWeightsValue,
                  hidl_vec<uint32_t> recurrentToForgetWeightsDimensions,
                  float*             recurrentToForgetWeightsValue,
                  hidl_vec<uint32_t> recurrentToCellWeightsDimensions,
                  float*             recurrentToCellWeightsValue,
                  hidl_vec<uint32_t> recurrentToOutputWeightsDimensions,
                  float*             recurrentToOutputWeightsValue,
                  hidl_vec<uint32_t> cellToInputWeightsDimensions,
                  float*             cellToInputWeightsValue,
                  hidl_vec<uint32_t> cellToForgetWeightsDimensions,
                  float*             cellToForgetWeightsValue,
                  hidl_vec<uint32_t> cellToOutputWeightsDimensions,
                  float*             cellToOutputWeightsValue,
                  hidl_vec<uint32_t> inputGateBiasDimensions,
                  float*             inputGateBiasValue,
                  hidl_vec<uint32_t> forgetGateBiasDimensions,
                  float*             forgetGateBiasValue,
                  hidl_vec<uint32_t> cellBiasDimensions,
                  float*             cellBiasValue,
                  hidl_vec<uint32_t> outputGateBiasDimensions,
                  float*             outputGateBiasValue,
                  hidl_vec<uint32_t> projectionWeightsDimensions,
                  float*             projectionWeightsValue,
                  hidl_vec<uint32_t> projectionBiasDimensions,
                  float*             projectionBiasValue,
                  hidl_vec<uint32_t> outputStateInDimensions,
                  std::vector<float> outputStateInValue,
                  hidl_vec<uint32_t> cellStateInDimensions,
                  std::vector<float> cellStateInValue,
                  hidl_vec<uint32_t> activationFunctionDimensions,
                  int32_t*           activationFunctionValue,
                  hidl_vec<uint32_t> cellClippingThresholdDimensions,
                  float*             cellClippingThresholdValue,
                  hidl_vec<uint32_t> projectionClippingThresholdDimensions,
                  float*             projectionClippingThresholdValue,
                  hidl_vec<uint32_t> scratchBufferDimensions,
                  std::vector<float> scratchBufferValue,
                  hidl_vec<uint32_t> outputStateOutDimensions,
                  std::vector<float> outputStateOutValue,
                  hidl_vec<uint32_t> cellStateOutDimensions,
                  std::vector<float> cellStateOutValue,
                  hidl_vec<uint32_t> outputDimensions,
                  std::vector<float> outputValue)
{
    auto driver = std::make_unique<ArmnnDriver>(DriverOptions(armnn::Compute::GpuAcc));
    V1_0::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(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(model, inputToInputWeightsDimensions, inputToInputWeightsValue);
    // 02: The input-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    AddTensorOperand(model, inputToForgetWeightsDimensions, inputToForgetWeightsValue);
    // 03: The input-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units, input_size].
    AddTensorOperand(model, inputToCellWeightsDimensions, inputToCellWeightsValue);
    // 04: The input-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, input_size].
    AddTensorOperand(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(model, recurrentToInputWeightsDimensions, recurrentToInputWeightsValue);
    // 06: The recurrent-to-forget weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand(model, recurrentToForgetWeightsDimensions, recurrentToForgetWeightsValue);
    // 07: The recurrent-to-cell weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand(model, recurrentToCellWeightsDimensions, recurrentToCellWeightsValue);
    // 08: The recurrent-to-output weights: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [num_units, output_size].
    AddTensorOperand(model, recurrentToOutputWeightsDimensions, recurrentToOutputWeightsValue);
    // 09: The cell-to-input weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, cellToInputWeightsDimensions, cellToInputWeightsValue);
    // 10: The cell-to-forget weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, cellToForgetWeightsDimensions, cellToForgetWeightsValue);
    // 11: The cell-to-output weights: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, cellToOutputWeightsDimensions, cellToOutputWeightsValue);
    // 12: The input gate bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, inputGateBiasDimensions, inputGateBiasValue);
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, forgetGateBiasDimensions, forgetGateBiasValue);
    // 14: The cell bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, cellBiasDimensions, cellBiasValue);
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    AddTensorOperand(model, outputGateBiasDimensions, outputGateBiasValue);
    // 16: The projection weights: Optional. A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape
    //     [output_size, num_units].
    AddTensorOperand(model, projectionWeightsDimensions, projectionWeightsValue);
    // 17: The projection bias: Optional. A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [output_size].
    AddTensorOperand(model, projectionBiasDimensions, projectionBiasValue);

    // 18: The output state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    AddInputOperand(model, outputStateInDimensions);
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    AddInputOperand(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(model, activationFunctionDimensions,
                     activationFunctionValue, 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(model, cellClippingThresholdDimensions,
                     cellClippingThresholdValue, 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(model, projectionClippingThresholdDimensions,
                     projectionClippingThresholdValue, OperandType::FLOAT32);

    // 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(model, scratchBufferDimensions);
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    AddOutputOperand(model, outputStateOutDimensions);
    //  2: The cell state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    AddOutputOperand(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(model, outputDimensions);

    // make the lstm operation
    model.operations.resize(1);
    model.operations[0].type = V1_0::OperationType::LSTM;
    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);

    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(scratchBufferValue.size(), request);
    android::sp<IMemory> outputStateOutMemory = AddPoolAndGetData(outputStateOutValue.size(), request);
    float* outputStateOutData = static_cast<float*>(static_cast<void*>(outputStateOutMemory->getPointer()));
    android::sp<IMemory> cellStateOutMemory = AddPoolAndGetData(cellStateOutValue.size(), request);
    float* cellStateOutData = static_cast<float*>(static_cast<void*>(cellStateOutMemory->getPointer()));
    android::sp<IMemory> outputMemory = AddPoolAndGetData(outputValue.size(), request);
    float* outputData = static_cast<float*>(static_cast<void*>(outputMemory->getPointer()));

    // make the prepared model and run the execution
    android::sp<IPreparedModel> preparedModel = PrepareModel(model, *driver);
    if (preparedModel.get() != nullptr)
    {
        Execute(preparedModel, 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]);
    }
}

BOOST_AUTO_TEST_CASE(LstmNoCifgNoPeepholeNoProjection)
{
    // 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).

    // 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({1, 2});
    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({4, 2});
    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({4, 2});
    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({4, 2});
    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({4, 2});
    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({4, 4});
    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({4, 4});
    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({4, 4});
    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({4, 4});
    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});
    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});
    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});
    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({4});
    float inputGateBiasValue[] = {0.0f, 0.0f, 0.0f, 0.0f};
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions({4});
    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({4});
    float cellBiasValue[] = {0.0f, 0.0f, 0.0f, 0.0f};
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions({4});
    float outputGateBiasValue[] = {0.0f, 0.0f, 0.0f, 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});
    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});
    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({1, 4});
    std::vector<float> outputStateInValue {0, 0, 0, 0};
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions({1, 4});
    std::vector<float> cellStateInValue {0, 0, 0, 0};

    // 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({});
    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({});
    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({});
    float projectionClippingThresholdValue[] = {0.0f};

    // 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.
    hidl_vec<uint32_t> scratchBufferDimensions({1, 12});
    std::vector<float> scratchBufferValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions({1, 4});
    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({1, 4});
    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({1, 4});
    std::vector<float> outputValue {-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f};

    LstmTestImpl(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,
                 scratchBufferDimensions,               scratchBufferValue,
                 outputStateOutDimensions,              outputStateOutValue,
                 cellStateOutDimensions,                cellStateOutValue,
                 outputDimensions,                      outputValue);
}

BOOST_AUTO_TEST_CASE(LstmCifgPeepholeNoProjection)
{
    // 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).

    // 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({1, 2});
    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});
    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({4, 2});
    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({4, 2});
    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({4, 2});
    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} ?
    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({4, 4});
    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({4, 4});
    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({4, 4});
    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});
    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});
    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});
    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} ?
    float inputGateBiasValue[] = {};
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions({4});
    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({4});
    float cellBiasValue[] = {0.0f, 0.0f, 0.0f, 0.0f};
    // 15: The output gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> outputGateBiasDimensions({4});
    float outputGateBiasValue[] = {0.0f, 0.0f, 0.0f, 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});
    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});
    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({1, 4});
    std::vector<float> outputStateInValue {0, 0, 0, 0};
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions({1, 4});
    std::vector<float> cellStateInValue {0, 0, 0, 0};

    // 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({});
    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({});
    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({});
    float projectionClippingThresholdValue[] = {0.0f};

    // 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.
    hidl_vec<uint32_t> scratchBufferDimensions({1, 16});                // VTS was {1, 12} -> {1, 16}
    std::vector<float> scratchBufferValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions({1, 4});
    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({1, 4});
    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({1, 4});
    std::vector<float> outputValue {-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f};

    LstmTestImpl(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,
                 scratchBufferDimensions,               scratchBufferValue,
                 outputStateOutDimensions,              outputStateOutValue,
                 cellStateOutDimensions,                cellStateOutValue,
                 outputDimensions,                      outputValue);
}

BOOST_AUTO_TEST_CASE(LstmNoCifgPeepholeProjection)
{
    // 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).

    // 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({2, 5});
    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({20, 5});
    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({20, 5});
    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({20, 5});
    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({20, 5});
    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({20, 16});
    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({20, 16});
    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({20, 16});
    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({20, 16});
    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({20});
    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({20});
    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({20});
    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({20});
    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({20});
    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({20});
    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({20});
    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({16, 20});
    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({0});
    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({2, 16});
    std::vector<float> outputStateInValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    // 19: The cell state: A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, num_units].
    hidl_vec<uint32_t> cellStateInDimensions({2, 20});
    std::vector<float> cellStateInValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

    // 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({});
    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({});
    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({});
    float projectionClippingThresholdValue[] = {0.0f};

    // 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.
    hidl_vec<uint32_t> scratchBufferDimensions({2, 60});
    std::vector<float> scratchBufferValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    //  1: The output state (out): A 2-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [batch_size, output_size].
    hidl_vec<uint32_t> outputStateOutDimensions({2, 16});
    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({2, 20});
    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({2, 16});
    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(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,
                 scratchBufferDimensions,               scratchBufferValue,
                 outputStateOutDimensions,              outputStateOutValue,
                 cellStateOutDimensions,                cellStateOutValue,
                 outputDimensions,                      outputValue);
}

BOOST_AUTO_TEST_CASE(LstmCifgPeepholeNoProjectionBatch2)
{
    // 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});
    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});
    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});
    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});
    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} ?
    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});
    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});
    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});
    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});
    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});
    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});
    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} ?
    float inputGateBiasValue[] = {};
    // 13: The forget gate bias: A 1-D tensor of ANEURALNETWORKS_TENSOR_FLOAT32, of shape [num_units].
    hidl_vec<uint32_t> forgetGateBiasDimensions({4});
    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});
    float cellBiasValue[] = {0.0f, 0.0f, 0.0f, 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});
    float outputGateBiasValue[] = {0.0f, 0.0f, 0.0f, 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});
    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});
    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 {0, 0, 0, 0, 0, 0, 0, 0};
    // 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 {0, 0, 0, 0, 0, 0, 0, 0};

    // 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({});
    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({});
    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({});
    float projectionClippingThresholdValue[] = {0.0f};

    // 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.
    hidl_vec<uint32_t> scratchBufferDimensions({batchSize, numUnits * 4});
    std::vector<float> scratchBufferValue {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    //  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(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,
                 scratchBufferDimensions,               scratchBufferValue,
                 outputStateOutDimensions,              outputStateOutValue,
                 cellStateOutDimensions,                cellStateOutValue,
                 outputDimensions,                      outputValue);
}

BOOST_AUTO_TEST_SUITE_END()
