Fix linker issues on some compilers. micro_test::reporter and micro_test::did_test_fail fail to link when referenced from file not directly instantiating the micro test main function. Fixed by removing any micro_test::* dependencies from conv_test_common.

PiperOrigin-RevId: 351515143
Change-Id: Ie622fbfe5d07832b3b87b2258a6ee0f48c7b3272
This commit is contained in:
Nat Jeffries 2021-01-12 22:15:50 -08:00 committed by TensorFlower Gardener
parent a439e53437
commit 670cc3fa48
4 changed files with 136 additions and 113 deletions

View File

@ -67,13 +67,15 @@ TF_LITE_MICRO_TESTS_BEGIN
TF_LITE_MICRO_TEST(SimpleTestFloat) { TF_LITE_MICRO_TEST(SimpleTestFloat) {
float output_data[tflite::testing::kOutputElements]; float output_data[tflite::testing::kOutputElements];
tflite::testing::TestConvFloat( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::TestConvFloat(
tflite::testing::kBiasShape, tflite::testing::kBiasData, tflite::testing::kInputShape, tflite::testing::kInputData,
tflite::testing::kOutputShape, tflite::testing::kGoldenData, tflite::testing::kFilterShape, tflite::testing::kFilterData,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(), tflite::testing::kBiasShape, tflite::testing::kBiasData,
output_data); tflite::testing::kOutputShape, tflite::testing::kGoldenData,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
} }
TF_LITE_MICRO_TEST(InputAndFilterSameWidthHeight) { TF_LITE_MICRO_TEST(InputAndFilterSameWidthHeight) {
@ -87,11 +89,13 @@ TF_LITE_MICRO_TEST(InputAndFilterSameWidthHeight) {
const int kOutputShape[] = {4, 2, 1, 1, 1}; const int kOutputShape[] = {4, 2, 1, 1, 1};
const float expected_output[] = {10, 34}; const float expected_output[] = {10, 34};
tflite::testing::TestConvFloat( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kFilterShape, kTfLiteOk,
filter_values, kBiasShape, bias_values, kOutputShape, expected_output, tflite::testing::TestConvFloat(
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(), tflite::testing::kInputShape, tflite::testing::kInputData,
output_data); kFilterShape, filter_values, kBiasShape, bias_values, kOutputShape,
expected_output, &tflite::testing::common_conv_params,
tflite::Register_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(SimpleTestQuantized) { TF_LITE_MICRO_TEST(SimpleTestQuantized) {
@ -107,14 +111,17 @@ TF_LITE_MICRO_TEST(SimpleTestQuantized) {
int32_t bias_quantized[tflite::testing::kBiasElements]; int32_t bias_quantized[tflite::testing::kBiasElements];
uint8_t golden_quantized[tflite::testing::kOutputElements]; uint8_t golden_quantized[tflite::testing::kOutputElements];
tflite::testing::TestConvQuantizedPerLayer( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
input_quantized, input_scale, tflite::testing::kFilterShape, tflite::testing::TestConvQuantizedPerLayer(
tflite::testing::kFilterData, filter_quantized, filter_scale, tflite::testing::kInputShape, tflite::testing::kInputData,
tflite::testing::kBiasShape, tflite::testing::kBiasData, bias_quantized, input_quantized, input_scale, tflite::testing::kFilterShape,
tflite::testing::kOutputShape, tflite::testing::kGoldenData, tflite::testing::kFilterData, filter_quantized, filter_scale,
golden_quantized, output_scale, &tflite::testing::common_conv_params, tflite::testing::kBiasShape, tflite::testing::kBiasData,
tflite::Register_CONV_2D(), output_data); bias_quantized, tflite::testing::kOutputShape,
tflite::testing::kGoldenData, golden_quantized, output_scale,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
} }
TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) { TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) {
@ -206,13 +213,15 @@ TF_LITE_MICRO_TEST(SimpleTestDilatedQuantized) {
conv_params.dilation_width_factor = 3; conv_params.dilation_width_factor = 3;
conv_params.dilation_height_factor = 2; conv_params.dilation_height_factor = 2;
tflite::testing::TestConvQuantizedPerLayer( TF_LITE_MICRO_EXPECT_EQ(
input_shape, input_data, input_quantized, input_scale, kTfLiteOk,
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::TestConvQuantizedPerLayer(
filter_quantized, filter_scale, tflite::testing::kBiasShape, input_shape, input_data, input_quantized, input_scale,
tflite::testing::kBiasData, bias_quantized, output_shape, golden_data, tflite::testing::kFilterShape, tflite::testing::kFilterData,
golden_quantized, output_scale, &conv_params, tflite::Register_CONV_2D(), filter_quantized, filter_scale, tflite::testing::kBiasShape,
output_data); tflite::testing::kBiasData, bias_quantized, output_shape, golden_data,
golden_quantized, output_scale, &conv_params,
tflite::Register_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) { TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
@ -231,15 +240,18 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
int zero_points[tflite::testing::kBiasElements + 1]; int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1]; float scales[tflite::testing::kBiasElements + 1];
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
input_quantized, input_scale, input_zero_point, tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::kInputShape, tflite::testing::kInputData,
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData, input_quantized, input_scale, input_zero_point,
bias_quantized, scales, zero_points, tflite::testing::kOutputShape, tflite::testing::kFilterShape, tflite::testing::kFilterData,
tflite::testing::kGoldenData, golden_quantized, output_scale, filter_quantized, tflite::testing::kBiasShape,
output_zero_point, &tflite::testing::common_conv_params, tflite::testing::kBiasData, bias_quantized, scales, zero_points,
tflite::Register_CONV_2D(), output_data); tflite::testing::kOutputShape, tflite::testing::kGoldenData,
golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
} }
TF_LITE_MICRO_TEST(SimpleTestDilatedQuantizedPerChannel) { TF_LITE_MICRO_TEST(SimpleTestDilatedQuantizedPerChannel) {
@ -274,13 +286,16 @@ TF_LITE_MICRO_TEST(SimpleTestDilatedQuantizedPerChannel) {
conv_params.dilation_width_factor = 3; conv_params.dilation_width_factor = 3;
conv_params.dilation_height_factor = 2; conv_params.dilation_height_factor = 2;
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
input_shape, input_data, input_quantized, input_scale, input_zero_point, kTfLiteOk,
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::TestConvQuantizedPerChannel(
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData, input_shape, input_data, input_quantized, input_scale,
bias_quantized, scales, zero_points, output_shape, golden_data, input_zero_point, tflite::testing::kFilterShape,
golden_quantized, output_scale, output_zero_point, &conv_params, tflite::testing::kFilterData, filter_quantized,
tflite::Register_CONV_2D(), output_data); tflite::testing::kBiasShape, tflite::testing::kBiasData,
bias_quantized, scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point, &conv_params,
tflite::Register_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) { TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) {
@ -302,15 +317,17 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) {
int zero_points[tflite::testing::kBiasElements + 1]; int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1]; float scales[tflite::testing::kBiasElements + 1];
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
input_quantized, input_scale, input_zero_point, tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::kInputShape, tflite::testing::kInputData,
filter_quantized, tflite::testing::kBiasShape, bias_values, input_quantized, input_scale, input_zero_point,
bias_quantized, scales, zero_points, tflite::testing::kOutputShape, tflite::testing::kFilterShape, tflite::testing::kFilterData,
golden_data, golden_quantized, output_scale, output_zero_point, filter_quantized, tflite::testing::kBiasShape, bias_values,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(), bias_quantized, scales, zero_points, tflite::testing::kOutputShape,
output_data); golden_data, golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
} }
TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannel) { TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannel) {
@ -354,12 +371,14 @@ TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannel) {
int zero_points[bias_elements + 1]; int zero_points[bias_elements + 1];
float scales[bias_elements + 1]; float scales[bias_elements + 1];
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
input_shape, input_data, input_quantized, input_scale, input_zero_point, kTfLiteOk, tflite::testing::TestConvQuantizedPerChannel(
filter_shape, filter_data, filter_quantized, bias_shape, bias_data, input_shape, input_data, input_quantized, input_scale,
bias_quantized, scales, zero_points, output_shape, golden_data, input_zero_point, filter_shape, filter_data,
golden_quantized, output_scale, output_zero_point, &conv_params, filter_quantized, bias_shape, bias_data, bias_quantized,
tflite::Register_CONV_2D(), output_data); scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point,
&conv_params, tflite::Register_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannelRelu6) { TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannelRelu6) {
@ -403,12 +422,14 @@ TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannelRelu6) {
int zero_points[bias_elements + 1]; int zero_points[bias_elements + 1];
float scales[bias_elements + 1]; float scales[bias_elements + 1];
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
input_shape, input_data, input_quantized, input_scale, input_zero_point, kTfLiteOk, tflite::testing::TestConvQuantizedPerChannel(
filter_shape, filter_data, filter_quantized, bias_shape, bias_data, input_shape, input_data, input_quantized, input_scale,
bias_quantized, scales, zero_points, output_shape, golden_data, input_zero_point, filter_shape, filter_data,
golden_quantized, output_scale, output_zero_point, &conv_params, filter_quantized, bias_shape, bias_data, bias_quantized,
tflite::Register_CONV_2D(), output_data); scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point,
&conv_params, tflite::Register_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(BroadcastPerLayerQuantizationToPerChannelShouldMatchGolden) { TF_LITE_MICRO_TEST(BroadcastPerLayerQuantizationToPerChannelShouldMatchGolden) {

View File

@ -59,15 +59,15 @@ TfLiteStatus ValidateConvGoldens(TfLiteTensor* tensors, int tensors_size,
TfLiteRegistration registration, TfLiteRegistration registration,
uint8_t* output_data, float tolerance = 1e-5); uint8_t* output_data, float tolerance = 1e-5);
void TestConvFloat(const int* input_dims_data, const float* input_data, TfLiteStatus TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data, const float* filter_data, const int* filter_dims_data,
const int* bias_dims_data, const float* bias_data, const float* filter_data, const int* bias_dims_data,
const int* output_dims_data, const float* bias_data, const int* output_dims_data,
const float* expected_output_data, const float* expected_output_data,
TfLiteConvParams* conv_params, TfLiteConvParams* conv_params,
TfLiteRegistration registration, float* output_data); TfLiteRegistration registration, float* output_data);
void TestConvQuantizedPerLayer( TfLiteStatus TestConvQuantizedPerLayer(
const int* input_dims_data, const float* input_data, const int* input_dims_data, const float* input_data,
uint8_t* input_quantized, float input_scale, const int* filter_dims_data, uint8_t* input_quantized, float input_scale, const int* filter_dims_data,
const float* filter_data, uint8_t* filter_quantized, float filter_scale, const float* filter_data, uint8_t* filter_quantized, float filter_scale,
@ -77,7 +77,7 @@ void TestConvQuantizedPerLayer(
TfLiteConvParams* conv_params, TfLiteRegistration registration, TfLiteConvParams* conv_params, TfLiteRegistration registration,
uint8_t* output_data); uint8_t* output_data);
void TestConvQuantizedPerChannel( TfLiteStatus TestConvQuantizedPerChannel(
const int* input_dims_data, const float* input_data, const int* input_dims_data, const float* input_data,
int8_t* input_quantized, float input_scale, int input_zero_point, int8_t* input_quantized, float input_scale, int input_zero_point,
const int* filter_dims_data, const float* filter_data, const int* filter_dims_data, const float* filter_data,

View File

@ -27,9 +27,10 @@ TfLiteStatus InvokeConv(TfLiteTensor* tensors, int tensors_size,
int outputs_array_data[] = {1, 3}; int outputs_array_data[] = {1, 3};
TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data); TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
tflite::MicroErrorReporter reporter;
micro::KernelRunner runner( micro::KernelRunner runner(
registration, tensors, tensors_size, inputs_array, outputs_array, registration, tensors, tensors_size, inputs_array, outputs_array,
reinterpret_cast<void*>(conv_params), micro_test::reporter); reinterpret_cast<TfLiteStatus*>(conv_params), &reporter);
const char* init_data = reinterpret_cast<const char*>(conv_params); const char* init_data = reinterpret_cast<const char*>(conv_params);
TfLiteStatus status = runner.InitAndPrepare(init_data); TfLiteStatus status = runner.InitAndPrepare(init_data);
@ -112,13 +113,14 @@ TfLiteStatus ValidateConvGoldens(TfLiteTensor* tensors, int tensors_size,
registration, output_data, tolerance); registration, output_data, tolerance);
} }
void TestConvFloat(const int* input_dims_data, const float* input_data, TfLiteStatus TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data, const float* filter_data, const int* filter_dims_data,
const int* bias_dims_data, const float* bias_data, const float* filter_data, const int* bias_dims_data,
const int* output_dims_data, const float* bias_data, const int* output_dims_data,
const float* expected_output_data, const float* expected_output_data,
TfLiteConvParams* conv_params, TfLiteConvParams* conv_params,
TfLiteRegistration registration, float* output_data) { TfLiteRegistration registration,
float* output_data) {
TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data); TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
TfLiteIntArray* filter_dims = IntArrayFromInts(filter_dims_data); TfLiteIntArray* filter_dims = IntArrayFromInts(filter_dims_data);
TfLiteIntArray* bias_dims = IntArrayFromInts(bias_dims_data); TfLiteIntArray* bias_dims = IntArrayFromInts(bias_dims_data);
@ -134,13 +136,12 @@ void TestConvFloat(const int* input_dims_data, const float* input_data,
CreateTensor(output_data, output_dims), CreateTensor(output_data, output_dims),
}; };
TF_LITE_MICRO_EXPECT_EQ( return ValidateConvGoldens(tensors, tensors_size, expected_output_data,
kTfLiteOk, ValidateConvGoldens(tensors, tensors_size, output_dims_count, conv_params, registration,
expected_output_data, output_dims_count, output_data);
conv_params, registration, output_data));
} }
void TestConvQuantizedPerLayer( TfLiteStatus TestConvQuantizedPerLayer(
const int* input_dims_data, const float* input_data, const int* input_dims_data, const float* input_data,
uint8_t* input_quantized, float input_scale, const int* filter_dims_data, uint8_t* input_quantized, float input_scale, const int* filter_dims_data,
const float* filter_data, uint8_t* filter_quantized, float filter_scale, const float* filter_data, uint8_t* filter_quantized, float filter_scale,
@ -177,14 +178,12 @@ void TestConvQuantizedPerLayer(
0}; 0};
tensors[1].quantization = {kTfLiteAffineQuantization, &filter_quant}; tensors[1].quantization = {kTfLiteAffineQuantization, &filter_quant};
TF_LITE_MICRO_EXPECT_EQ( return ValidateConvGoldens(tensors, tensors_size, expected_output_quantized,
kTfLiteOk, output_dims_count, conv_params, registration,
ValidateConvGoldens(tensors, tensors_size, expected_output_quantized, output_data);
output_dims_count, conv_params, registration,
output_data));
} }
void TestConvQuantizedPerChannel( TfLiteStatus TestConvQuantizedPerChannel(
const int* input_dims_data, const float* input_data, const int* input_dims_data, const float* input_data,
int8_t* input_quantized, float input_scale, int input_zero_point, int8_t* input_quantized, float input_scale, int input_zero_point,
const int* filter_dims_data, const float* filter_data, const int* filter_dims_data, const float* filter_data,
@ -241,11 +240,9 @@ void TestConvQuantizedPerChannel(
tflite::Quantize(expected_output_data, expected_output_data_quantized, tflite::Quantize(expected_output_data, expected_output_data_quantized,
output_dims_count, output_scale, output_zero_point); output_dims_count, output_scale, output_zero_point);
TF_LITE_MICRO_EXPECT_EQ( return ValidateConvGoldens(
kTfLiteOk, tensors, tensors_size, expected_output_data_quantized, output_dims_count,
ValidateConvGoldens(tensors, tensors_size, expected_output_data_quantized, conv_params, registration, output_data, 1.0 /* tolerance */);
output_dims_count, conv_params, registration,
output_data, 1.0 /* tolerance */));
} }
} // namespace testing } // namespace testing

View File

@ -64,13 +64,15 @@ TF_LITE_MICRO_TESTS_BEGIN
TF_LITE_MICRO_TEST(SimpleTestFloat) { TF_LITE_MICRO_TEST(SimpleTestFloat) {
float output_data[tflite::testing::kOutputElements]; float output_data[tflite::testing::kOutputElements];
tflite::testing::TestConvFloat( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::TestConvFloat(
tflite::testing::kBiasShape, tflite::testing::kBiasData, tflite::testing::kInputShape, tflite::testing::kInputData,
tflite::testing::kOutputShape, tflite::testing::kGoldenData, tflite::testing::kFilterShape, tflite::testing::kFilterData,
&tflite::testing::common_conv_params, tflite::testing::kBiasShape, tflite::testing::kBiasData,
tflite::Register_TRANSPOSE_CONV_2D(), output_data); tflite::testing::kOutputShape, tflite::testing::kGoldenData,
&tflite::testing::common_conv_params,
tflite::Register_TRANSPOSE_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) { TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
@ -88,15 +90,18 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
int zero_points[tflite::testing::kBiasElements + 1]; int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1]; float scales[tflite::testing::kBiasElements + 1];
tflite::testing::TestConvQuantizedPerChannel( TF_LITE_MICRO_EXPECT_EQ(
tflite::testing::kInputShape, tflite::testing::kInputData, kTfLiteOk,
input_quantized, input_scale, input_zero_point, tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kFilterShape, tflite::testing::kFilterData, tflite::testing::kInputShape, tflite::testing::kInputData,
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData, input_quantized, input_scale, input_zero_point,
bias_quantized, scales, zero_points, tflite::testing::kOutputShape, tflite::testing::kFilterShape, tflite::testing::kFilterData,
tflite::testing::kGoldenData, golden_quantized, output_scale, filter_quantized, tflite::testing::kBiasShape,
output_zero_point, &tflite::testing::common_conv_params, tflite::testing::kBiasData, bias_quantized, scales, zero_points,
tflite::Register_TRANSPOSE_CONV_2D(), output_data); tflite::testing::kOutputShape, tflite::testing::kGoldenData,
golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params,
tflite::Register_TRANSPOSE_CONV_2D(), output_data));
} }
TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) { TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) {