IVGCVSW-5299 Remove some boost::numeric_cast from armnn/tests

 * Replaced with armnn/utility/NumericCast.hpp
 * Removed combinations without float implementation in NumericCast.hpp

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: Ia4ec605f063cdb0071fff302ef48c610f9f9505e
diff --git a/tests/CaffePreprocessor.cpp b/tests/CaffePreprocessor.cpp
index b92f1f7..e531a31 100644
--- a/tests/CaffePreprocessor.cpp
+++ b/tests/CaffePreprocessor.cpp
@@ -5,7 +5,8 @@
 #include "InferenceTestImage.hpp"
 #include "CaffePreprocessor.hpp"
 
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
+
 #include <boost/format.hpp>
 
 #include <iostream>
@@ -28,7 +29,7 @@
 
 std::unique_ptr<CaffePreprocessor::TTestCaseData> CaffePreprocessor::GetTestCaseData(unsigned int testCaseId)
 {
-    testCaseId = testCaseId % boost::numeric_cast<unsigned int>(m_ImageSet.size());
+    testCaseId = testCaseId % armnn::numeric_cast<unsigned int>(m_ImageSet.size());
     const ImageSet& imageSet = m_ImageSet[testCaseId];
     const std::string fullPath = m_BinaryDirectory + imageSet.first;
 
diff --git a/tests/Cifar10Database.cpp b/tests/Cifar10Database.cpp
index db2a234..9e90da5 100644
--- a/tests/Cifar10Database.cpp
+++ b/tests/Cifar10Database.cpp
@@ -5,8 +5,8 @@
 #include "Cifar10Database.hpp"
 
 #include <armnn/Logging.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <fstream>
 #include <vector>
 
@@ -70,9 +70,10 @@
     {
         for (unsigned int w = 0; w < 32; w++)
         {
-            inputImageData[countR_o] = boost::numeric_cast<float>(I[countR++]);
-            inputImageData[countG_o] = boost::numeric_cast<float>(I[countG++]);
-            inputImageData[countB_o] = boost::numeric_cast<float>(I[countB++]);
+            // Static_cast of unsigned char is safe with float
+            inputImageData[countR_o] = static_cast<float>(I[countR++]);
+            inputImageData[countG_o] = static_cast<float>(I[countG++]);
+            inputImageData[countB_o] = static_cast<float>(I[countB++]);
 
             countR_o += step;
             countG_o += step;
@@ -80,6 +81,6 @@
         }
     }
 
-    const unsigned int label = boost::numeric_cast<unsigned int>(I[0]);
+    const unsigned int label = armnn::numeric_cast<unsigned int>(I[0]);
     return std::make_unique<TTestCaseData>(label, std::move(inputImageData));
 }
diff --git a/tests/DeepSpeechV1Database.hpp b/tests/DeepSpeechV1Database.hpp
index fa7dda0..5e721c3 100644
--- a/tests/DeepSpeechV1Database.hpp
+++ b/tests/DeepSpeechV1Database.hpp
@@ -11,8 +11,7 @@
 #include <vector>
 
 #include <armnn/TypesUtils.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 #include <array>
 #include <string>
@@ -80,7 +79,7 @@
     return ParseArrayImpl<uint8_t>(stream,
                                    [&quantizationScale, &quantizationOffset](const std::string & s)
                                    {
-                                       return boost::numeric_cast<uint8_t>(
+                                       return armnn::numeric_cast<uint8_t>(
                                                armnn::Quantize<uint8_t>(std::stof(s),
                                                                          quantizationScale,
                                                                          quantizationOffset));
diff --git a/tests/DeepSpeechV1InferenceTest.hpp b/tests/DeepSpeechV1InferenceTest.hpp
index 7a33d34..28d82bf 100644
--- a/tests/DeepSpeechV1InferenceTest.hpp
+++ b/tests/DeepSpeechV1InferenceTest.hpp
@@ -10,7 +10,6 @@
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/IgnoreUnused.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/test/tools/floating_point_comparison.hpp>
 
 #include <vector>
diff --git a/tests/ImagePreprocessor.cpp b/tests/ImagePreprocessor.cpp
index 5a42b8a..4557cad 100644
--- a/tests/ImagePreprocessor.cpp
+++ b/tests/ImagePreprocessor.cpp
@@ -9,8 +9,8 @@
 #include <armnn/TypesUtils.hpp>
 
 #include <armnnUtils/Permute.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
 #include <boost/format.hpp>
 
 #include <iostream>
@@ -21,7 +21,7 @@
 unsigned int ImagePreprocessor<TDataType>::GetLabelAndResizedImageAsFloat(unsigned int testCaseId,
                                                                           std::vector<float> & result)
 {
-    testCaseId = testCaseId % boost::numeric_cast<unsigned int>(m_ImageSet.size());
+    testCaseId = testCaseId % armnn::numeric_cast<unsigned int>(m_ImageSet.size());
     const ImageSet& imageSet = m_ImageSet[testCaseId];
     const std::string fullPath = m_BinaryDirectory + imageSet.first;
 
@@ -38,7 +38,7 @@
     // duplicate data across the batch
     for (unsigned int i = 1; i < m_BatchSize; i++)
     {
-        result.insert(result.end(), result.begin(), result.begin() + boost::numeric_cast<int>(GetNumImageElements()));
+        result.insert(result.end(), result.begin(), result.begin() + armnn::numeric_cast<int>(GetNumImageElements()));
     }
 
     if (m_DataFormat == DataFormat::NCHW)
diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp
index 8ac44f9..527cc64 100644
--- a/tests/InferenceModel.hpp
+++ b/tests/InferenceModel.hpp
@@ -10,6 +10,7 @@
 #include <armnn/utility/Timer.hpp>
 #include <armnn/BackendRegistry.hpp>
 #include <armnn/utility/Assert.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 #if defined(ARMNN_SERIALIZER)
 #include "armnnDeserializer/IDeserializer.hpp"
@@ -204,7 +205,7 @@
             network = parser->CreateNetworkFromBinary(file);
         }
 
-        unsigned int subgraphId = boost::numeric_cast<unsigned int>(params.m_SubgraphId);
+        unsigned int subgraphId = armnn::numeric_cast<unsigned int>(params.m_SubgraphId);
 
         for (const std::string& inputLayerName : params.m_InputBindings)
         {
@@ -487,10 +488,10 @@
 
             boost::apply_visitor([expectedOutputDataSize, i](auto&& value)
             {
-                const unsigned int actualOutputDataSize   = boost::numeric_cast<unsigned int>(value.size());
+                const unsigned int actualOutputDataSize   = armnn::numeric_cast<unsigned int>(value.size());
                 if (actualOutputDataSize < expectedOutputDataSize)
                 {
-                    unsigned int outputIndex = boost::numeric_cast<unsigned int>(i);
+                    unsigned int outputIndex = i;
                     throw armnn::Exception(
                             fmt::format("Not enough data for output #{0}: expected "
                             "{1} elements, got {2}", outputIndex, expectedOutputDataSize, actualOutputDataSize));
diff --git a/tests/InferenceTest.inl b/tests/InferenceTest.inl
index 4a97d17..88ce352 100644
--- a/tests/InferenceTest.inl
+++ b/tests/InferenceTest.inl
@@ -5,6 +5,8 @@
 #include "InferenceTest.hpp"
 
 #include <armnn/utility/Assert.hpp>
+#include <armnn/utility/NumericCast.hpp>
+
 #include <boost/numeric/conversion/cast.hpp>
 #include <boost/program_options.hpp>
 #include <fmt/format.h>
@@ -130,7 +132,7 @@
     unsigned int prediction = 0;
     boost::apply_visitor([&](auto&& value)
                          {
-                             prediction = boost::numeric_cast<unsigned int>(
+                             prediction = armnn::numeric_cast<unsigned int>(
                                      std::distance(value.begin(), std::max_element(value.begin(), value.end())));
                          },
                          output);
diff --git a/tests/InferenceTestImage.cpp b/tests/InferenceTestImage.cpp
index f76c958..a1b6cf4 100644
--- a/tests/InferenceTestImage.cpp
+++ b/tests/InferenceTestImage.cpp
@@ -6,6 +6,7 @@
 
 #include <armnn/utility/Assert.hpp>
 #include <armnn/utility/IgnoreUnused.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 #include <boost/numeric/conversion/cast.hpp>
 #include <fmt/format.h>
@@ -146,9 +147,9 @@
         throw InferenceTestImageLoadFailed(fmt::format("Could not load empty image at {}", filePath));
     }
 
-    m_Width = boost::numeric_cast<unsigned int>(width);
-    m_Height = boost::numeric_cast<unsigned int>(height);
-    m_NumChannels = boost::numeric_cast<unsigned int>(channels);
+    m_Width = armnn::numeric_cast<unsigned int>(width);
+    m_Height = armnn::numeric_cast<unsigned int>(height);
+    m_NumChannels = armnn::numeric_cast<unsigned int>(channels);
 
     const unsigned int sizeInBytes = GetSizeInBytes();
     m_Data.resize(sizeInBytes);
@@ -185,11 +186,11 @@
     std::vector<uint8_t> newData;
     newData.resize(newWidth * newHeight * im.GetNumChannels() * im.GetSingleElementSizeInBytes());
 
-    // boost::numeric_cast<>() is used for user-provided data (protecting about overflows).
+    // armnn::numeric_cast<>() is used for user-provided data (protecting about overflows).
     // static_cast<> is ok for internal data (assumes that, when internal data was originally provided by a user,
-    // a boost::numeric_cast<>() handled the conversion).
-    const int nW = boost::numeric_cast<int>(newWidth);
-    const int nH = boost::numeric_cast<int>(newHeight);
+    // a armnn::numeric_cast<>() handled the conversion).
+    const int nW = armnn::numeric_cast<int>(newWidth);
+    const int nH = armnn::numeric_cast<int>(newHeight);
 
     const int w = static_cast<int>(im.GetWidth());
     const int h = static_cast<int>(im.GetHeight());
diff --git a/tests/MnistDatabase.cpp b/tests/MnistDatabase.cpp
index 9abc3a6..bbeb8ca 100644
--- a/tests/MnistDatabase.cpp
+++ b/tests/MnistDatabase.cpp
@@ -6,8 +6,6 @@
 
 #include <armnn/Logging.hpp>
 
-#include <boost/numeric/conversion/cast.hpp>
-
 #include <fstream>
 #include <vector>
 
@@ -94,7 +92,8 @@
 
     for (unsigned int i = 0; i < col * row; ++i)
     {
-        inputImageData[i] = boost::numeric_cast<float>(I[i]);
+        // Static_cast of unsigned char is safe with float
+        inputImageData[i] = static_cast<float>(I[i]);
 
         if(m_ScaleValues)
         {
diff --git a/tests/MobileNetSsdDatabase.hpp b/tests/MobileNetSsdDatabase.hpp
index 1921831..9cd987d 100644
--- a/tests/MobileNetSsdDatabase.hpp
+++ b/tests/MobileNetSsdDatabase.hpp
@@ -11,8 +11,7 @@
 #include <QuantizeHelper.hpp>
 
 #include <armnn/TypesUtils.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
+#include <armnn/utility/NumericCast.hpp>
 
 #include <array>
 #include <memory>
@@ -75,7 +74,7 @@
 std::unique_ptr<MobileNetSsdTestCaseData> MobileNetSsdDatabase::GetTestCaseData(unsigned int testCaseId)
 {
     const unsigned int safeTestCaseId =
-        testCaseId % boost::numeric_cast<unsigned int>(g_PerTestCaseInput.size());
+        testCaseId % armnn::numeric_cast<unsigned int>(g_PerTestCaseInput.size());
     const ObjectDetectionInput& testCaseInput = g_PerTestCaseInput[safeTestCaseId];
 
     // Load test case input
diff --git a/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp b/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp
index 69941d5..74f02d7 100644
--- a/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp
+++ b/tests/NetworkExecutionUtils/NetworkExecutionUtils.hpp
@@ -4,6 +4,7 @@
 //
 #include <armnn/ArmNN.hpp>
 #include <armnn/TypesUtils.hpp>
+#include <armnn/utility/NumericCast.hpp>
 #include <armnn/utility/Timer.hpp>
 
 #if defined(ARMNN_SERIALIZER)
@@ -136,7 +137,7 @@
 auto ParseDataArray<armnn::DataType::QAsymmU8>(std::istream& stream)
 {
     return ParseArrayImpl<uint8_t>(stream,
-                                   [](const std::string& s) { return boost::numeric_cast<uint8_t>(std::stoi(s)); });
+                                   [](const std::string& s) { return armnn::numeric_cast<uint8_t>(std::stoi(s)); });
 }
 
 template<>
@@ -147,7 +148,7 @@
     return ParseArrayImpl<uint8_t>(stream,
                                    [&quantizationScale, &quantizationOffset](const std::string & s)
                                    {
-                                       return boost::numeric_cast<uint8_t>(
+                                       return armnn::numeric_cast<uint8_t>(
                                            armnn::Quantize<uint8_t>(std::stof(s),
                                                                      quantizationScale,
                                                                      quantizationOffset));
@@ -156,7 +157,7 @@
 std::vector<unsigned int> ParseArray(std::istream& stream)
 {
     return ParseArrayImpl<unsigned int>(stream,
-        [](const std::string& s) { return boost::numeric_cast<unsigned int>(std::stoi(s)); });
+        [](const std::string& s) { return armnn::numeric_cast<unsigned int>(std::stoi(s)); });
 }
 
 std::vector<std::string> ParseStringList(const std::string & inputString, const char * delimiter)
diff --git a/tests/YoloDatabase.cpp b/tests/YoloDatabase.cpp
index 3b3e5a9..8b2c630 100644
--- a/tests/YoloDatabase.cpp
+++ b/tests/YoloDatabase.cpp
@@ -7,13 +7,14 @@
 #include <armnn/Exceptions.hpp>
 #include <armnn/Logging.hpp>
 
+#include <armnn/utility/NumericCast.hpp>
+
 #include <array>
 #include <cstdint>
 #include <tuple>
 #include <utility>
 
 #include <boost/format.hpp>
-#include <boost/numeric/conversion/cast.hpp>
 
 #include "InferenceTestImage.hpp"
 
@@ -73,7 +74,7 @@
 
 std::unique_ptr<YoloDatabase::TTestCaseData> YoloDatabase::GetTestCaseData(unsigned int testCaseId)
 {
-    testCaseId = testCaseId % boost::numeric_cast<unsigned int>(g_PerTestCaseInputOutput.size());
+    testCaseId = testCaseId % armnn::numeric_cast<unsigned int>(g_PerTestCaseInputOutput.size());
     const auto& testCaseInputOutput = g_PerTestCaseInputOutput[testCaseId];
     const std::string imagePath = m_ImageDir + testCaseInputOutput.first;
 
diff --git a/tests/profiling/gatordmock/tests/GatordMockTests.cpp b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
index 303a36a..4fd884c 100644
--- a/tests/profiling/gatordmock/tests/GatordMockTests.cpp
+++ b/tests/profiling/gatordmock/tests/GatordMockTests.cpp
@@ -11,6 +11,8 @@
 #include <ProfilingService.hpp>
 #include <TimelinePacketWriterFactory.hpp>
 
+#include <armnn/utility/NumericCast.hpp>
+
 #include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
 #include <server/include/timelineDecoder/TimelineDecoder.hpp>
 
@@ -18,11 +20,9 @@
 
 #include <MockBackend.hpp>
 
-#include <boost/cast.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test_suite.hpp>
 
-
 BOOST_AUTO_TEST_SUITE(GatordMockTests)
 
 using namespace armnn;
@@ -31,8 +31,6 @@
 
 BOOST_AUTO_TEST_CASE(CounterCaptureHandlingTest)
 {
-    using boost::numeric_cast;
-
     arm::pipe::PacketVersionResolver packetVersionResolver;
 
     // Data with timestamp, counter idx & counter values
@@ -61,9 +59,9 @@
     std::unique_ptr<unsigned char[]> uniqueData2 = std::make_unique<unsigned char[]>(dataLength);
     unsigned char* data2                         = reinterpret_cast<unsigned char*>(uniqueData2.get());
 
-    uint32_t sizeOfUint64 = numeric_cast<uint32_t>(sizeof(uint64_t));
-    uint32_t sizeOfUint32 = numeric_cast<uint32_t>(sizeof(uint32_t));
-    uint32_t sizeOfUint16 = numeric_cast<uint32_t>(sizeof(uint16_t));
+    uint32_t sizeOfUint64 = armnn::numeric_cast<uint32_t>(sizeof(uint64_t));
+    uint32_t sizeOfUint32 = armnn::numeric_cast<uint32_t>(sizeof(uint32_t));
+    uint32_t sizeOfUint16 = armnn::numeric_cast<uint32_t>(sizeof(uint16_t));
     // Offset index to point to mem address
     uint32_t offset = 0;