From 0d0a78ebd60e058746ea161914b45709245d4e1b Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Fri, 22 Feb 2019 16:35:13 +0000 Subject: IVGCVSW-2721 Quantize and Dequantize aren't quite right * Add check for infinity and negative infinity in quantize() * Add assert for NaN value in quantize and dequantize() * Add unit tests for infinity and negative infinity Change-Id: Ie60e1e15b289ccbf99df4a3281f067b82cc9f9bf Signed-off-by: Francis Murtagh --- src/armnn/test/QuantizerTest.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/armnn/test/QuantizerTest.cpp') diff --git a/src/armnn/test/QuantizerTest.cpp b/src/armnn/test/QuantizerTest.cpp index 548203a6a9..fcce208c59 100644 --- a/src/armnn/test/QuantizerTest.cpp +++ b/src/armnn/test/QuantizerTest.cpp @@ -14,6 +14,7 @@ #include "../NetworkQuantizerUtils.hpp" #include "../OverrideInputRangeVisitor.hpp" #include "../RangeTracker.hpp" +#include "../backends/backendsCommon/test/QuantizeHelper.hpp" #include @@ -1215,5 +1216,33 @@ BOOST_AUTO_TEST_CASE(QuantizeBatchToSpace) VisitLayersTopologically(quantizedNetwork.get(), validator); } +std::vector SetupQuantize(float value) +{ + armnn::TensorInfo inputInfo({ 1, 2, 2 }, armnn::DataType::Float32); + inputInfo.SetQuantizationScale(1.0f); + inputInfo.SetQuantizationOffset(1); + std::vector input({ + value, 0.0f, + 0.0f, 1.0f + }); + const std::vector &inputRef = input; + + auto output = QuantizedVector(inputInfo.GetQuantizationScale(), + inputInfo.GetQuantizationOffset(), + inputRef); + + return output; +} + +BOOST_AUTO_TEST_CASE(QuantizeInf) +{ + BOOST_CHECK_EQUAL(SetupQuantize(std::numeric_limits::infinity())[0], 255); +} + +BOOST_AUTO_TEST_CASE(QuantizeNegativeInf) +{ + BOOST_CHECK_EQUAL(SetupQuantize(-1 * std::numeric_limits::infinity())[0], 0); +} + BOOST_AUTO_TEST_SUITE_END() } // namespace armnn -- cgit v1.2.1