Remove all instances of initializer_list from TF Micro kernel tests and clean up tests.

PiperOrigin-RevId: 324669800
Change-Id: Ib47abca412a47f30bfc804f21e3194ded3e72bc5
diff --git a/tensorflow/lite/micro/examples/micro_speech/recognize_commands_test.cc b/tensorflow/lite/micro/examples/micro_speech/recognize_commands_test.cc
index eff7b4e..089da91 100644
--- a/tensorflow/lite/micro/examples/micro_speech/recognize_commands_test.cc
+++ b/tensorflow/lite/micro/examples/micro_speech/recognize_commands_test.cc
@@ -75,11 +75,11 @@
 
   RecognizeCommands recognize_commands(&micro_error_reporter);
 
-  std::initializer_list<int8_t> result_data = {127, -128, -128, -128};
-  auto result_dims = {2, 1, 4};
+  const int8_t result_data[] = {127, -128, -128, -128};
+  const int result_dims[] = {2, 1, 4};
   TfLiteTensor results = tflite::testing::CreateQuantizedTensor(
-      result_data, tflite::testing::IntArrayFromInitializer(result_dims),
-      -128.0f, 127.0f);
+      result_data, tflite::testing::IntArrayFromInts(result_dims), -128.0f,
+      127.0f);
 
   const char* found_command;
   uint8_t score;
@@ -94,11 +94,10 @@
 
   RecognizeCommands recognize_commands(&micro_error_reporter, 1000, 51);
 
-  std::initializer_list<int8_t> yes_data = {-128, -128, 127, -128};
-  auto yes_dims = {2, 1, 4};
+  const int8_t yes_data[] = {-128, -128, 127, -128};
+  const int yes_dims[] = {2, 1, 4};
   TfLiteTensor yes_results = tflite::testing::CreateQuantizedTensor(
-      yes_data, tflite::testing::IntArrayFromInitializer(yes_dims), -128.0f,
-      127.0f);
+      yes_data, tflite::testing::IntArrayFromInts(yes_dims), -128.0f, 127.0f);
 
   bool has_found_new_command = false;
   const char* new_command;
@@ -122,11 +121,10 @@
     TF_LITE_MICRO_EXPECT_EQ(0, tflite::testing::TestStrcmp("yes", new_command));
   }
 
-  std::initializer_list<int8_t> no_data = {-128, -128, -128, 127};
-  auto no_dims = {2, 1, 4};
+  const int8_t no_data[] = {-128, -128, -128, 127};
+  const int no_dims[] = {2, 1, 4};
   TfLiteTensor no_results = tflite::testing::CreateQuantizedTensor(
-      no_data, tflite::testing::IntArrayFromInitializer(no_dims), -128.0f,
-      127.0f);
+      no_data, tflite::testing::IntArrayFromInts(no_dims), -128.0f, 127.0f);
   has_found_new_command = false;
   new_command = "";
   uint8_t score;
@@ -156,11 +154,10 @@
 
   RecognizeCommands recognize_commands(&micro_error_reporter, 1000, 51);
 
-  std::initializer_list<int8_t> bad_data = {-128, -128, 127};
-  auto bad_dims = {2, 1, 3};
+  const int8_t bad_data[] = {-128, -128, 127};
+  const int bad_dims[] = {2, 1, 3};
   TfLiteTensor bad_results = tflite::testing::CreateQuantizedTensor(
-      bad_data, tflite::testing::IntArrayFromInitializer(bad_dims), -128.0f,
-      127.0f);
+      bad_data, tflite::testing::IntArrayFromInts(bad_dims), -128.0f, 127.0f);
 
   const char* found_command;
   uint8_t score;
@@ -175,11 +172,11 @@
 
   RecognizeCommands recognize_commands(&micro_error_reporter, 1000, 51);
 
-  std::initializer_list<int8_t> result_data = {-128, -128, 127, -128};
-  auto result_dims = {2, 1, 4};
+  const int8_t result_data[] = {-128, -128, 127, -128};
+  const int result_dims[] = {2, 1, 4};
   TfLiteTensor results = tflite::testing::CreateQuantizedTensor(
-      result_data, tflite::testing::IntArrayFromInitializer(result_dims),
-      -128.0f, 127.0f);
+      result_data, tflite::testing::IntArrayFromInts(result_dims), -128.0f,
+      127.0f);
 
   const char* found_command;
   uint8_t score;
@@ -197,11 +194,11 @@
 
   RecognizeCommands recognize_commands(&micro_error_reporter, 1000, 51);
 
-  std::initializer_list<int8_t> result_data = {-128, -128, 127, -128};
-  auto result_dims = {2, 1, 4};
+  const int8_t result_data[] = {-128, -128, 127, -128};
+  const int result_dims[] = {2, 1, 4};
   TfLiteTensor results = tflite::testing::CreateQuantizedTensor(
-      result_data, tflite::testing::IntArrayFromInitializer(result_dims),
-      -128.0f, 127.0f);
+      result_data, tflite::testing::IntArrayFromInts(result_dims), -128.0f,
+      127.0f);
 
   const char* found_command;
   uint8_t score;
diff --git a/tensorflow/lite/micro/kernels/concatenation_test.cc b/tensorflow/lite/micro/kernels/concatenation_test.cc
index c3fa395..d82a804 100644
--- a/tensorflow/lite/micro/kernels/concatenation_test.cc
+++ b/tensorflow/lite/micro/kernels/concatenation_test.cc
@@ -24,17 +24,16 @@
 namespace testing {
 namespace {
 
-void TestConcatenateTwoInputs(std::initializer_list<int> input1_dims_data,
-                              std::initializer_list<float> input1_data,
-                              std::initializer_list<int> input2_dims_data,
-                              std::initializer_list<float> input2_data,
-                              int axis,
-                              std::initializer_list<int> output_dims_data,
-                              std::initializer_list<float> expected_output_data,
+void TestConcatenateTwoInputs(const int* input1_dims_data,
+                              const float* input1_data,
+                              const int* input2_dims_data,
+                              const float* input2_data, int axis,
+                              const int* output_dims_data,
+                              const float* expected_output_data,
                               float* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
 
   constexpr int input_size = 2;
   constexpr int output_size = 1;
@@ -65,30 +64,31 @@
 
   const int output_dims_count = ElementCount(*output_dims);
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
+    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data[i], output_data[i], 1e-5f);
   }
 }
 
 void TestConcatenateQuantizedTwoInputs(
-    std::initializer_list<int> input1_dims_data,
-    std::initializer_list<uint8_t> input1_data,
-    std::initializer_list<int> input2_dims_data,
-    std::initializer_list<uint8_t> input2_data, float input_min,
-    float input_max, int axis, std::initializer_list<int> output_dims_data,
-    std::initializer_list<uint8_t> expected_output_data, float output_min,
-    float output_max, uint8_t* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+    const int* input1_dims_data, const uint8_t* input1_data,
+    const int* input2_dims_data, const uint8_t* input2_data,
+    const float input_scale, const int input_zero_point, int axis,
+    const int* output_dims_data, const uint8_t* expected_output_data,
+    const float output_scale, const int output_zero_point,
+    uint8_t* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
 
   constexpr int input_size = 2;
   constexpr int output_size = 1;
   constexpr int tensors_size = input_size + output_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input1_data, input1_dims, input_min, input_max),
-      CreateQuantizedTensor(input2_data, input2_dims, input_min, input_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max)};
+      CreateQuantizedTensor(input1_data, input1_dims, input_scale,
+                            input_zero_point),
+      CreateQuantizedTensor(input2_data, input2_dims, input_scale,
+                            input_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point)};
 
   int inputs_array_data[] = {2, 0, 1};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
@@ -111,7 +111,7 @@
 
   const int output_dims_count = ElementCount(*output_dims);
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
+    TF_LITE_MICRO_EXPECT_EQ(expected_output_data[i], output_data[i]);
   }
 }
 
@@ -124,19 +124,19 @@
 TF_LITE_MICRO_TEST(TwoInputsAllAxesCombinations) {
   // Concatenate the same two input tensors along all possible axes.
 
-  auto input_shape = {2, 2, 3};
-  auto input1_value = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
-  auto input2_value = {7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
+  const int input_shape[] = {2, 2, 3};
+  const float input1_value[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};
+  const float input2_value[] = {7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
 
   // expected output when concatenating on axis 0
-  auto output_shape_axis0 = {2, 4, 3};
-  auto output_value_axis0 = {1.0f, 2.0f, 3.0f, 4.0f,  5.0f,  6.0f,
-                             7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
+  const int output_shape_axis0[] = {2, 4, 3};
+  const float output_value_axis0[] = {1.0f, 2.0f, 3.0f, 4.0f,  5.0f,  6.0f,
+                                      7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
 
   // expected output when concatenating on axis 1
-  auto output_shape_axis1 = {2, 2, 6};
-  auto output_value_axis1 = {1.0f, 2.0f, 3.0f, 7.0f,  8.0f,  9.0f,
-                             4.0f, 5.0f, 6.0f, 10.0f, 11.0f, 12.0f};
+  const int output_shape_axis1[] = {2, 2, 6};
+  const float output_value_axis1[] = {1.0f, 2.0f, 3.0f, 7.0f,  8.0f,  9.0f,
+                                      4.0f, 5.0f, 6.0f, 10.0f, 11.0f, 12.0f};
 
   float output_data[12];
 
@@ -162,59 +162,48 @@
 }
 
 TF_LITE_MICRO_TEST(TwoInputsQuantizedUint8) {
-  using tflite::testing::F2Q;
-
   const int axis = 2;
-  auto input_shape = {3, 2, 1, 2};
-  auto output_shape = {3, 2, 1, 4};
+  const int input_shape[] = {3, 2, 1, 2};
+  const int output_shape[] = {3, 2, 1, 4};
 
-  const float input_min = -12.7f;
-  const float input_max = 12.8f;
-  const float output_min = -12.7f;
-  const float output_max = 12.8f;
+  const float input_scale = 0.1f;
+  const int input_zero_point = 127;
+  const float output_scale = 0.1f;
+  const int output_zero_point = 127;
 
-  auto input1_value = {
-      F2Q(1.0, input_min, input_max),
-      F2Q(3.0, input_min, input_max),
-      F2Q(4.0, input_min, input_max),
-      F2Q(7.0, input_min, input_max),
-  };
+  const uint8_t input1_values[] = {137, 157, 167, 197};
 
-  auto input2_value = {
-      F2Q(1.1, input_min, input_max),
-      F2Q(3.1, input_min, input_max),
-      F2Q(4.1, input_min, input_max),
-      F2Q(7.1, input_min, input_max),
-  };
+  const uint8_t input2_values[] = {138, 158, 168, 198};
 
-  std::initializer_list<uint8_t> output_value = {
+  const uint8_t output_value[] = {
       137, 157, 138, 158, 167, 197, 168, 198,
   };
 
   uint8_t output_data[8];
   tflite::testing::TestConcatenateQuantizedTwoInputs(
-      input_shape, input1_value, input_shape, input2_value, input_min,
-      input_max, axis, output_shape, output_value, output_min, output_max,
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, input_scale,
+      input_zero_point, axis, output_shape, output_value, output_scale,
+      output_zero_point, output_data);
 }
 
 TF_LITE_MICRO_TEST(ThreeDimensionalTwoInputsDifferentShapes) {
   const int axis = 1;
 
-  auto input1_shape = {3, 2, 1, 2};
-  auto input2_shape = {3, 2, 3, 2};
-  auto output_shape = {3, 2, 4, 2};
+  const int input1_shape[] = {3, 2, 1, 2};
+  const int input2_shape[] = {3, 2, 3, 2};
+  const int output_shape[] = {3, 2, 4, 2};
 
-  auto input1_value = {1.0f, 3.0f, 4.0f, 7.0f};
-  auto input2_value = {1.0f, 2.0f, 3.0f, 4.0f,  5.0f,  6.0f,
-                       7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
-  auto output_value = {1.0f, 3.0f, 1.0f, 2.0f, 3.0f, 4.0f,  5.0f,  6.0f,
-                       4.0f, 7.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
+  const float input1_values[] = {1.0f, 3.0f, 4.0f, 7.0f};
+  const float input2_values[] = {1.0f, 2.0f, 3.0f, 4.0f,  5.0f,  6.0f,
+                                 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f};
+  const float output_values[] = {1.0f, 3.0f,  1.0f,  2.0f, 3.0f, 4.0f,
+                                 5.0f, 6.0f,  4.0f,  7.0f, 7.0f, 8.0f,
+                                 9.0f, 10.0f, 11.0f, 12.0f};
 
   float output_data[16];
   tflite::testing::TestConcatenateTwoInputs(
-      input1_shape, input1_value, input2_shape, input2_value, axis,
-      output_shape, output_value, output_data);
+      input1_shape, input1_values, input2_shape, input2_values, axis,
+      output_shape, output_values, output_data);
 }
 
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/maximum_minimum_test.cc b/tensorflow/lite/micro/kernels/maximum_minimum_test.cc
index ee84fcb..7fab540 100644
--- a/tensorflow/lite/micro/kernels/maximum_minimum_test.cc
+++ b/tensorflow/lite/micro/kernels/maximum_minimum_test.cc
@@ -25,16 +25,13 @@
 namespace {
 
 void TestMaxMinFloat(const TfLiteRegistration& registration,
-                     std::initializer_list<int> input1_dims_data,
-                     std::initializer_list<float> input1_data,
-                     std::initializer_list<int> input2_dims_data,
-                     std::initializer_list<float> input2_data,
-                     std::initializer_list<float> expected_output_data,
-                     std::initializer_list<int> output_dims_data,
-                     float* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+                     const int* input1_dims_data, const float* input1_data,
+                     const int* input2_dims_data, const float* input2_data,
+                     const float* expected_output_data,
+                     const int* output_dims_data, float* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 2;
@@ -59,34 +56,35 @@
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
 
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
+    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data[i], output_data[i], 1e-5f);
   }
 }
 
 void TestMaxMinQuantized(const TfLiteRegistration& registration,
-                         std::initializer_list<int> input1_dims_data,
-                         std::initializer_list<uint8_t> input1_data,
-                         float input1_min, float input1_max,
-                         std::initializer_list<int> input2_dims_data,
-                         std::initializer_list<uint8_t> input2_data,
-                         float input2_min, float input2_max,
-                         std::initializer_list<uint8_t> expected_output_data,
-                         float output_min, float output_max,
-                         std::initializer_list<int> output_dims_data,
-                         uint8_t* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+                         const int* input1_dims_data,
+                         const uint8_t* input1_data, float const input1_scale,
+                         const int input1_zero_point,
+                         const int* input2_dims_data,
+                         const uint8_t* input2_data, const float input2_scale,
+                         const int input2_zero_point,
+                         const uint8_t* expected_output_data,
+                         const float output_scale, const int output_zero_point,
+                         const int* output_dims_data, uint8_t* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 2;
   constexpr int outputs_size = 1;
   constexpr int tensors_size = inputs_size + outputs_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input1_data, input1_dims, input1_min, input1_max),
-      CreateQuantizedTensor(input2_data, input2_dims, input2_min, input2_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max),
+      CreateQuantizedTensor(input1_data, input1_dims, input1_scale,
+                            input1_zero_point),
+      CreateQuantizedTensor(input2_data, input2_dims, input2_scale,
+                            input2_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point),
   };
 
   int inputs_array_data[] = {2, 0, 1};
@@ -102,21 +100,21 @@
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
 
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
+    TF_LITE_MICRO_EXPECT_EQ(expected_output_data[i], output_data[i]);
   }
 }
 
-void TestMaxMinQuantizedInt32(
-    const TfLiteRegistration& registration,
-    std::initializer_list<int> input1_dims_data,
-    std::initializer_list<int32_t> input1_data, float input1_scale,
-    std::initializer_list<int> input2_dims_data,
-    std::initializer_list<int32_t> input2_data, float input2_scale,
-    std::initializer_list<int32_t> expected_output_data, float output_scale,
-    std::initializer_list<int> output_dims_data, int32_t* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestMaxMinQuantizedInt32(const TfLiteRegistration& registration,
+                              const int* input1_dims_data,
+                              const int32_t* input1_data, float input1_scale,
+                              const int* input2_dims_data,
+                              const int32_t* input2_data, float input2_scale,
+                              const int32_t* expected_output_data,
+                              float output_scale, const int* output_dims_data,
+                              int32_t* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 2;
@@ -141,7 +139,7 @@
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
 
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
+    TF_LITE_MICRO_EXPECT_EQ(expected_output_data[i], output_data[i]);
   }
 }
 
@@ -152,109 +150,86 @@
 TF_LITE_MICRO_TESTS_BEGIN
 
 TF_LITE_MICRO_TEST(FloatTest) {
-  std::initializer_list<float> data1 = {1.0, 0.0, -1.0, 11.0, -2.0, -1.44};
-  std::initializer_list<float> data2 = {-1.0, 0.0, 1.0, 12.0, -3.0, -1.43};
+  const int dims[] = {3, 3, 1, 2};
+  const float data1[] = {1.0, 0.0, -1.0, 11.0, -2.0, -1.44};
+  const float data2[] = {-1.0, 0.0, 1.0, 12.0, -3.0, -1.43};
+  const float golden_max[] = {1.0, 0.0, 1.0, 12.0, -2.0, -1.43};
+  const float golden_min[] = {-1.0, 0.0, -1.0, 11.0, -3.0, -1.44};
   float output_data[6];
 
-  tflite::testing::TestMaxMinFloat(
-      tflite::ops::micro::Register_MAXIMUM(), {3, 3, 1, 2},
-      data1,                               // input1 shape and data
-      {3, 3, 1, 2}, data2,                 // input2 shape and data
-      {1.0, 0.0, 1.0, 12.0, -2.0, -1.43},  // expected output
-      {3, 3, 1, 2}, output_data);          // output shape and data buffer
+  tflite::testing::TestMaxMinFloat(tflite::ops::micro::Register_MAXIMUM(), dims,
+                                   data1, dims, data2, golden_max, dims,
+                                   output_data);
 
-  tflite::testing::TestMaxMinFloat(
-      tflite::ops::micro::Register_MINIMUM(), {3, 3, 1, 2},
-      data1,                                 // input1 shape and data
-      {3, 3, 1, 2}, data2,                   // input2 shape and data
-      {-1.0, 0.0, -1.0, 11.0, -3.0, -1.44},  // expected output
-      {3, 3, 1, 2}, output_data);            // output shape and data buffer
+  tflite::testing::TestMaxMinFloat(tflite::ops::micro::Register_MINIMUM(), dims,
+                                   data1, dims, data2, golden_min, dims,
+                                   output_data);
 }
 
 TF_LITE_MICRO_TEST(Uint8Test) {
-  std::initializer_list<uint8_t> data1 = {1, 0, 2, 11, 2, 23};
-  std::initializer_list<uint8_t> data2 = {0, 0, 1, 12, 255, 1};
-  const float input1_min = -63.5;
-  const float input1_max = 64;
-  const float input2_min = -63.5;
-  const float input2_max = 64;
-  const float output_min = -63.5;
-  const float output_max = 64;
+  const int dims[] = {3, 3, 1, 2};
+  const uint8_t data1[] = {1, 0, 2, 11, 2, 23};
+  const uint8_t data2[] = {0, 0, 1, 12, 255, 1};
+  const uint8_t golden_max[] = {1, 0, 2, 12, 255, 23};
+  const uint8_t golden_min[] = {0, 0, 1, 11, 2, 1};
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
 
   uint8_t output_data[6];
 
   tflite::testing::TestMaxMinQuantized(
-      tflite::ops::micro::Register_MAXIMUM(),
-      // input1 shape, data and bounds
-      {3, 3, 1, 2}, data1, input1_min, input1_max,
-      // input2 shape, data and bounds
-      {3, 3, 1, 2}, data2, input2_min, input2_max,
-      // expected output
-      {1, 0, 2, 12, 255, 23},
-      // output bounds, shape and data buffer
-      output_min, output_max, {3, 3, 1, 2}, output_data);
+      tflite::ops::micro::Register_MAXIMUM(), dims, data1, input_scale,
+      input_zero_point, dims, data2, input_scale, input_zero_point, golden_max,
+      output_scale, output_zero_point, dims, output_data);
 
   tflite::testing::TestMaxMinQuantized(
-      tflite::ops::micro::Register_MINIMUM(),
-      // input1 shape, data and bounds
-      {3, 3, 1, 2}, data1, input1_min, input1_max,
-      // input2 shape, data and bounds
-      {3, 3, 1, 2}, data2, input2_min, input2_max,
-      // expected output
-      {0, 0, 1, 11, 2, 1},
-      // output bounds, shape and data buffer
-      output_min, output_max, {3, 3, 1, 2}, output_data);
+      tflite::ops::micro::Register_MINIMUM(), dims, data1, input_scale,
+      input_zero_point, dims, data2, input_scale, input_zero_point, golden_min,
+      output_scale, output_zero_point, dims, output_data);
 }
 
 TF_LITE_MICRO_TEST(FloatWithBroadcastTest) {
-  std::initializer_list<float> data1 = {1.0, 0.0, -1.0, -2.0, -1.44, 11.0};
-  std::initializer_list<float> data2 = {0.5, 2.0};
+  const int dims[] = {3, 3, 1, 2};
+  const int dims_scalar[] = {1, 2};
+  const float data1[] = {1.0, 0.0, -1.0, -2.0, -1.44, 11.0};
+  const float data2[] = {0.5, 2.0};
+  const float golden_max[] = {1.0, 2.0, 0.5, 2.0, 0.5, 11.0};
+  const float golden_min[] = {0.5, 0.0, -1.0, -2.0, -1.44, 2.0};
   float output_data[6];
 
-  tflite::testing::TestMaxMinFloat(
-      tflite::ops::micro::Register_MAXIMUM(), {3, 3, 1, 2},
-      data1,                            // input1 shape and data
-      {1, 2}, data2,                    // input2 shape and data
-      {1.0, 2.0, 0.5, 2.0, 0.5, 11.0},  // expected output
-      {3, 3, 1, 2}, output_data);       // output shape and data buffer
+  tflite::testing::TestMaxMinFloat(tflite::ops::micro::Register_MAXIMUM(), dims,
+                                   data1, dims_scalar, data2, golden_max, dims,
+                                   output_data);
 
-  tflite::testing::TestMaxMinFloat(
-      tflite::ops::micro::Register_MINIMUM(), {3, 3, 1, 2},
-      data1,                               // input1 shape and data
-      {1, 2}, data2,                       // input2 shape and data
-      {0.5, 0.0, -1.0, -2.0, -1.44, 2.0},  // expected output
-      {3, 3, 1, 2}, output_data);          // output shape and data buffer
+  tflite::testing::TestMaxMinFloat(tflite::ops::micro::Register_MINIMUM(), dims,
+                                   data1, dims_scalar, data2, golden_min, dims,
+                                   output_data);
 }
 
 TF_LITE_MICRO_TEST(Int32WithBroadcastTest) {
   const float input1_scale = 0.5;
   const float input2_scale = 0.5;
   const float output_scale = 0.5;
-  std::initializer_list<int32_t> data1 = {1, 0, -1, -2, 3, 11};
-  std::initializer_list<int32_t> data2 = {2};
+  const int dims[] = {3, 3, 1, 2};
+  const int dims_scalar[] = {1, 1};
+  const int32_t data1[] = {1, 0, -1, -2, 3, 11};
+  const int32_t data2[] = {2};
+  const int32_t golden_max[] = {2, 2, 2, 2, 3, 11};
+  const int32_t golden_min[] = {1, 0, -1, -2, 2, 2};
   int32_t output_data[6];
 
   tflite::testing::TestMaxMinQuantizedInt32(
-      tflite::ops::micro::Register_MAXIMUM(),
-      // input1 shape, data and scale
-      {3, 3, 1, 2}, data1, input1_scale,
-      // input2 shape, data and scale
-      {1, 1}, data2, input2_scale,
-      // expected output
-      {2, 2, 2, 2, 3, 11},
-      // output scale, shape and data buffer
-      output_scale, {3, 3, 1, 2}, output_data);
+      tflite::ops::micro::Register_MAXIMUM(), dims, data1, input1_scale,
+      dims_scalar, data2, input2_scale, golden_max, output_scale, dims,
+      output_data);
 
   tflite::testing::TestMaxMinQuantizedInt32(
-      tflite::ops::micro::Register_MINIMUM(),
-      // input1 shape, data and scale
-      {3, 3, 1, 2}, data1, input1_scale,
-      // input2 shape, data and scale
-      {1, 1}, data2, input2_scale,
-      // expected output
-      {1, 0, -1, -2, 2, 2},
-      // output scale, shape and data buffer
-      output_scale, {3, 3, 1, 2}, output_data);
+      tflite::ops::micro::Register_MINIMUM(), dims, data1, input1_scale,
+      dims_scalar, data2, input2_scale, golden_min, output_scale, dims,
+      output_data);
 }
 
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/mul_test.cc b/tensorflow/lite/micro/kernels/mul_test.cc
index e39f669..86b4d8b 100644
--- a/tensorflow/lite/micro/kernels/mul_test.cc
+++ b/tensorflow/lite/micro/kernels/mul_test.cc
@@ -23,16 +23,57 @@
 namespace testing {
 namespace {
 
-void TestMulFloat(std::initializer_list<int> input1_dims_data,
-                  std::initializer_list<float> input1_data,
-                  std::initializer_list<int> input2_dims_data,
-                  std::initializer_list<float> input2_data,
-                  std::initializer_list<int> output_dims_data,
-                  std::initializer_list<float> expected_output_data,
+const int flat_size_simple = 4;
+const float scale_simple = 0.01;
+const int dims_simple[] = {4, 1, 2, 2, 1};
+const float input1_simple[] = {-0.8, 0.2, 0.9, 0.7};
+const float input2_simple[] = {0.6, 0.4, 0.9, 0.8};
+const float golden_simple[] = {-0.48, 0.08, 0.81, 0.56};
+const float golden_simple_relu[] = {0.0, 0.08, 0.81, 0.56};
+
+const int flat_size_broadcast = 6;
+const float input_scale_broadcast = 0.05f;
+const float output_scale_broadcast = 0.01f;
+const int dims_broadcast[] = {4, 1, 3, 1, 2};
+const int dims_scalar_broadcast[] = {1, 1};
+const float input1_broadcast[] = {-2.0, 0.2, 0.7, 0.8, 1.1, 2.0};
+const float input2_broadcast[] = {0.1};
+const float golden_broadcast[] = {-0.2, 0.02, 0.07, 0.08, 0.11, 0.2};
+const float golden_broadcast_relu[] = {0, 0.02, 0.07, 0.08, 0.11, 0.2};
+
+template <typename T>
+void ValidateMulGoldens(TfLiteTensor* tensors, int tensors_size,
+                        TfLiteFusedActivation activation, const T* golden,
+                        int output_len, float tolerance, T* output) {
+  TfLiteMulParams builtin_data = {
+      .activation = activation,
+  };
+
+  int inputs_array_data[] = {2, 0, 1};
+  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
+  int outputs_array_data[] = {1, 2};
+  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
+
+  const TfLiteRegistration registration = tflite::ops::micro::Register_MUL();
+  micro::KernelRunner runner(
+      registration, tensors, tensors_size, inputs_array, outputs_array,
+      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
+
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
+
+  for (int i = 0; i < output_len; i++) {
+    TF_LITE_MICRO_EXPECT_NEAR(golden[i], output[i], tolerance);
+  }
+}
+
+void TestMulFloat(const int* input1_dims_data, const float* input1_data,
+                  const int* input2_dims_data, const float* input2_data,
+                  const int* output_dims_data, const float* golden,
                   float* output_data, TfLiteFusedActivation activation) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 2;
@@ -44,75 +85,40 @@
       CreateFloatTensor(output_data, output_dims),
   };
 
-  TfLiteMulParams builtin_data = {
-      .activation = activation,
-  };
-
-  int inputs_array_data[] = {2, 0, 1};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 2};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  const TfLiteRegistration registration = tflite::ops::micro::Register_MUL();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; i++) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidateMulGoldens(tensors, tensors_size, activation, golden,
+                     output_dims_count, 1e-5, output_data);
 }
 
 template <typename T>
-void TestMulQuantized(std::initializer_list<int> input1_dims_data,
-                      std::initializer_list<T> input1_data,
-                      std::initializer_list<int> input2_dims_data,
-                      std::initializer_list<T> input2_data,
-                      const float input_min, const float input_max,
-                      std::initializer_list<int> output_dims_data,
-                      const float output_min, const float output_max,
-                      std::initializer_list<T> expected_output_data,
-                      T* output_data, TfLiteFusedActivation activation,
-                      int error_tolerance) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestMulQuantized(const int* input1_dims_data, const float* input1_data,
+                      T* input1_quantized, const int* input2_dims_data,
+                      const float* input2_data, T* input2_quantized,
+                      const float input_scale, const int input_zero_point,
+                      const int* output_dims_data, const float* golden,
+                      T* golden_quantized, const float output_scale,
+                      const int output_zero_point, T* output_data,
+                      TfLiteFusedActivation activation) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 2;
   constexpr int outputs_size = 1;
   constexpr int tensors_size = inputs_size + outputs_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input1_data, input1_dims, input_min, input_max),
-      CreateQuantizedTensor(input2_data, input2_dims, input_min, input_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max),
-  };
+      CreateQuantizedTensor(input1_data, input1_quantized, input1_dims,
+                            input_scale, input_zero_point),
+      CreateQuantizedTensor(input2_data, input2_quantized, input2_dims,
+                            input_scale, input_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point)};
 
-  TfLiteMulParams builtin_data = {
-      .activation = activation,
-  };
+  AsymmetricQuantize(golden, golden_quantized, output_dims_count, output_scale,
+                     output_zero_point);
 
-  int inputs_array_data[] = {2, 0, 1};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 2};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  const TfLiteRegistration registration = tflite::ops::micro::Register_MUL();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; i++) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              error_tolerance);
-  }
+  ValidateMulGoldens(tensors, tensors_size, activation, golden_quantized,
+                     output_dims_count, 1.0f, output_data);
 }
 
 }  // namespace
@@ -122,250 +128,105 @@
 
 TF_LITE_MICRO_TESTS_BEGIN
 
-TF_LITE_MICRO_TEST(Int8NoActivation) {
-  using tflite::testing::F2QS;
-  const float input_min = -1;
-  const float input_max = 1;
-  const float output_min = -1;
-  const float output_max = 1;
+TF_LITE_MICRO_TEST(SimpleFloatNoAcativationShouldMatchGolden) {
+  float output_data[tflite::testing::flat_size_simple];
 
-  int8_t output_data[4];
-  tflite::testing::TestMulQuantized({4, 1, 2, 2, 1},  // input1 dims
-                                    {
-                                        F2QS(-0.8, input_min, input_max),
-                                        F2QS(0.2, input_min, input_max),
-                                        F2QS(0.9, input_min, input_max),
-                                        F2QS(0.7, input_min, input_max),
-                                    },                // input1 data
-                                    {4, 1, 2, 2, 1},  // input2 dims
-                                    {
-                                        F2QS(0.6, input_min, input_max),
-                                        F2QS(0.4, input_min, input_max),
-                                        F2QS(0.9, input_min, input_max),
-                                        F2QS(0.8, input_min, input_max),
-                                    },  // input2 data
-                                    input_min, input_max,
-                                    {4, 1, 2, 2, 1},  // output dims
-                                    output_min, output_max,
-                                    {
-                                        F2QS(-0.48, output_min, output_max),
-                                        F2QS(0.08, output_min, output_max),
-                                        F2QS(0.81, output_min, output_max),
-                                        F2QS(0.56, output_min, output_max),
-                                    },  // expected output data
-                                    output_data, kTfLiteActNone, 1);
-}
-
-TF_LITE_MICRO_TEST(Int8NoActivationLargeMultiplier) {
-  using tflite::testing::F2QS;
-  const float input_min = -100;
-  const float input_max = 100;
-  const float output_min = -10;
-  const float output_max = 10;
-
-  int8_t output_data[4];
-  tflite::testing::TestMulQuantized(
-      {4, 1, 2, 2, 1},
-      {
-          F2QS(-4, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(3, input_min, input_max),
-          F2QS(1, input_min, input_max),
-      },
-      {4, 1, 2, 2, 1},
-      {
-          /* F2QS(-1, input_min, input_max), F2QS(-3, input_min, input_max), */
-          F2QS(-1, input_min, input_max),
-          F2QS(-3, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(2, input_min, input_max),
-      },
-      input_min, input_max, {4, 1, 2, 2, 1}, output_min, output_max,
-      {
-          F2QS(4, output_min, output_max),
-          F2QS(-6, output_min, output_max),
-          F2QS(12, output_min, output_max),
-          F2QS(2, output_min, output_max),
-      },
-      // In Tensorflow Lite, this test have a max allowed error of 1.4f.
-      // A difference of 1.4 in floating points corresponds to 18 quantized
-      // for the output min/max [-10, 10].
-      output_data, kTfLiteActNone, 18);
-}
-
-TF_LITE_MICRO_TEST(Int8NoActivationBroadcast) {
-  using tflite::testing::F2QS;
-  const float input_min = -3.0;
-  const float input_max = 3.0;
-  const float output_min = -3.0;
-  const float output_max = 3.0;
-
-  int8_t output_data[6];
-  tflite::testing::TestMulQuantized({4, 1, 3, 1, 2},  // input1 shape
-                                    {
-                                        F2QS(-2.0, input_min, input_max),
-                                        F2QS(0.2, input_min, input_max),
-                                        F2QS(0.7, input_min, input_max),
-                                        F2QS(0.8, input_min, input_max),
-                                        F2QS(1.1, input_min, input_max),
-                                        F2QS(2.0, input_min, input_max),
-                                    },       // input1 data
-                                    {1, 1},  // input2 shape
-                                    {
-                                        F2QS(0.1, input_min, input_max),
-                                    },  // input2 data
-                                    input_min, input_max,
-                                    {4, 1, 3, 1, 2},  // output shape
-                                    output_min, output_max,
-                                    {
-                                        F2QS(-0.2, output_min, output_max),
-                                        F2QS(0.02, output_min, output_max),
-                                        F2QS(0.07, output_min, output_max),
-                                        F2QS(0.08, output_min, output_max),
-                                        F2QS(0.11, output_min, output_max),
-                                        F2QS(0.2, output_min, output_max),
-                                    },  // expected output data
-                                    output_data, kTfLiteActNone, 1);
-}
-
-TF_LITE_MICRO_TEST(UInt8NoActivation) {
-  using tflite::testing::F2Q;
-  const float input_min = -1;
-  const float input_max = 1;
-  const float output_min = -1;
-  const float output_max = 1;
-
-  uint8_t output_data[4];
-  tflite::testing::TestMulQuantized({4, 1, 2, 2, 1},  // input1 dims
-                                    {
-                                        F2Q(-0.8, input_min, input_max),
-                                        F2Q(0.2, input_min, input_max),
-                                        F2Q(0.9, input_min, input_max),
-                                        F2Q(0.7, input_min, input_max),
-                                    },                // input1 data
-                                    {4, 1, 2, 2, 1},  // input2 dims
-                                    {
-                                        F2Q(0.6, input_min, input_max),
-                                        F2Q(0.4, input_min, input_max),
-                                        F2Q(0.9, input_min, input_max),
-                                        F2Q(0.8, input_min, input_max),
-                                    },  // input2 data
-                                    input_min, input_max,
-                                    {4, 1, 2, 2, 1},  // output dims
-                                    output_min, output_max,
-                                    {
-                                        F2Q(-0.48, output_min, output_max),
-                                        F2Q(0.08, output_min, output_max),
-                                        F2Q(0.81, output_min, output_max),
-                                        F2Q(0.56, output_min, output_max),
-                                    },  // expected output data
-                                    output_data, kTfLiteActNone, 1);
-}
-
-TF_LITE_MICRO_TEST(UInt8NoActivationLargeMultiplier) {
-  using tflite::testing::F2Q;
-  const float input_min = -100;
-  const float input_max = 100;
-  const float output_min = -10;
-  const float output_max = 10;
-
-  uint8_t output_data[4];
-  tflite::testing::TestMulQuantized(
-      {4, 1, 2, 2, 1},
-      {
-          F2Q(-4, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(3, input_min, input_max),
-          F2Q(1, input_min, input_max),
-      },
-      {4, 1, 2, 2, 1},
-      {
-          F2Q(-1, input_min, input_max),
-          F2Q(-3, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(2, input_min, input_max),
-      },
-      input_min, input_max, {4, 1, 2, 2, 1}, output_min, output_max,
-      {
-          F2Q(4, output_min, output_max),
-          F2Q(-6, output_min, output_max),
-          F2Q(12, output_min, output_max),
-          F2Q(2, output_min, output_max),
-      },
-      // In Tensorflow Lite, this test have a max allowed error of 1.4f.
-      // A difference of 1.4 in floating points corresponds to 18 quantized
-      // for the output min/max [-10, 10].
-      output_data, kTfLiteActNone, 18);
-}
-
-TF_LITE_MICRO_TEST(UInt8NoActivationBroadcast) {
-  using tflite::testing::F2Q;
-  const float input_min = -3.0;
-  const float input_max = 3.0;
-  const float output_min = -3.0;
-  const float output_max = 3.0;
-
-  uint8_t output_data[6];
-  tflite::testing::TestMulQuantized({4, 1, 3, 1, 2},  // input1 shape
-                                    {
-                                        F2Q(-2.0, input_min, input_max),
-                                        F2Q(0.2, input_min, input_max),
-                                        F2Q(0.7, input_min, input_max),
-                                        F2Q(0.8, input_min, input_max),
-                                        F2Q(1.1, input_min, input_max),
-                                        F2Q(2.0, input_min, input_max),
-                                    },       // input1 data
-                                    {1, 1},  // input2 shape
-                                    {
-                                        F2Q(0.1, input_min, input_max),
-                                    },  // input2 data
-                                    input_min, input_max,
-                                    {4, 1, 3, 1, 2},  // output shape
-                                    output_min, output_max,
-                                    {
-                                        F2Q(-0.2, output_min, output_max),
-                                        F2Q(0.02, output_min, output_max),
-                                        F2Q(0.07, output_min, output_max),
-                                        F2Q(0.08, output_min, output_max),
-                                        F2Q(0.11, output_min, output_max),
-                                        F2Q(0.2, output_min, output_max),
-                                    },  // expected output data
-                                    output_data, kTfLiteActNone, 1);
-}
-
-TF_LITE_MICRO_TEST(FloatNoActivation) {
-  float output_data[4];
   tflite::testing::TestMulFloat(
-      {4, 1, 2, 2, 1},          // input1 shape
-      {-2.0, 0.2, 0.7, 0.8},    // input1 data
-      {4, 1, 2, 2, 1},          // input2 shape
-      {0.1, 0.2, 0.3, 0.5},     // input2 data
-      {4, 1, 2, 2, 1},          // output shape
-      {-0.2, 0.04, 0.21, 0.4},  // expected output data
+      tflite::testing::dims_simple, tflite::testing::input1_simple,
+      tflite::testing::dims_simple, tflite::testing::input2_simple,
+      tflite::testing::dims_simple, tflite::testing::golden_simple, output_data,
+      kTfLiteActNone);
+}
+
+TF_LITE_MICRO_TEST(SimpleFloatReluShouldMatchGolden) {
+  float output_data[tflite::testing::flat_size_simple];
+
+  tflite::testing::TestMulFloat(
+      tflite::testing::dims_simple, tflite::testing::input1_simple,
+      tflite::testing::dims_simple, tflite::testing::input2_simple,
+      tflite::testing::dims_simple, tflite::testing::golden_simple_relu,
+      output_data, kTfLiteActRelu);
+}
+
+TF_LITE_MICRO_TEST(SimpleInt8NoAcativationShouldMatchGolden) {
+  int8_t input1_quantized[tflite::testing::flat_size_simple];
+  int8_t input2_quantized[tflite::testing::flat_size_simple];
+  int8_t golden_quantized[tflite::testing::flat_size_simple];
+  int8_t output_data[tflite::testing::flat_size_simple];
+
+  tflite::testing::TestMulQuantized(
+      tflite::testing::dims_simple, tflite::testing::input1_simple,
+      input1_quantized, tflite::testing::dims_simple,
+      tflite::testing::input2_simple, input2_quantized,
+      tflite::testing::scale_simple, 0, tflite::testing::dims_simple,
+      tflite::testing::golden_simple, golden_quantized,
+      tflite::testing::scale_simple, 0, output_data, kTfLiteActNone);
+}
+
+TF_LITE_MICRO_TEST(SimpleUInt8NoAcativationShouldMatchGolden) {
+  uint8_t input1_quantized[tflite::testing::flat_size_simple];
+  uint8_t input2_quantized[tflite::testing::flat_size_simple];
+  uint8_t golden_quantized[tflite::testing::flat_size_simple];
+  uint8_t output_data[tflite::testing::flat_size_simple];
+
+  tflite::testing::TestMulQuantized(
+      tflite::testing::dims_simple, tflite::testing::input1_simple,
+      input1_quantized, tflite::testing::dims_simple,
+      tflite::testing::input2_simple, input2_quantized,
+      tflite::testing::scale_simple, 128, tflite::testing::dims_simple,
+      tflite::testing::golden_simple, golden_quantized,
+      tflite::testing::scale_simple, 128, output_data, kTfLiteActNone);
+}
+
+TF_LITE_MICRO_TEST(BroadcastFloatNoActivationShouldMatchGolden) {
+  float output_data[tflite::testing::flat_size_broadcast];
+
+  tflite::testing::TestMulFloat(
+      tflite::testing::dims_broadcast, tflite::testing::input1_broadcast,
+      tflite::testing::dims_scalar_broadcast, tflite::testing::input2_broadcast,
+      tflite::testing::dims_broadcast, tflite::testing::golden_broadcast,
       output_data, kTfLiteActNone);
 }
 
-TF_LITE_MICRO_TEST(FloatRelu) {
-  float output_data[4];
+TF_LITE_MICRO_TEST(BroadcastFloatReluShouldMatchGolden) {
+  float output_data[tflite::testing::flat_size_broadcast];
+
   tflite::testing::TestMulFloat(
-      {4, 1, 2, 2, 1},          // input1 shape
-      {-2.0, 0.2, 0.7, 0.8},    // input1 data
-      {4, 1, 2, 2, 1},          // input2 shape
-      {0.1, 0.2, 0.3, 0.5},     // input2 data
-      {4, 1, 2, 2, 1},          // output shape
-      {-0.2, 0.04, 0.21, 0.4},  // expected output data
-      output_data, kTfLiteActReluN1To1);
+      tflite::testing::dims_broadcast, tflite::testing::input1_broadcast,
+      tflite::testing::dims_scalar_broadcast, tflite::testing::input2_broadcast,
+      tflite::testing::dims_broadcast, tflite::testing::golden_broadcast_relu,
+      output_data, kTfLiteActRelu);
 }
 
-TF_LITE_MICRO_TEST(FloatBroadcast) {
-  float output_data[6];
-  tflite::testing::TestMulFloat(
-      {4, 1, 3, 1, 2},                      // input1 shape
-      {-2.0, 0.2, 0.7, 0.8, 1.1, 2.0},      // input1 data
-      {1, 1},                               // input2 shape
-      {0.1},                                // input2 data
-      {4, 1, 3, 1, 2},                      // output shape
-      {-0.2, 0.02, 0.07, 0.08, 0.11, 0.2},  // expected output data
+TF_LITE_MICRO_TEST(BroadcastInt8NoAcativationShouldMatchGolden) {
+  int8_t input1_quantized[tflite::testing::flat_size_broadcast];
+  int8_t input2_quantized[tflite::testing::flat_size_broadcast];
+  int8_t golden_quantized[tflite::testing::flat_size_broadcast];
+  int8_t output_data[tflite::testing::flat_size_broadcast];
+
+  tflite::testing::TestMulQuantized(
+      tflite::testing::dims_broadcast, tflite::testing::input1_broadcast,
+      input1_quantized, tflite::testing::dims_scalar_broadcast,
+      tflite::testing::input2_broadcast, input2_quantized,
+      tflite::testing::input_scale_broadcast, 0,
+      tflite::testing::dims_broadcast, tflite::testing::golden_broadcast,
+      golden_quantized, tflite::testing::output_scale_broadcast, 0, output_data,
+      kTfLiteActNone);
+}
+
+TF_LITE_MICRO_TEST(BroadcastUInt8NoAcativationShouldMatchGolden) {
+  uint8_t input1_quantized[tflite::testing::flat_size_broadcast];
+  uint8_t input2_quantized[1];
+  uint8_t golden_quantized[tflite::testing::flat_size_broadcast];
+  uint8_t output_data[tflite::testing::flat_size_broadcast];
+
+  tflite::testing::TestMulQuantized(
+      tflite::testing::dims_broadcast, tflite::testing::input1_broadcast,
+      input1_quantized, tflite::testing::dims_scalar_broadcast,
+      tflite::testing::input2_broadcast, input2_quantized,
+      tflite::testing::input_scale_broadcast, 128,
+      tflite::testing::dims_broadcast, tflite::testing::golden_broadcast,
+      golden_quantized, tflite::testing::output_scale_broadcast, 128,
       output_data, kTfLiteActNone);
 }
 
diff --git a/tensorflow/lite/micro/kernels/neg_test.cc b/tensorflow/lite/micro/kernels/neg_test.cc
index 2d7c449..544a3ed 100644
--- a/tensorflow/lite/micro/kernels/neg_test.cc
+++ b/tensorflow/lite/micro/kernels/neg_test.cc
@@ -24,13 +24,11 @@
 namespace testing {
 namespace {
 
-void TestNegFloat(std::initializer_list<int> input_dims_data,
-                  std::initializer_list<float> input_data,
-                  std::initializer_list<float> expected_output_data,
-                  std::initializer_list<int> output_dims_data,
-                  float* output_data) {
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestNegFloat(const int* input_dims_data, const float* input_data,
+                  const float* expected_output_data,
+                  const int* output_dims_data, float* output_data) {
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
   constexpr int inputs_size = 1;
   constexpr int outputs_size = 1;
@@ -53,9 +51,9 @@
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
 
-  TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[0], output_data[0]);
+  TF_LITE_MICRO_EXPECT_EQ(expected_output_data[0], output_data[0]);
   for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
+    TF_LITE_MICRO_EXPECT_EQ(expected_output_data[i], output_data[i]);
   }
 }
 
@@ -66,23 +64,21 @@
 TF_LITE_MICRO_TESTS_BEGIN
 
 TF_LITE_MICRO_TEST(NegOpSingleFloat) {
+  const int dims[] = {1, 2};
+  const float input_data[] = {8.5, 0.0};
+  const float golden[] = {-8.5, 0.0};
   float output_data[2];
-  tflite::testing::TestNegFloat(/*input_dims_data=*/{1, 2},
-                                /*input_data=*/{8.5f, 0.0f},
-                                /*expected_output_data=*/{-8.5f, 0.0f},
-                                /*output_dims_data*/ {1, 2},
-                                /*output_data=*/output_data);
+
+  tflite::testing::TestNegFloat(dims, input_data, golden, dims, output_data);
 }
 
 TF_LITE_MICRO_TEST(NegOpFloat) {
+  const int dims[] = {2, 2, 3};
+  const float input_data[] = {-2.0f, -1.0f, 0.f, 1.0f, 2.0f, 3.0f};
+  const float golden[] = {2.0f, 1.0f, -0.f, -1.0f, -2.0f, -3.0f};
   float output_data[6];
-  tflite::testing::TestNegFloat(/*input_dims_data=*/{2, 2, 3},
-                                /*input_data=*/
-                                {-2.0f, -1.0f, 0.f, 1.0f, 2.0f, 3.0f},
-                                /*expected_output_data=*/
-                                {2.0f, 1.0f, -0.f, -1.0f, -2.0f, -3.0f},
-                                /*output_dims_data=*/{2, 2, 3},
-                                /*output_data=*/output_data);
+
+  tflite::testing::TestNegFloat(dims, input_data, golden, dims, output_data);
 }
 
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/pack_test.cc b/tensorflow/lite/micro/kernels/pack_test.cc
index 45d5e32..c05595d 100644
--- a/tensorflow/lite/micro/kernels/pack_test.cc
+++ b/tensorflow/lite/micro/kernels/pack_test.cc
@@ -23,16 +23,39 @@
 namespace tflite {
 namespace testing {
 
-void TestPackTwoInputsFloat(std::initializer_list<int> input1_dims_data,
-                            std::initializer_list<float> input1_data,
-                            std::initializer_list<int> input2_dims_data,
-                            std::initializer_list<float> input2_data, int axis,
-                            std::initializer_list<int> output_dims_data,
-                            std::initializer_list<float> expected_output_data,
+template <typename T>
+void ValidatePackGoldens(TfLiteTensor* tensors, int tensors_size,
+                         TfLitePackParams params, TfLiteIntArray* inputs_array,
+                         TfLiteIntArray* outputs_array, const T* golden,
+                         int output_len, float tolerance, T* output) {
+  // Place a unique value in the uninitialized output buffer.
+  for (int i = 0; i < output_len; ++i) {
+    output[i] = 23;
+  }
+
+  const TfLiteRegistration registration = tflite::ops::micro::Register_PACK();
+  micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
+                             outputs_array, reinterpret_cast<void*>(&params),
+                             micro_test::reporter);
+
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
+
+  for (int i = 0; i < output_len; ++i) {
+    TF_LITE_MICRO_EXPECT_NEAR(golden[i], output[i], tolerance);
+  }
+}
+
+void TestPackTwoInputsFloat(const int* input1_dims_data,
+                            const float* input1_data,
+                            const int* input2_dims_data,
+                            const float* input2_data, int axis,
+                            const int* output_dims_data,
+                            const float* expected_output_data,
                             float* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int input_size = 2;
@@ -43,11 +66,6 @@
       CreateFloatTensor(input2_data, input2_dims),
       CreateFloatTensor(output_data, output_dims)};
 
-  // Place a unique value in the uninitialized output buffer.
-  for (int i = 0; i < output_dims_count; ++i) {
-    output_data[i] = 23;
-  }
-
   TfLitePackParams builtin_data = {
       .values_count = 2,
       .axis = axis,
@@ -57,34 +75,21 @@
   int outputs_array_data[] = {1, 2};
   TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
 
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PACK();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidatePackGoldens(tensors, tensors_size, builtin_data, inputs_array,
+                      outputs_array, expected_output_data, output_dims_count,
+                      1e-5f, output_data);
 }
 
-void TestPackThreeInputsFloat(std::initializer_list<int> input1_dims_data,
-                              std::initializer_list<float> input1_data,
-                              std::initializer_list<int> input2_dims_data,
-                              std::initializer_list<float> input2_data,
-                              std::initializer_list<int> input3_dims_data,
-                              std::initializer_list<float> input3_data,
-                              int axis,
-                              std::initializer_list<int> output_dims_data,
-                              std::initializer_list<float> expected_output_data,
-                              float* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* input3_dims = IntArrayFromInitializer(input3_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestPackThreeInputsFloat(
+    const int* input1_dims_data, const float* input1_data,
+    const int* input2_dims_data, const float* input2_data,
+    const int* input3_dims_data, const float* input3_data, int axis,
+    const int* output_dims_data, const float* expected_output_data,
+    float* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* input3_dims = IntArrayFromInts(input3_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int input_size = 3;
@@ -96,95 +101,67 @@
       CreateFloatTensor(input3_data, input3_dims),
       CreateFloatTensor(output_data, output_dims)};
 
-  // Place a unique value in the uninitialized output buffer.
-  for (int i = 0; i < output_dims_count; ++i) {
-    output_data[i] = 23;
-  }
-
   TfLitePackParams builtin_data = {
       .values_count = 3,
       .axis = axis,
   };
-
   int inputs_array_data[] = {3, 0, 1, 2};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
   int outputs_array_data[] = {1, 3};
   TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
 
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PACK();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidatePackGoldens(tensors, tensors_size, builtin_data, inputs_array,
+                      outputs_array, expected_output_data, output_dims_count,
+                      1e-5f, output_data);
 }
 
-void TestPackTwoInputsQuantized(
-    std::initializer_list<int> input1_dims_data,
-    std::initializer_list<uint8_t> input1_data,
-    std::initializer_list<int> input2_dims_data,
-    std::initializer_list<uint8_t> input2_data, int axis,
-    std::initializer_list<int> output_dims_data,
-    std::initializer_list<uint8_t> expected_output_data, uint8_t* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestPackTwoInputsQuantized(const int* input1_dims_data,
+                                const uint8_t* input1_data,
+                                const int* input2_dims_data,
+                                const uint8_t* input2_data, int axis,
+                                const int* output_dims_data,
+                                const uint8_t* expected_output_data,
+                                uint8_t* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int input_size = 2;
   constexpr int output_size = 1;
   constexpr int tensors_size = input_size + output_size;
   TfLiteTensor tensors[tensors_size] = {
-      // CreateQuantizedTensor needs min/max values as input, but these values
-      // don't matter as to the functionality of PACK, so just set as 0 and 10.
-      CreateQuantizedTensor(input1_data, input1_dims, 0, 10),
-      CreateQuantizedTensor(input2_data, input2_dims, 0, 10),
-      CreateQuantizedTensor(output_data, output_dims, 0, 10)};
-
-  // Place a unique value in the uninitialized output buffer.
-  for (int i = 0; i < output_dims_count; ++i) {
-    output_data[i] = 23;
-  }
+      // CreateQuantizedTensor needs scale/zero_point values as input, but these
+      // values don't matter as to the functionality of PACK, so just set as 1.0
+      // and 128.
+      CreateQuantizedTensor(input1_data, input1_dims, 1.0, 128),
+      CreateQuantizedTensor(input2_data, input2_dims, 1.0, 128),
+      CreateQuantizedTensor(output_data, output_dims, 1.0, 128)};
 
   TfLitePackParams builtin_data = {
       .values_count = 2,
       .axis = axis,
   };
-
   int inputs_array_data[] = {2, 0, 1};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
   int outputs_array_data[] = {1, 2};
   TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
 
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PACK();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
-  }
+  ValidatePackGoldens(tensors, tensors_size, builtin_data, inputs_array,
+                      outputs_array, expected_output_data, output_dims_count,
+                      1e-5f, output_data);
 }
 
-void TestPackTwoInputsQuantized32(
-    std::initializer_list<int> input1_dims_data,
-    std::initializer_list<int32_t> input1_data,
-    std::initializer_list<int> input2_dims_data,
-    std::initializer_list<int32_t> input2_data, int axis,
-    std::initializer_list<int> output_dims_data,
-    std::initializer_list<int32_t> expected_output_data, int32_t* output_data) {
-  TfLiteIntArray* input1_dims = IntArrayFromInitializer(input1_dims_data);
-  TfLiteIntArray* input2_dims = IntArrayFromInitializer(input2_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestPackTwoInputsQuantized32(const int* input1_dims_data,
+                                  const int32_t* input1_data,
+                                  const int* input2_dims_data,
+                                  const int32_t* input2_data, int axis,
+                                  const int* output_dims_data,
+                                  const int32_t* expected_output_data,
+                                  int32_t* output_data) {
+  TfLiteIntArray* input1_dims = IntArrayFromInts(input1_dims_data);
+  TfLiteIntArray* input2_dims = IntArrayFromInts(input2_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int input_size = 2;
@@ -195,32 +172,18 @@
       CreateQuantized32Tensor(input2_data, input2_dims, 1.0),
       CreateQuantized32Tensor(output_data, output_dims, 1.0)};
 
-  // Place a unique value in the uninitialized output buffer.
-  for (int i = 0; i < output_dims_count; ++i) {
-    output_data[i] = 23;
-  }
-
   TfLitePackParams builtin_data = {
       .values_count = 2,
       .axis = axis,
   };
-
   int inputs_array_data[] = {2, 0, 1};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
   int outputs_array_data[] = {1, 2};
   TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
 
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PACK();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
-  }
+  ValidatePackGoldens(tensors, tensors_size, builtin_data, inputs_array,
+                      outputs_array, expected_output_data, output_dims_count,
+                      1e-5f, output_data);
 }
 
 }  // namespace testing
@@ -229,99 +192,96 @@
 TF_LITE_MICRO_TESTS_BEGIN
 
 TF_LITE_MICRO_TEST(PackFloatThreeInputs) {
+  const int input_shape[] = {1, 2};
+  const int output_shape[] = {2, 3, 2};
+  const float input1_values[] = {1, 4};
+  const float input2_values[] = {2, 5};
+  const float input3_values[] = {3, 6};
+  const float golden[] = {1, 4, 2, 5, 3, 6};
+  const int axis = 0;
   constexpr int output_dims_count = 6;
   float output_data[output_dims_count];
+
   tflite::testing::TestPackThreeInputsFloat(
-      {1, 2},        // Input1 shape
-      {1, 4},        // Input1 values
-      {1, 2},        // Input2 shape
-      {2, 5},        // Input2 values
-      {1, 2},        // Input3 shape
-      {3, 6},        // Input3 values
-      0, {2, 3, 2},  // Output shape
-      {
-          1, 4, 2, 5, 3, 6  // Output values
-      },
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, input_shape,
+      input3_values, axis, output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TEST(PackFloatThreeInputsDifferentAxis) {
+  const int input_shape[] = {1, 2};
+  const int output_shape[] = {2, 2, 3};
+  const float input1_values[] = {1, 4};
+  const float input2_values[] = {2, 5};
+  const float input3_values[] = {3, 6};
+  const float golden[] = {1, 2, 3, 4, 5, 6};
+  const int axis = 1;
   constexpr int output_dims_count = 6;
   float output_data[output_dims_count];
+
   tflite::testing::TestPackThreeInputsFloat(
-      {1, 2},        // Input1 shape
-      {1, 4},        // Input1 values
-      {1, 2},        // Input2 shape
-      {2, 5},        // Input2 values
-      {1, 2},        // Input3 shape
-      {3, 6},        // Input3 values
-      1, {2, 2, 3},  // Output shape
-      {
-          1, 2, 3, 4, 5, 6  // Output values
-      },
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, input_shape,
+      input3_values, axis, output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TEST(PackFloatThreeInputsNegativeAxis) {
+  const int input_shape[] = {1, 2};
+  const int output_shape[] = {2, 2, 3};
+  const float input1_values[] = {1, 4};
+  const float input2_values[] = {2, 5};
+  const float input3_values[] = {3, 6};
+  const float golden[] = {1, 2, 3, 4, 5, 6};
+  const int axis = -1;
   constexpr int output_dims_count = 6;
   float output_data[output_dims_count];
+
   tflite::testing::TestPackThreeInputsFloat(
-      {1, 2},         // Input1 shape
-      {1, 4},         // Input1 values
-      {1, 2},         // Input2 shape
-      {2, 5},         // Input2 values
-      {1, 2},         // Input3 shape
-      {3, 6},         // Input3 values
-      -1, {2, 2, 3},  // Output shape
-      {
-          1, 2, 3, 4, 5, 6  // Output values
-      },
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, input_shape,
+      input3_values, axis, output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TEST(PackFloatMultilDimensions) {
+  const int input_shape[] = {2, 2, 3};
+  const int output_shape[] = {3, 2, 2, 3};
+  const float input1_values[] = {1, 2, 3, 4, 5, 6};
+  const float input2_values[] = {7, 8, 9, 10, 11, 12};
+  const float golden[] = {1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12};
+  const int axis = 1;
   constexpr int output_dims_count = 12;
   float output_data[output_dims_count];
-  tflite::testing::TestPackTwoInputsFloat(
-      {2, 2, 3},              // Input1 shape
-      {1, 2, 3, 4, 5, 6},     // Input1 values
-      {2, 2, 3},              // Input2 shape
-      {7, 8, 9, 10, 11, 12},  // Input2 values
-      1, {3, 2, 2, 3},        // Output shape
-      {
-          1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12  // Output values
-      },
-      output_data);
+
+  tflite::testing::TestPackTwoInputsFloat(input_shape, input1_values,
+                                          input_shape, input2_values, axis,
+                                          output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TEST(PackQuantizedMultilDimensions) {
+  const int input_shape[] = {2, 2, 3};
+  const int output_shape[] = {3, 2, 2, 3};
+  const uint8_t input1_values[] = {1, 2, 3, 4, 5, 6};
+  const uint8_t input2_values[] = {7, 8, 9, 10, 11, 12};
+  const uint8_t golden[] = {1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12};
+  const int axis = 1;
   constexpr int output_dims_count = 12;
   uint8_t output_data[output_dims_count];
+
   tflite::testing::TestPackTwoInputsQuantized(
-      {2, 2, 3},              // Input1 shape
-      {1, 2, 3, 4, 5, 6},     // Input1 values
-      {2, 2, 3},              // Input2 shape
-      {7, 8, 9, 10, 11, 12},  // Input2 values
-      1, {3, 2, 2, 3},        // Output shape
-      {
-          1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12  // Output values
-      },
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, axis,
+      output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TEST(PackQuantized32MultilDimensions) {
+  const int input_shape[] = {2, 2, 3};
+  const int output_shape[] = {3, 2, 2, 3};
+  const int32_t input1_values[] = {1, 2, 3, 4, 5, 6};
+  const int32_t input2_values[] = {7, 8, 9, 10, 11, 12};
+  const int32_t golden[] = {1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12};
+  const int axis = 1;
   constexpr int output_dims_count = 12;
   int32_t output_data[output_dims_count];
+
   tflite::testing::TestPackTwoInputsQuantized32(
-      {2, 2, 3},              // Input1 shape
-      {1, 2, 3, 4, 5, 6},     // Input1 values
-      {2, 2, 3},              // Input2 shape
-      {7, 8, 9, 10, 11, 12},  // Input2 values
-      1, {3, 2, 2, 3},        // Output shape
-      {
-          1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12  // Output values
-      },
-      output_data);
+      input_shape, input1_values, input_shape, input2_values, axis,
+      output_shape, golden, output_data);
 }
 
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/pooling_test.cc b/tensorflow/lite/micro/kernels/pooling_test.cc
index ec5eb47..a33f5df 100644
--- a/tensorflow/lite/micro/kernels/pooling_test.cc
+++ b/tensorflow/lite/micro/kernels/pooling_test.cc
@@ -25,27 +25,14 @@
 namespace testing {
 namespace {
 
-void TestAveragePoolingFloat(std::initializer_list<int> input_dims_data,
-                             std::initializer_list<float> input_data,
-                             const int filter_height, const int filter_width,
-                             const int stride_height, const int stride_width,
-                             std::initializer_list<float> expected_output_data,
-                             std::initializer_list<int> output_dims_data,
-                             TfLitePadding padding,
-                             TfLiteFusedActivation activation,
-                             float* output_data) {
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
-  const int output_dims_count = ElementCount(*output_dims);
-
-  constexpr int inputs_size = 1;
-  constexpr int outputs_size = 1;
-  constexpr int tensors_size = inputs_size + outputs_size;
-  TfLiteTensor tensors[tensors_size] = {
-      CreateFloatTensor(input_data, input_dims),
-      CreateFloatTensor(output_data, output_dims),
-  };
-
+template <typename T>
+void ValidatePoolingGoldens(TfLiteTensor* tensors, int tensors_size,
+                            const TfLiteRegistration registration,
+                            const int filter_height, const int filter_width,
+                            const int stride_height, const int stride_width,
+                            const T* golden, const int output_length,
+                            TfLitePadding padding,
+                            TfLiteFusedActivation activation, T* output_data) {
   int inputs_array_data[] = {1, 0};
   TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
   int outputs_array_data[] = {1, 1};
@@ -59,8 +46,6 @@
                                    activation,
                                    {}};
 
-  const TfLiteRegistration registration =
-      tflite::ops::micro::Register_AVERAGE_POOL_2D();
   micro::KernelRunner runner(
       registration, tensors, tensors_size, inputs_array, outputs_array,
       reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
@@ -68,73 +53,78 @@
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
   TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
 
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
+  for (int i = 0; i < output_length; ++i) {
+    TF_LITE_MICRO_EXPECT_NEAR(golden[i], output_data[i], 1e-5f);
   }
 }
 
+void TestAveragePoolFloat(const int* input_dims_data, const float* input_data,
+                          const int filter_height, const int filter_width,
+                          const int stride_height, const int stride_width,
+                          const float* expected_output_data,
+                          const int* output_dims_data, TfLitePadding padding,
+                          TfLiteFusedActivation activation,
+                          float* output_data) {
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
+  const int output_dims_count = ElementCount(*output_dims);
+
+  constexpr int inputs_size = 1;
+  constexpr int outputs_size = 1;
+  constexpr int tensors_size = inputs_size + outputs_size;
+  TfLiteTensor tensors[tensors_size] = {
+      CreateFloatTensor(input_data, input_dims),
+      CreateFloatTensor(output_data, output_dims),
+  };
+
+  const TfLiteRegistration registration =
+      tflite::ops::micro::Register_AVERAGE_POOL_2D();
+
+  ValidatePoolingGoldens(tensors, tensors_size, registration, filter_height,
+                         filter_width, stride_height, stride_width,
+                         expected_output_data, output_dims_count, padding,
+                         activation, output_data);
+}
+
 template <typename T>
-void TestAveragePoolingQuantized(
-    std::initializer_list<int> input_dims_data,
-    std::initializer_list<T> input_data, const float input_min,
-    const float input_max, const int filter_height, const int filter_width,
+void TestAveragePoolQuantized(
+    const int* input_dims_data, const T* input_data, const float input_scale,
+    const int input_zero_point, const int filter_height, const int filter_width,
     const int stride_height, const int stride_width,
-    std::initializer_list<T> expected_output_data,
-    std::initializer_list<int> output_dims_data, float output_min,
-    float output_max, TfLitePadding padding, TfLiteFusedActivation activation,
-    T* output_data) {
+    const T* expected_output_data, const int* output_dims_data,
+    const float output_scale, const int output_zero_point,
+    TfLitePadding padding, TfLiteFusedActivation activation, T* output_data) {
   static_assert(sizeof(T) == 1, "Only int8_t/uint8_t data types allowed.");
 
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 1;
   constexpr int outputs_size = 1;
   constexpr int tensors_size = inputs_size + outputs_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input_data, input_dims, input_min, input_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max),
+      CreateQuantizedTensor(input_data, input_dims, input_scale,
+                            input_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point),
   };
 
-  int inputs_array_data[] = {1, 0};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 1};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  TfLitePoolParams builtin_data = {padding,
-                                   stride_width,
-                                   stride_height,
-                                   filter_width,
-                                   filter_height,
-                                   activation,
-                                   {}};
-
   const TfLiteRegistration registration =
       tflite::ops::micro::Register_AVERAGE_POOL_2D();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidatePoolingGoldens(tensors, tensors_size, registration, filter_height,
+                         filter_width, stride_height, stride_width,
+                         expected_output_data, output_dims_count, padding,
+                         activation, output_data);
 }
 
-void TestMaxPoolFloat(std::initializer_list<int> input_dims_data,
-                      std::initializer_list<float> input_data, int filter_width,
-                      int filter_height, int stride_width, int stride_height,
-                      std::initializer_list<float> expected_output_data,
-                      std::initializer_list<int> output_dims_data,
-                      TfLitePadding padding, TfLiteFusedActivation activation,
-                      float* output_data) {
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestMaxPoolFloat(const int* input_dims_data, const float* input_data,
+                      int filter_width, int filter_height, int stride_width,
+                      int stride_height, const float* expected_output_data,
+                      const int* output_dims_data, TfLitePadding padding,
+                      TfLiteFusedActivation activation, float* output_data) {
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 1;
@@ -145,83 +135,43 @@
       CreateFloatTensor(output_data, output_dims),
   };
 
-  int inputs_array_data[] = {1, 0};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 1};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  TfLitePoolParams builtin_data = {padding,
-                                   stride_width,
-                                   stride_height,
-                                   filter_width,
-                                   filter_height,
-                                   activation,
-                                   {}};
-
   const TfLiteRegistration registration =
       tflite::ops::micro::Register_MAX_POOL_2D();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidatePoolingGoldens(tensors, tensors_size, registration, filter_height,
+                         filter_width, stride_height, stride_width,
+                         expected_output_data, output_dims_count, padding,
+                         activation, output_data);
 }
 
 template <typename T>
-void TestMaxPoolQuantized(std::initializer_list<int> input_dims_data,
-                          std::initializer_list<T> input_data, float input_min,
-                          float input_max, int filter_width, int filter_height,
-                          int stride_width, int stride_height,
-                          std::initializer_list<T> expected_output_data,
-                          float output_min, float output_max,
-                          std::initializer_list<int> output_dims_data,
-                          TfLitePadding padding,
+void TestMaxPoolQuantized(const int* input_dims_data, const T* input_data,
+                          const float input_scale, const int input_zero_point,
+                          const int filter_height, const int filter_width,
+                          const int stride_height, const int stride_width,
+                          const T* expected_output_data,
+                          const int* output_dims_data, const float output_scale,
+                          const int output_zero_point, TfLitePadding padding,
                           TfLiteFusedActivation activation, T* output_data) {
-  static_assert(sizeof(T) == 1, "Only int8_t/uint8_t data types allowed.");
-
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
 
   constexpr int inputs_size = 1;
   constexpr int outputs_size = 1;
   constexpr int tensors_size = inputs_size + outputs_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input_data, input_dims, input_min, input_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max),
+      CreateQuantizedTensor(input_data, input_dims, input_scale,
+                            input_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point),
   };
 
-  int inputs_array_data[] = {1, 0};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 1};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  TfLitePoolParams builtin_data = {padding,
-                                   stride_width,
-                                   stride_height,
-                                   filter_width,
-                                   filter_height,
-                                   activation,
-                                   {}};
-
   const TfLiteRegistration registration =
       tflite::ops::micro::Register_MAX_POOL_2D();
-  micro::KernelRunner runner(
-      registration, tensors, tensors_size, inputs_array, outputs_array,
-      reinterpret_cast<void*>(&builtin_data), micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
-  }
+  ValidatePoolingGoldens(tensors, tensors_size, registration, filter_height,
+                         filter_width, stride_height, stride_width,
+                         expected_output_data, output_dims_count, padding,
+                         activation, output_data);
 }
 
 }  // namespace
@@ -232,798 +182,535 @@
 TF_LITE_MICRO_TESTS_BEGIN
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestFloat) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const float golden[] = {2.75, 5.75};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   float output_data[2];
-  tflite::testing::TestAveragePoolingFloat({4, 1, 2, 4, 1},  // Input shape
-                                           {                 // Input values
-                                            0., 6., 2., 4., 3., 2., 10., 7.},
-                                           2, 2,  // filter width, filter height
-                                           2, 2,  // stride width, stride height
-                                           {
-                                               // Output values
-                                               2.75,
-                                               5.75,
-                                           },
-                                           {4, 1, 1, 2, 1},  // Output shape
-                                           kTfLitePaddingValid, kTfLiteActNone,
-                                           output_data);
+  tflite::testing::TestAveragePoolFloat(
+      input_shape, input_values, filter_height, filter_width, stride_height,
+      stride_width, golden, output_shape, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestUint8) {
-  using tflite::testing::F2Q;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.9375;
-  const float output_min = -15.9375;
-  const float output_max = 15.9375;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values[] = {0, 24, 8, 16, 12, 8, 40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const uint8_t golden[] = {11, 23};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   uint8_t output_data[2];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0., input_min, input_max),
-          F2Q(-6., input_min, input_max),
-          F2Q(2., input_min, input_max),
-          F2Q(4., input_min, input_max),
-          F2Q(3., input_min, input_max),
-          F2Q(2., input_min, input_max),
-          F2Q(-10., input_min, input_max),
-          F2Q(7., input_min, input_max),
-      },
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter width, filter height
-      2, 2,                  // stride width, stride height
-      {
-          // Output values
-          F2Q(0., output_min, output_max),
-          F2Q(0.75, output_min, output_max),
-      },
-      {4, 1, 1, 2, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingValid, kTfLiteActRelu, output_data);
+
+  const float input_scale = 0.25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestInt8PaddingValidStride2ActNone) {
-  using tflite::testing::F2QS;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.8130;
-  const float output_min = -15.9375;
-  const float output_max = 15.8130;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values[] = {0, -24, 8, 16, 12, 8, -40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden[] = {-1, 3};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {                 // Input values
-       F2QS(0., input_min, input_max), F2QS(-6., input_min, input_max),
-       F2QS(2., input_min, input_max), F2QS(4., input_min, input_max),
-       F2QS(3., input_min, input_max), F2QS(2., input_min, input_max),
-       F2QS(-10., input_min, input_max), F2QS(7., input_min, input_max)},
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter height, filter width
-      2, 2,                  // stride height, stride width
-      {                      // Output values
-       F2QS(-0.25, output_min, output_max), F2QS(0.75, output_min, output_max)},
-      {4, 1, 1, 2, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingValid, kTfLiteActNone, output_data);
+
+  const float input_scale = .25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestInt8PaddingValidStride1Stride2Relu) {
-  using tflite::testing::F2QS;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.8130;
-  const float output_min = -15.9375;
-  const float output_max = 15.8130;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values[] = {0, -24, 8, 16, 12, 8, -40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 2;
+  const int8_t golden[] = {0, 0, 3};
+  const int output_shape[] = {4, 1, 1, 3, 1};
   int8_t output_data[3];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {                 // Input values
-       F2QS(0., input_min, input_max), F2QS(-6., input_min, input_max),
-       F2QS(2., input_min, input_max), F2QS(4., input_min, input_max),
-       F2QS(3., input_min, input_max), F2QS(2., input_min, input_max),
-       F2QS(-10., input_min, input_max), F2QS(7., input_min, input_max)},
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter height, filter width
-      2, 1,                  // stride height, stride width
-      {                      // Output values
-       F2QS(0., output_min, output_max), F2QS(0., output_min, output_max),
-       F2QS(0.75, output_min, output_max)},
-      {4, 1, 1, 3, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingValid, kTfLiteActRelu, output_data);
+
+  const float input_scale = .25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(
     SimpleAveragePoolTestInt8PaddingValidStride2Stride1ReluN1To1) {
-  using tflite::testing::F2QS;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.8130;
-  const float output_min = -15.9375;
-  const float output_max = 15.8130;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values[] = {0, -24, 8, 16, 12, 8, -40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 1;
+  const int8_t golden[] = {-1, 3};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {                 // Input values
-       F2QS(0., input_min, input_max), F2QS(-6., input_min, input_max),
-       F2QS(2., input_min, input_max), F2QS(4., input_min, input_max),
-       F2QS(3., input_min, input_max), F2QS(2., input_min, input_max),
-       F2QS(-10., input_min, input_max), F2QS(7., input_min, input_max)},
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter height, filter width
-      1, 2,                  // stride height, stride width
-      {                      // Output values
-       F2QS(-0.25, output_min, output_max), F2QS(0.75, output_min, output_max)},
-      {4, 1, 1, 2, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingValid, kTfLiteActReluN1To1, output_data);
+
+  const float input_scale = .25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActReluN1To1,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestInt8PaddingValidStride2Relu6) {
-  using tflite::testing::F2QS;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.8130;
-  const float output_min = -15.9375;
-  const float output_max = 15.8130;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values[] = {12, -24, 32, 16, 12, 8, 40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden[] = {2, 24};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {                 // Input values
-       F2QS(3., input_min, input_max), F2QS(-6., input_min, input_max),
-       F2QS(8., input_min, input_max), F2QS(4., input_min, input_max),
-       F2QS(3., input_min, input_max), F2QS(2., input_min, input_max),
-       F2QS(10., input_min, input_max), F2QS(7., input_min, input_max)},
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter height, filter width
-      2, 2,                  // stride height, stride width
-      {                      // Output values
-       F2QS(0.5, output_min, output_max), F2QS(6., output_min, output_max)},
-      {4, 1, 1, 2, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingValid, kTfLiteActRelu6, output_data);
+
+  const float input_scale = .25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu6,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleAveragePoolTestInt8PaddingSameStride1ActNone) {
-  using tflite::testing::F2QS;
-
-  const float input_min = -15.9375;
-  const float input_max = 15.8130;
-  const float output_min = -15.9375;
-  const float output_max = 15.8130;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values[] = {12, -24, 32, 16, 12, 8, 40, 28};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const int8_t golden[] = {2, 14, 29, 22, 10, 24, 34, 28};
+  const int output_shape[] = {4, 1, 2, 4, 1};
   int8_t output_data[8];
-  tflite::testing::TestAveragePoolingQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {                 // Input values
-       F2QS(3., input_min, input_max), F2QS(-6., input_min, input_max),
-       F2QS(8., input_min, input_max), F2QS(4., input_min, input_max),
-       F2QS(3., input_min, input_max), F2QS(2., input_min, input_max),
-       F2QS(10., input_min, input_max), F2QS(7., input_min, input_max)},
-      input_min, input_max,  // input quantization range
-      2, 2,                  // filter height, filter width
-      1, 1,                  // stride height, stride width
-      {                      // Output values
-       F2QS(0.5, output_min, output_max), F2QS(3.5, output_min, output_max),
-       F2QS(7.25, output_min, output_max), F2QS(5.5, output_min, output_max),
-       F2QS(2.5, output_min, output_max), F2QS(6., output_min, output_max),
-       F2QS(8.5, output_min, output_max), F2QS(7., output_min, output_max)},
-      {4, 1, 2, 4, 1},         // Output shape
-      output_min, output_max,  // output quantization range
-      kTfLitePaddingSame, kTfLiteActNone, output_data);
+
+  const float input_scale = .25;
+  const int input_zero_point = 0;
+  const float output_scale = .25;
+  const int output_zero_point = 0;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestFloat) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const float golden[] = {6, 10};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   float output_data[2];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {                 // Input values
-                                     0, 6, 2, 4, 3, 2, 10, 7},
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        6,
-                                        10,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActNone,
-                                    output_data);
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActNone, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestFloatRelu) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values[] = {-1, -6, 2, 4, -3, -2, 10.5, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const float golden[] = {0, 10.5};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   float output_data[2];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        -1, -6, 2, 4,     //
-                                        -3, -2, 10.5, 7,  //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        0.0,
-                                        10.5,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActRelu,
-                                    output_data);
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActRelu, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestFloatReluN1To1) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values1[] = {-2.75, -6, 0.2, 0.4, -3, -2, -0.3, 0.7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const float golden1[] = {-1.0, 0.7};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   float output_data[2];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        -2.75, -6, 0.2, 0.4,  //
-                                        -3, -2, -0.3, 0.7,    //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        -1.0,
-                                        0.7,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActReluN1To1,
-                                    output_data);
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values1, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden1, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActReluN1To1, output_data);
 
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        -2.75, -6, -2, -4,  //
-                                        -3, -2, 10, -7,     //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        -1.0,
-                                        1.0,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActReluN1To1,
-                                    output_data);
+  const float input_values2[] = {-2.75, -6, -2, -4, -3, -2, 10, -7};
+  const float golden2[] = {-1.0, 1.0};
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values2, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden2, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActReluN1To1, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestFloatRelu6) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values1[] = {-1.5, -6, 12, 4, -3, -2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const float golden1[] = {0, 6};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   float output_data[2];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        -1.5, -6, 12, 4,  //
-                                        -3, -2, 10, 7,    //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        0.0,
-                                        6.0,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActRelu6,
-                                    output_data);
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values1, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden1, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActRelu6, output_data);
 
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        0, 4.5, 12, 4,  //
-                                        3, 2, 10, 7,    //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    2, 2,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        4.5,
-                                        6.0,
-                                    },
-                                    {4, 1, 1, 2, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActRelu6,
-                                    output_data);
+  const float input_values2[] = {0, 4.5, 12, 4, 3, 2, 10, 7};
+  const float golden2[] = {4.5, 6};
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values2, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden2, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActRelu6, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestPaddingSameStride1) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const float golden[] = {6, 10, 10, 7, 3, 10, 10, 7};
+  const int output_shape[] = {4, 1, 2, 4, 1};
   float output_data[8];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        0, 6, 2, 4,   //
-                                        3, 2, 10, 7,  //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    1, 1,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        6, 10, 10, 7,  //
-                                        3, 10, 10, 7,  //
-                                    },
-                                    {4, 1, 2, 4, 1},  // Output shape
-                                    kTfLitePaddingSame, kTfLiteActNone,
-                                    output_data);
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden, output_shape, kTfLitePaddingSame,
+                                    kTfLiteActNone, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestPaddingValidStride1) {
-  float output_data[3];
-  tflite::testing::TestMaxPoolFloat({4, 1, 2, 4, 1},  // Input shape
-                                    {
-                                        // Input values
-                                        0, 6, 2, 4,   //
-                                        3, 2, 10, 7,  //
-                                    },
-                                    2, 2,  // filter width, filter height
-                                    1, 1,  // stride width, stride height
-                                    {
-                                        // Output values
-                                        6,
-                                        10,
-                                        10,
-                                    },
-                                    {4, 1, 1, 3, 1},  // Output shape
-                                    kTfLitePaddingValid, kTfLiteActNone,
-                                    output_data);
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const float input_values[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const float golden[] = {6, 10, 10};
+  const int output_shape[] = {4, 1, 1, 3, 1};
+  float output_data[8];
+  tflite::testing::TestMaxPoolFloat(input_shape, input_values, filter_height,
+                                    filter_width, stride_height, stride_width,
+                                    golden, output_shape, kTfLitePaddingValid,
+                                    kTfLiteActNone, output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestUInt8ActNone) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values[] = {0, 12, 4, 8, 6, 4, 20, 14};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const uint8_t golden[] = {12, 20};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   uint8_t output_data[2];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0, input_min, input_max),
-          F2Q(6, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(3, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2Q(6, output_min, output_max), F2Q(10, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActNone, output_data);
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActRelu) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values[] = {0, 4, 2, 4, 3, 2, 14, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const uint8_t golden[] = {4, 14};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   uint8_t output_data[2];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 4;
+  const float output_scale = 1.0;
+  const int output_zero_point = 4;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(-1.5, input_min, input_max),
-          F2Q(-6, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(-3, input_min, input_max),
-          F2Q(-2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2Q(0, output_min, output_max), F2Q(10, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu, output_data);
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActReluN1To1) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values[] = {0, 4, 2, 4, 3, 2, 14, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const uint8_t golden[] = {3, 5};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   uint8_t output_data[2];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
-  tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(-1.7, input_min, input_max),
-          F2Q(-6, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(-3, input_min, input_max),
-          F2Q(-2, input_min, input_max),
-          F2Q(-10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2Q(-1.0, output_min, output_max), F2Q(1.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActReluN1To1, output_data);
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 4;
+  const float output_scale = 1.0;
+  const int output_zero_point = 4;
+  tflite::testing::TestAveragePoolQuantized(
+      input_shape, input_values, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActReluN1To1,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActRelu6) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values1[] = {12, 0, 36, 20, 6, 8, 32, 26};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const uint8_t golden1[] = {12, 24};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   uint8_t output_data[8];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
-  tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0, input_min, input_max),
-          F2Q(-6, input_min, input_max),
-          F2Q(12, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(-3, input_min, input_max),
-          F2Q(-2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2Q(0.0, output_min, output_max), F2Q(6.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu6, output_data);
 
+  const float input_scale = 0.5;
+  const int input_zero_point = 12;
+  const float output_scale = 0.5;
+  const int output_zero_point = 12;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0, input_min, input_max),
-          F2Q(4.5, input_min, input_max),
-          F2Q(12, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(3, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2Q(4.5, output_min, output_max), F2Q(6.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu6, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu6,
+      output_data);
+
+  const uint8_t input_values2[] = {12, 21, 36, 16, 18, 16, 32, 26};
+
+  const uint8_t golden2[] = {21, 24};
+  tflite::testing::TestMaxPoolQuantized(
+      input_shape, input_values2, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden2, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu6,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8PaddingSameStride1) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values1[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const uint8_t golden1[] = {6, 10, 10, 7, 3, 10, 10, 7};
+  const int output_shape[] = {4, 1, 2, 4, 1};
   uint8_t output_data[8];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 1;
-  int stride_height = 1;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0, input_min, input_max),
-          F2Q(6, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(3, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {
-          // Output values
-          F2Q(6, output_min, output_max),
-          F2Q(10, output_min, output_max),
-          F2Q(10, output_min, output_max),
-          F2Q(7, output_min, output_max),
-          F2Q(3, output_min, output_max),
-          F2Q(10, output_min, output_max),
-          F2Q(10, output_min, output_max),
-          F2Q(7, output_min, output_max),
-      },
-      output_min, output_max, {4, 1, 2, 4, 1},  // Output shape
-      kTfLitePaddingSame, kTfLiteActNone, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8PaddingValidStride1) {
-  using tflite::testing::F2Q;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values1[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const uint8_t golden1[] = {6, 10, 10};
+  const int output_shape[] = {4, 1, 1, 3, 1};
   uint8_t output_data[3];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 1;
-  int stride_height = 1;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2Q(0, input_min, input_max),
-          F2Q(6, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(4, input_min, input_max),
-          F2Q(3, input_min, input_max),
-          F2Q(2, input_min, input_max),
-          F2Q(10, input_min, input_max),
-          F2Q(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {
-          // Output values
-          F2Q(6, output_min, output_max),
-          F2Q(10, output_min, output_max),
-          F2Q(10, output_min, output_max),
-      },
-      output_min, output_max, {4, 1, 1, 3, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActNone, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(SimpleMaxPoolTestInt8ActNone) {
-  using tflite::testing::F2QS;
-
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values1[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden1[] = {6, 10};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(0, input_min, input_max),
-          F2QS(6, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(3, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2QS(6, output_min, output_max), F2QS(10, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActNone, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
-TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActRelu) {
-  using tflite::testing::F2QS;
-
+TF_LITE_MICRO_TEST(MaxPoolTestInt8ActRelu) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values1[] = {-3, -12, 4, 8, -6, -4, 20, 14};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden1[] = {0, 20};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+
+  const float input_scale = 0.5;
+  const int input_zero_point = 0;
+  const float output_scale = 0.5;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(-1.5, input_min, input_max),
-          F2QS(-6, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(-3, input_min, input_max),
-          F2QS(-2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2QS(0, output_min, output_max), F2QS(10, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu,
+      output_data);
 }
 
-TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActReluN1To1) {
-  using tflite::testing::F2QS;
-
+TF_LITE_MICRO_TEST(MaxPoolTestInt8ActReluN1To1) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values1[] = {-2, -6, -2, -4, -3, -2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden1[] = {-1, 1};
+  const int output_shape[] = {4, 1, 1, 2, 1};
   int8_t output_data[2];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(-1.7, input_min, input_max),
-          F2QS(-6, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(-3, input_min, input_max),
-          F2QS(-2, input_min, input_max),
-          F2QS(-10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2QS(-1.0, output_min, output_max), F2QS(1.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActReluN1To1, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActReluN1To1,
+      output_data);
 }
 
-TF_LITE_MICRO_TEST(MaxPoolTestUInt8ActRelu6) {
-  using tflite::testing::F2QS;
+TF_LITE_MICRO_TEST(MaxPoolTestInt8ActRelu6) {
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const int8_t input_values1[] = {0, -6, 12, 4, -3, -2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 2;
+  const int stride_height = 2;
+  const int8_t golden1[] = {0, 6};
+  const int output_shape[] = {4, 1, 1, 2, 1};
+  int8_t output_data[2];
 
-  int8_t output_data[8];
-  float input_min = -15.9375;
-  float input_max = 15.9375;
-  float output_min = -15.9375;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 2;
-  int stride_height = 2;
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(0, input_min, input_max),
-          F2QS(-6, input_min, input_max),
-          F2QS(12, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(-3, input_min, input_max),
-          F2QS(-2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2QS(0.0, output_min, output_max), F2QS(6.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu6, output_data);
-
-  tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(0, input_min, input_max),
-          F2QS(4.5, input_min, input_max),
-          F2QS(12, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(3, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {// Output values
-       F2QS(4.5, output_min, output_max), F2QS(6.0, output_min, output_max)},
-      output_min, output_max, {4, 1, 1, 2, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActRelu6, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActRelu6,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8PaddingSameStride1) {
-  using tflite::testing::F2QS;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values1[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const uint8_t golden1[] = {6, 10, 10, 7, 3, 10, 10, 7};
+  const int output_shape[] = {4, 1, 2, 4, 1};
+  uint8_t output_data[8];
 
-  int8_t output_data[8];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 1;
-  int stride_height = 1;
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(0, input_min, input_max),
-          F2QS(6, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(3, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {
-          // Output values
-          F2QS(6, output_min, output_max),
-          F2QS(10, output_min, output_max),
-          F2QS(10, output_min, output_max),
-          F2QS(7, output_min, output_max),
-          F2QS(3, output_min, output_max),
-          F2QS(10, output_min, output_max),
-          F2QS(10, output_min, output_max),
-          F2QS(7, output_min, output_max),
-      },
-      output_min, output_max, {4, 1, 2, 4, 1},  // Output shape
-      kTfLitePaddingSame, kTfLiteActNone, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingSame, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TEST(MaxPoolTestUInt8PaddingValidStride1) {
-  using tflite::testing::F2QS;
+  const int input_shape[] = {4, 1, 2, 4, 1};
+  const uint8_t input_values1[] = {0, 6, 2, 4, 3, 2, 10, 7};
+  const int filter_width = 2;
+  const int filter_height = 2;
+  const int stride_width = 1;
+  const int stride_height = 1;
+  const uint8_t golden1[] = {6, 10, 10};
+  const int output_shape[] = {4, 1, 1, 3, 1};
+  uint8_t output_data[3];
 
-  int8_t output_data[3];
-  float input_min = 0;
-  float input_max = 15.9375;
-  float output_min = 0;
-  float output_max = 15.9375;
-  int filter_width = 2;
-  int filter_height = 2;
-  int stride_width = 1;
-  int stride_height = 1;
+  const float input_scale = 1.0;
+  const int input_zero_point = 0;
+  const float output_scale = 1.0;
+  const int output_zero_point = 0;
   tflite::testing::TestMaxPoolQuantized(
-      {4, 1, 2, 4, 1},  // Input shape
-      {
-          // Input values
-          F2QS(0, input_min, input_max),
-          F2QS(6, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(4, input_min, input_max),
-          F2QS(3, input_min, input_max),
-          F2QS(2, input_min, input_max),
-          F2QS(10, input_min, input_max),
-          F2QS(7, input_min, input_max),
-      },
-      input_min, input_max, filter_width, filter_height, stride_width,
-      stride_height,
-      {
-          // Output values
-          F2QS(6, output_min, output_max),
-          F2QS(10, output_min, output_max),
-          F2QS(10, output_min, output_max),
-      },
-      output_min, output_max, {4, 1, 1, 3, 1},  // Output shape
-      kTfLitePaddingValid, kTfLiteActNone, output_data);
+      input_shape, input_values1, input_scale, input_zero_point, filter_height,
+      filter_width, stride_height, stride_width, golden1, output_shape,
+      output_scale, output_zero_point, kTfLitePaddingValid, kTfLiteActNone,
+      output_data);
 }
 
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/prelu_test.cc b/tensorflow/lite/micro/kernels/prelu_test.cc
index 4e35276..f559ddf 100644
--- a/tensorflow/lite/micro/kernels/prelu_test.cc
+++ b/tensorflow/lite/micro/kernels/prelu_test.cc
@@ -23,16 +23,35 @@
 namespace testing {
 namespace {
 
-void TestPreluFloat(std::initializer_list<int> input_dims_data,
-                    std::initializer_list<float> input_data,
-                    std::initializer_list<int> alpha_dims_data,
-                    std::initializer_list<float> alpha_data,
-                    std::initializer_list<float> expected_output_data,
-                    std::initializer_list<int> output_dims_data,
-                    float* output_data) {
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* alpha_dims = IntArrayFromInitializer(alpha_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+template <typename T>
+void ValidatePreluGoldens(TfLiteTensor* tensors, int tensors_size,
+                          const T* golden, const int output_length,
+                          T* output_data) {
+  int inputs_array_data[] = {2, 0, 1};
+  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
+  int outputs_array_data[] = {1, 2};
+  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
+
+  const TfLiteRegistration registration = tflite::ops::micro::Register_PRELU();
+  micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
+                             outputs_array,
+                             /*builtin_data=*/nullptr, micro_test::reporter);
+
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
+  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
+
+  for (int i = 0; i < output_length; ++i) {
+    TF_LITE_MICRO_EXPECT_NEAR(golden[i], output_data[i], 1e-5f);
+  }
+}
+
+void TestPreluFloat(const int* input_dims_data, const float* input_data,
+                    const int* alpha_dims_data, const float* alpha_data,
+                    const float* expected_output_data,
+                    const int* output_dims_data, float* output_data) {
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* alpha_dims = IntArrayFromInts(alpha_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
   constexpr int inputs_size = 2;
   constexpr int outputs_size = 1;
@@ -43,66 +62,42 @@
       CreateFloatTensor(output_data, output_dims),
   };
 
-  int inputs_array_data[] = {2, 0, 1};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 2};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PRELU();
-  micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
-                             outputs_array,
-                             /*builtin_data=*/nullptr, micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_NEAR(expected_output_data.begin()[i], output_data[i],
-                              1e-5f);
-  }
+  ValidatePreluGoldens(tensors, tensors_size, expected_output_data,
+                       output_dims_count, output_data);
 }
 
 // Template argument T can be either uint8_t or int8_t depending on which type
 // of quantization required to be tested.
 template <typename T>
-void TestPreluQuantized(std::initializer_list<int> input_dims_data,
-                        std::initializer_list<T> input_data, float input_min,
-                        float input_max,
-                        std::initializer_list<int> alpha_dims_data,
-                        std::initializer_list<T> alpha_data, float alpha_min,
-                        float alpha_max,
-                        std::initializer_list<T> expected_output_data,
-                        std::initializer_list<int> output_dims_data,
-                        float output_min, float output_max, T* output_data) {
-  TfLiteIntArray* input_dims = IntArrayFromInitializer(input_dims_data);
-  TfLiteIntArray* alpha_dims = IntArrayFromInitializer(alpha_dims_data);
-  TfLiteIntArray* output_dims = IntArrayFromInitializer(output_dims_data);
+void TestPreluQuantized(const int* input_dims_data, const float* input_data,
+                        T* input_quantized, const float input_scale,
+                        const int input_zero_point, const int* alpha_dims_data,
+                        const float* alpha_data, T* alpha_quantized,
+                        const float alpha_scale, const int alpha_zero_point,
+                        const float* golden, T* golden_quantized,
+                        const float output_scale, const int output_zero_point,
+                        const int* output_dims_data, T* output_data) {
+  TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
+  TfLiteIntArray* alpha_dims = IntArrayFromInts(alpha_dims_data);
+  TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
   const int output_dims_count = ElementCount(*output_dims);
   constexpr int inputs_size = 2;
   constexpr int outputs_size = 1;
   constexpr int tensors_size = inputs_size + outputs_size;
   TfLiteTensor tensors[tensors_size] = {
-      CreateQuantizedTensor(input_data, input_dims, input_min, input_max),
-      CreateQuantizedTensor(alpha_data, alpha_dims, alpha_min, alpha_max),
-      CreateQuantizedTensor(output_data, output_dims, output_min, output_max),
+      CreateQuantizedTensor(input_data, input_quantized, input_dims,
+                            input_scale, input_zero_point),
+      CreateQuantizedTensor(alpha_data, alpha_quantized, alpha_dims,
+                            alpha_scale, alpha_zero_point),
+      CreateQuantizedTensor(output_data, output_dims, output_scale,
+                            output_zero_point),
   };
 
-  int inputs_array_data[] = {2, 0, 1};
-  TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
-  int outputs_array_data[] = {1, 2};
-  TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
+  AsymmetricQuantize(golden, golden_quantized, output_dims_count, output_scale,
+                     output_zero_point);
 
-  const TfLiteRegistration registration = tflite::ops::micro::Register_PRELU();
-  micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
-                             outputs_array,
-                             /*builtin_data=*/nullptr, micro_test::reporter);
-
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
-  TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
-  for (int i = 0; i < output_dims_count; ++i) {
-    TF_LITE_MICRO_EXPECT_EQ(expected_output_data.begin()[i], output_data[i]);
-  }
+  ValidatePreluGoldens(tensors, tensors_size, golden_quantized,
+                       output_dims_count, output_data);
 }
 }  // namespace
 }  // namespace testing
@@ -111,74 +106,89 @@
 TF_LITE_MICRO_TESTS_BEGIN
 
 TF_LITE_MICRO_TEST(FloatPreluActivationsOpTest) {
+  const int input_shape[] = {3, 2, 2, 3};
+  const float input_values[] = {
+      0.0f,  0.0f,  0.0f,   // Row 1, Column 1
+      1.0f,  1.0f,  1.0f,   // Row 1, Column 2
+      -1.0f, -1.0f, -1.0f,  // Row 2, Column 1
+      -2.0f, -2.0f, -2.0f,  // Row 1, Column 2
+  };
+  const int alpha_shape[] = {3, 1, 1, 3};
+  const float alpha_values[] = {0.0f, 1.0f, 2.0f};
+  const int output_shape[] = {3, 2, 2, 3};
+  const float golden[] = {
+      0.0f, 0.0f,  0.0f,   // Row 1, Column 1
+      1.0f, 1.0f,  1.0f,   // Row 1, Column 2
+      0.0f, -1.0f, -2.0f,  // Row 2, Column 1
+      0.0f, -2.0f, -4.0f,  // Row 1, Column 2
+  };
   const int output_dims_count = 12;
   float output_data[output_dims_count];
-  tflite::testing::TestPreluFloat({3, 2, 2, 3},  // input shape
-                                  {
-                                      0.0f, 0.0f, 0.0f,     // Row 1, Column 1
-                                      1.0f, 1.0f, 1.0f,     // Row 1, Column 2
-                                      -1.0f, -1.0f, -1.0f,  // Row 2, Column 1
-                                      -2.0f, -2.0f, -2.0f,  // Row 1, Column 2
-                                  },
-                                  {3, 1, 1, 3},        // alpha shape
-                                  {0.0f, 1.0f, 2.0f},  // alpha values
-                                  {
-                                      0.0f, 0.0f, 0.0f,    // Row 1, Column 1
-                                      1.0f, 1.0f, 1.0f,    // Row 1, Column 2
-                                      0.0f, -1.0f, -2.0f,  // Row 2, Column 1
-                                      0.0f, -2.0f, -4.0f,  // Row 1, Column 2
-                                  },
-                                  {3, 2, 2, 3},  // output shape
+  tflite::testing::TestPreluFloat(input_shape, input_values, alpha_shape,
+                                  alpha_values, golden, output_shape,
                                   output_data);
 }
 
 TF_LITE_MICRO_TEST(QuantizedUint8PreluActivationsOpTest) {
-  using tflite::testing::F2Q;
-  const float kMin = -4;
-  const float kMax = 127.f / 32.f;
-  const int output_dims_count = 12;
-  uint8_t output_data[output_dims_count];
+  const int input_shape[] = {3, 2, 2, 3};
+  const float input_values[] = {
+      0.0f,   0.0f,   0.0f,    // Row 1, Column 1
+      0.5f,   0.5f,   0.5f,    // Row 1, Column 2
+      -1.0f,  -1.0f,  -1.0f,   // Row 2, Column 1
+      -0.25f, -0.25f, -0.25f,  // Row 1, Column 2
+  };
+  const int alpha_shape[] = {3, 1, 1, 3};
+  const float alpha_values[] = {0.0f, 0.5f, -0.5f};
+  const int output_shape[] = {3, 2, 2, 3};
+  const float golden[] = {
+      0.0f, 0.0f,    0.0f,    // Row 1, Column 1
+      0.5f, 0.5f,    0.5f,    // Row 1, Column 2
+      0.0f, -0.5f,   0.5f,    // Row 2, Column 1
+      0.0f, -0.125f, 0.125f,  // Row 1, Column 2
+  };
+
+  const int dims_count = 12;
+
+  uint8_t input_quantized[dims_count];
+  uint8_t alpha_quantized[3];
+  uint8_t golden_quantized[dims_count];
+  float scale = 0.125;
+  int zero_point = 127;
+  uint8_t output_data[dims_count];
+
   tflite::testing::TestPreluQuantized(
-      {3, 2, 2, 3},  // input shape
-      {F2Q(0.0f, kMin, kMax), F2Q(0.0f, kMin, kMax), F2Q(0.0f, kMin, kMax),
-       F2Q(0.5f, kMin, kMax), F2Q(0.5f, kMin, kMax), F2Q(0.5f, kMin, kMax),
-       F2Q(-1.0f, kMin, kMax), F2Q(-1.0f, kMin, kMax), F2Q(-1.0f, kMin, kMax),
-       F2Q(-0.25f, kMin, kMax), F2Q(-0.25f, kMin, kMax),
-       F2Q(-0.25f, kMin, kMax)},
-      kMin, kMax, {3, 1, 1, 3},  // alpha shape
-      {F2Q(0.0f, kMin, kMax), F2Q(0.5f, kMin, kMax), F2Q(-0.5f, kMin, kMax)},
-      kMin, kMax,
-      {F2Q(0.0f, kMin, kMax), F2Q(0.0f, kMin, kMax), F2Q(0.0f, kMin, kMax),
-       F2Q(0.5f, kMin, kMax), F2Q(0.5f, kMin, kMax), F2Q(0.5f, kMin, kMax),
-       F2Q(0.0f, kMin, kMax), F2Q(-0.5f, kMin, kMax), F2Q(0.5f, kMin, kMax),
-       F2Q(0.0f, kMin, kMax), F2Q(-0.125f, kMin, kMax),
-       F2Q(0.125f, kMin, kMax)},
-      {3, 2, 2, 3},  // output shape
-      kMin, kMax, output_data);
+      input_shape, input_values, input_quantized, scale, zero_point,
+      alpha_shape, alpha_values, alpha_quantized, scale, zero_point, golden,
+      golden_quantized, scale, zero_point, output_shape, output_data);
 }
 
 TF_LITE_MICRO_TEST(QuantizedInt8PreluActivationsOpTest) {
-  using tflite::testing::F2QS;
-  const float kMin = -1;
-  const float kMax = 127.f / 128.f;
-  const int output_dims_count = 12;
-  int8_t output_data[output_dims_count];
+  const int input_shape[] = {3, 2, 2, 3};
+  const float input_values[] = {
+      0.0f,   0.0f,   0.0f,    // Row 1, Column 1
+      0.5f,   0.5f,   0.5f,    // Row 1, Column 2
+      -1.0f,  -1.0f,  -1.0f,   // Row 2, Column 1
+      -0.25f, -0.25f, -0.25f,  // Row 1, Column 2
+  };
+  const int alpha_shape[] = {3, 1, 1, 3};
+  const float alpha_values[] = {0.0f, 0.5f, -0.5f};
+  const int output_shape[] = {3, 2, 2, 3};
+  const float golden[] = {
+      0.0f, 0.0f,    0.0f,    // Row 1, Column 1
+      0.5f, 0.5f,    0.5f,    // Row 1, Column 2
+      0.0f, -0.5f,   0.5f,    // Row 2, Column 1
+      0.0f, -0.125f, 0.125f,  // Row 1, Column 2
+  };
+  const int dims_count = 12;
+  int8_t input_quantized[dims_count];
+  int8_t alpha_quantized[3];
+  int8_t golden_quantized[dims_count];
+  float scale = 2.0 / 255.0;
+  int zero_point = 0;
+  int8_t output_data[dims_count];
   tflite::testing::TestPreluQuantized(
-      {3, 2, 2, 3},  // input shape
-      {F2QS(0.0f, kMin, kMax), F2QS(0.0f, kMin, kMax), F2QS(0.0f, kMin, kMax),
-       F2QS(0.5f, kMin, kMax), F2QS(0.5f, kMin, kMax), F2QS(0.5f, kMin, kMax),
-       F2QS(-1.0f, kMin, kMax), F2QS(-1.0f, kMin, kMax),
-       F2QS(-1.0f, kMin, kMax), F2QS(-0.25f, kMin, kMax),
-       F2QS(-0.25f, kMin, kMax), F2QS(-0.25f, kMin, kMax)},
-      kMin, kMax, {3, 1, 1, 3},  // alpha shape
-      {F2QS(0.0f, kMin, kMax), F2QS(0.5f, kMin, kMax), F2QS(-0.5f, kMin, kMax)},
-      kMin, kMax,
-      {F2QS(0.0f, kMin, kMax), F2QS(0.0f, kMin, kMax), F2QS(0.0f, kMin, kMax),
-       F2QS(0.5f, kMin, kMax), F2QS(0.5f, kMin, kMax), F2QS(0.5f, kMin, kMax),
-       F2QS(0.0f, kMin, kMax), F2QS(-0.5f, kMin, kMax), F2QS(0.5f, kMin, kMax),
-       F2QS(0.0f, kMin, kMax), F2QS(-0.125f, kMin, kMax),
-       F2QS(0.125f, kMin, kMax)},
-      {3, 2, 2, 3},  // output shape
-      kMin, kMax, output_data);
+      input_shape, input_values, input_quantized, scale, zero_point,
+      alpha_shape, alpha_values, alpha_quantized, scale, zero_point, golden,
+      golden_quantized, scale, zero_point, output_shape, output_data);
 }
 TF_LITE_MICRO_TESTS_END
diff --git a/tensorflow/lite/micro/kernels/reshape_test.cc b/tensorflow/lite/micro/kernels/reshape_test.cc
index 59d5577..91ecbdc 100644
--- a/tensorflow/lite/micro/kernels/reshape_test.cc
+++ b/tensorflow/lite/micro/kernels/reshape_test.cc
@@ -194,7 +194,7 @@
   int input_dims_data[] = {3, 1, 2, 2};
   TfLiteIntArray* input_dims =
       tflite::testing::IntArrayFromInts(input_dims_data);
-  auto input_data = {3.0f};
+  const float input_data[] = {3.0f};
   auto input_tensor =
       tflite::testing::CreateFloatTensor(input_data, input_dims);
   float output_data[4];
@@ -315,7 +315,7 @@
 
   int input_dims_data[] = {1, 1};
   TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
-  auto input_data = {3.0f};
+  const float input_data[] = {3.0f};
   auto input_tensor = CreateFloatTensor(input_data, input_dims);
 
   float output_data[1];
@@ -326,8 +326,9 @@
   int shape_dims_data[] = {1, 0};
   TfLiteIntArray* shape_dims = IntArrayFromInts(shape_dims_data);
 
-  auto shape_tensor =
-      tflite::testing::CreateTensor<int32_t, kTfLiteInt32>({0}, shape_dims);
+  const int32_t shape_data[] = {0};
+  auto shape_tensor = tflite::testing::CreateTensor<int32_t, kTfLiteInt32>(
+      shape_data, shape_dims);
   const float expected_output_with_shape[] = {};
   const int expected_output_with_shape_len = 0;
   const float expected_output_no_shape[] = {3};
diff --git a/tensorflow/lite/micro/testing/test_utils.cc b/tensorflow/lite/micro/testing/test_utils.cc
index 0bb9785..4d931bd 100644
--- a/tensorflow/lite/micro/testing/test_utils.cc
+++ b/tensorflow/lite/micro/testing/test_utils.cc
@@ -150,16 +150,6 @@
   }
 }
 
-TfLiteTensor CreateFloatTensor(std::initializer_list<float> data,
-                               TfLiteIntArray* dims, bool is_variable) {
-  return CreateFloatTensor(data.begin(), dims, is_variable);
-}
-
-TfLiteTensor CreateBoolTensor(std::initializer_list<bool> data,
-                              TfLiteIntArray* dims, bool is_variable) {
-  return CreateBoolTensor(data.begin(), dims, is_variable);
-}
-
 TfLiteTensor CreateQuantizedTensor(const uint8_t* data, TfLiteIntArray* dims,
                                    float min, float max, bool is_variable) {
   TfLiteTensor result;
@@ -174,12 +164,6 @@
   return result;
 }
 
-TfLiteTensor CreateQuantizedTensor(std::initializer_list<uint8_t> data,
-                                   TfLiteIntArray* dims, float min, float max,
-                                   bool is_variable) {
-  return CreateQuantizedTensor(data.begin(), dims, min, max, is_variable);
-}
-
 TfLiteTensor CreateQuantizedTensor(const int8_t* data, TfLiteIntArray* dims,
                                    float min, float max, bool is_variable) {
   TfLiteTensor result;
@@ -194,12 +178,6 @@
   return result;
 }
 
-TfLiteTensor CreateQuantizedTensor(std::initializer_list<int8_t> data,
-                                   TfLiteIntArray* dims, float min, float max,
-                                   bool is_variable) {
-  return CreateQuantizedTensor(data.begin(), dims, min, max, is_variable);
-}
-
 TfLiteTensor CreateQuantizedTensor(float* data, uint8_t* quantized_data,
                                    TfLiteIntArray* dims, bool is_variable) {
   TfLiteTensor result;
@@ -258,11 +236,5 @@
   return result;
 }
 
-TfLiteTensor CreateQuantized32Tensor(std::initializer_list<int32_t> data,
-                                     TfLiteIntArray* dims, float scale,
-                                     bool is_variable) {
-  return CreateQuantized32Tensor(data.begin(), dims, scale, is_variable);
-}
-
 }  // namespace testing
 }  // namespace tflite
diff --git a/tensorflow/lite/micro/testing/test_utils.h b/tensorflow/lite/micro/testing/test_utils.h
index 053c441..e83ac80 100644
--- a/tensorflow/lite/micro/testing/test_utils.h
+++ b/tensorflow/lite/micro/testing/test_utils.h
@@ -17,7 +17,6 @@
 
 #include <cmath>
 #include <cstdint>
-#include <initializer_list>
 #include <limits>
 
 #include "tensorflow/lite/c/common.h"
@@ -31,12 +30,6 @@
 
 // Note: These methods are deprecated, do not use.  See b/141332970.
 
-// TODO(kreeger): Don't use this anymore in our tests. Optimized compiler
-// settings can play with pointer placement on the stack (b/140130236).
-inline TfLiteIntArray* IntArrayFromInitializer(
-    std::initializer_list<int> int_initializer) {
-  return IntArrayFromInts(int_initializer.begin());
-}
 
 // Derives the quantization range max from scaling factor and zero point.
 template <typename T>
@@ -80,28 +73,14 @@
 void PopulateContext(TfLiteTensor* tensors, int tensors_size,
                      ErrorReporter* error_reporter, TfLiteContext* context);
 
-TfLiteTensor CreateFloatTensor(std::initializer_list<float> data,
-                               TfLiteIntArray* dims, bool is_variable = false);
-
-TfLiteTensor CreateBoolTensor(std::initializer_list<bool> data,
-                              TfLiteIntArray* dims, bool is_variable = false);
-
 TfLiteTensor CreateQuantizedTensor(const uint8_t* data, TfLiteIntArray* dims,
                                    float min, float max,
                                    bool is_variable = false);
 
-TfLiteTensor CreateQuantizedTensor(std::initializer_list<uint8_t> data,
-                                   TfLiteIntArray* dims, float min, float max,
-                                   bool is_variable = false);
-
 TfLiteTensor CreateQuantizedTensor(const int8_t* data, TfLiteIntArray* dims,
                                    float min, float max,
                                    bool is_variable = false);
 
-TfLiteTensor CreateQuantizedTensor(std::initializer_list<int8_t> data,
-                                   TfLiteIntArray* dims, float min, float max,
-                                   bool is_variable = false);
-
 TfLiteTensor CreateQuantizedTensor(float* data, uint8_t* quantized_data,
                                    TfLiteIntArray* dims,
                                    bool is_variable = false);
@@ -117,10 +96,6 @@
 TfLiteTensor CreateQuantized32Tensor(const int32_t* data, TfLiteIntArray* dims,
                                      float scale, bool is_variable = false);
 
-TfLiteTensor CreateQuantized32Tensor(std::initializer_list<int32_t> data,
-                                     TfLiteIntArray* dims, float scale,
-                                     bool is_variable = false);
-
 template <typename input_type = int32_t,
           TfLiteType tensor_input_type = kTfLiteInt32>
 inline TfLiteTensor CreateTensor(const input_type* data, TfLiteIntArray* dims,
@@ -135,15 +110,6 @@
   return result;
 }
 
-template <typename input_type = int32_t,
-          TfLiteType tensor_input_type = kTfLiteInt32>
-inline TfLiteTensor CreateTensor(std::initializer_list<input_type> data,
-                                 TfLiteIntArray* dims,
-                                 bool is_variable = false) {
-  return CreateTensor<input_type, tensor_input_type>(data.begin(), dims,
-                                                     is_variable);
-}
-
 }  // namespace testing
 }  // namespace tflite