Basic hotword model unit test for TFLite Micro.

PiperOrigin-RevId: 267664706
diff --git a/tensorflow/lite/experimental/micro/kernels/svdf.cc b/tensorflow/lite/experimental/micro/kernels/svdf.cc
index 866a028..756c3c7 100644
--- a/tensorflow/lite/experimental/micro/kernels/svdf.cc
+++ b/tensorflow/lite/experimental/micro/kernels/svdf.cc
@@ -359,7 +359,10 @@
   // [3] = Bias (optional), {1, num_units}
   // [4] = Activation State (variable),
   //         {2, batch_size, memory_size * num_filters}
-  TF_LITE_ENSURE_EQ(context, node->inputs->size, 5);
+  // TODO(kreeger): Use input tensor as variable until scratch tensor allocation
+  // has been implemented (cl/263032056)
+  // TF_LITE_ENSURE_EQ(context, node->inputs->size, 5);
+  TF_LITE_ENSURE_EQ(context, node->inputs->size, 6);
   const TfLiteTensor* input = GetInput(context, node, kInputTensor);
   const TfLiteTensor* weights_feature =
       GetInput(context, node, kWeightsFeatureTensor);
@@ -408,7 +411,11 @@
   // [0] = Holds dot-product of time-forward calculations in
   //       ApplyTimeWeightsBiasAndActivation():
   //         float, {2, batch_size, num_filters}
-  TfLiteTensor* scratch_tensor = GetTemporary(context, node, 0);
+  // TODO(kreeger): Use input tensor as variable until scratch tensor allocation
+  // has been implemented (cl/263032056)
+  // TfLiteTensor* scratch_tensor = GetTemporary(context, node, 0);
+  TfLiteTensor* scratch_tensor = &context->tensors[node->inputs->data[5]];
+
   TF_LITE_ENSURE_EQ(context, scratch_tensor->type, kTfLiteFloat32);
   TF_LITE_ENSURE_EQ(context, NumDimensions(scratch_tensor), 2);
   TF_LITE_ENSURE_EQ(context, scratch_tensor->dims->data[0], batch_size);
@@ -479,7 +486,9 @@
 
     // Full-float SVDF only uses the one shared scratch tensor (see above for
     // usage).
-    TF_LITE_ENSURE_EQ(context, node->temporaries->size, 1);
+    // TODO(kreeger): Use input tensor as variable until scratch tensor
+    // allocation has been implemented (cl/263032056)
+    // TF_LITE_ENSURE_EQ(context, node->temporaries->size, 1);
   }
 
   // Validate Tensor Output:
@@ -504,7 +513,10 @@
       GetInput(context, node, kWeightsTimeTensor);
   const TfLiteTensor* bias = GetOptionalInputTensor(context, node, kBiasTensor);
 
-  TfLiteTensor* scratch = GetTemporary(context, node, /*index=*/0);
+  // TODO(kreeger): Use input tensor as variable until scratch tensor allocation
+  // has been implemented (cl/263032056)
+  // TfLiteTensor* scratch = GetTemporary(context, node, /*index=*/0);
+  TfLiteTensor* scratch = &context->tensors[node->inputs->data[5]];
 
   TfLiteTensor* activation_state =
       &context->tensors[node->inputs->data[kInputActivationStateTensor]];
diff --git a/tensorflow/lite/experimental/micro/kernels/svdf_test.cc b/tensorflow/lite/experimental/micro/kernels/svdf_test.cc
index de3dcb8..d1cbe3d 100644
--- a/tensorflow/lite/experimental/micro/kernels/svdf_test.cc
+++ b/tensorflow/lite/experimental/micro/kernels/svdf_test.cc
@@ -146,7 +146,10 @@
   }
 
   // Bias is an optional tensor:
-  int inputs_array_data[] = {5, 0, 1, 2, kOptionalTensor, 3};
+  // TODO(kreeger): Use input tensor as variable until scratch tensor allocation
+  // has been implemented (cl/263032056)
+  // int inputs_array_data[] = {5, 0, 1, 2, kOptionalTensor, 3};
+  int inputs_array_data[] = {6, 0, 1, 2, kOptionalTensor, 3, 5};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
 
   int outputs_array_data[] = {1, 4};