// Copyright 2021 Google LLC // // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. #include #include "convert-operator-tester.h" TEST(CONVERT_NC_F16_F32, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .iterations(3) .TestF16toF32(); } } TEST(CONVERT_NC_F16_F32, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .iterations(3) .TestF16toF32(); } } TEST(CONVERT_NC_F16_F32, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .iterations(3) .TestF16toF32(); } } TEST(CONVERT_NC_F16_F32, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .iterations(3) .TestF16toF32(); } } TEST(CONVERT_NC_F16_F32, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .iterations(3) .TestF16toF32(); } } TEST(CONVERT_NC_F32_F16, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .iterations(3) .TestF32toF16(); } } TEST(CONVERT_NC_F32_F16, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .iterations(3) .TestF32toF16(); } } TEST(CONVERT_NC_F32_F16, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .iterations(3) .TestF32toF16(); } } TEST(CONVERT_NC_F32_F16, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .iterations(3) .TestF32toF16(); } } TEST(CONVERT_NC_F32_F16, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .iterations(3) .TestF32toF16(); } } TEST(CONVERT_NC_F32_QS8, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } TEST(CONVERT_NC_F32_QS8, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } TEST(CONVERT_NC_F32_QS8, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } TEST(CONVERT_NC_F32_QS8, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } TEST(CONVERT_NC_F32_QS8, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } TEST(CONVERT_NC_F32_QS8, scale) { for (float scale : std::vector{{0.1f, 1.0f, 10.0f}}) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .scale(scale) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } } TEST(CONVERT_NC_F32_QS8, output_zero_point) { for (int16_t zero_point = std::numeric_limits::min(); zero_point <= std::numeric_limits::max(); zero_point += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .zero_point(zero_point) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } } TEST(CONVERT_NC_F32_QS8, output_min) { for (int16_t qmin = std::numeric_limits::min(); qmin < std::numeric_limits::max(); qmin += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(qmin) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQS8(); } } } TEST(CONVERT_NC_F32_QS8, output_max) { for (int16_t qmax = std::numeric_limits::min() + 1; qmax <= std::numeric_limits::max(); qmax += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(qmax) .iterations(3) .TestF32toQS8(); } } } TEST(CONVERT_NC_F32_QU8, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } TEST(CONVERT_NC_F32_QU8, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } TEST(CONVERT_NC_F32_QU8, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } TEST(CONVERT_NC_F32_QU8, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } TEST(CONVERT_NC_F32_QU8, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } TEST(CONVERT_NC_F32_QU8, scale) { for (float scale : std::vector{{0.1f, 1.0f, 10.0f}}) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .scale(scale) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } } TEST(CONVERT_NC_F32_QU8, output_zero_point) { for (int16_t zero_point = std::numeric_limits::min(); zero_point <= std::numeric_limits::max(); zero_point += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .zero_point(zero_point) .qmin(std::numeric_limits::min()) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } } TEST(CONVERT_NC_F32_QU8, output_min) { for (int16_t qmin = std::numeric_limits::min(); qmin < std::numeric_limits::max(); qmin += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(qmin) .qmax(std::numeric_limits::max()) .iterations(3) .TestF32toQU8(); } } } TEST(CONVERT_NC_F32_QU8, output_max) { for (int16_t qmax = std::numeric_limits::min() + 1; qmax <= std::numeric_limits::max(); qmax += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .qmin(std::numeric_limits::min()) .qmax(qmax) .iterations(3) .TestF32toQU8(); } } } TEST(CONVERT_NC_QS8_F32, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .iterations(3) .TestQS8toF32(); } } TEST(CONVERT_NC_QS8_F32, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .iterations(3) .TestQS8toF32(); } } TEST(CONVERT_NC_QS8_F32, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .iterations(3) .TestQS8toF32(); } } TEST(CONVERT_NC_QS8_F32, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .iterations(3) .TestQS8toF32(); } } TEST(CONVERT_NC_QS8_F32, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .iterations(3) .TestQS8toF32(); } } TEST(CONVERT_NC_QS8_F32, input_scale) { for (float scale : std::vector{{0.1f, 1.0f, 10.0f}}) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .scale(scale) .iterations(3) .TestQS8toF32(); } } } TEST(CONVERT_NC_QS8_F32, input_zero_point) { for (int16_t zero_point = std::numeric_limits::min(); zero_point <= std::numeric_limits::max(); zero_point += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .zero_point(zero_point) .iterations(3) .TestQS8toF32(); } } } TEST(CONVERT_NC_QU8_F32, unit_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(1) .channels(channels) .iterations(3) .TestQU8toF32(); } } TEST(CONVERT_NC_QU8_F32, small_batch) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .iterations(3) .TestQU8toF32(); } } TEST(CONVERT_NC_QU8_F32, small_batch_with_input_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .iterations(3) .TestQU8toF32(); } } TEST(CONVERT_NC_QU8_F32, small_batch_with_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .output_stride(117) .iterations(3) .TestQU8toF32(); } } TEST(CONVERT_NC_QU8_F32, small_batch_with_input_and_output_stride) { for (size_t channels = 1; channels < 100; channels += 15) { ConvertOperatorTester() .batch_size(3) .channels(channels) .input_stride(129) .output_stride(117) .iterations(3) .TestQU8toF32(); } } TEST(CONVERT_NC_QU8_F32, input_scale) { for (float scale : std::vector{{0.1f, 1.0f, 10.0f}}) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .scale(scale) .iterations(3) .TestQU8toF32(); } } } TEST(CONVERT_NC_QU8_F32, input_zero_point) { for (int16_t zero_point = std::numeric_limits::min(); zero_point <= std::numeric_limits::max(); zero_point += 51) { for (size_t channels = 1; channels < 100; channels++) { ConvertOperatorTester() .batch_size(3) .channels(channels) .zero_point(zero_point) .iterations(3) .TestQU8toF32(); } } }