1 // 2 // Copyright © 2017 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #include <armnnUtils/FloatingPointConverter.hpp> 7 8 #include <Half.hpp> 9 10 #include <vector> 11 12 #include <doctest/doctest.h> 13 14 TEST_SUITE("TestFPConversion") 15 { 16 TEST_CASE("TestConvertFp32ToFp16") 17 { 18 using namespace half_float::literal; 19 20 float floatArray[] = { 1.0f, 2.0f, 0.5f, 3.1f, 2.4f, 21 5.666f, 6.444f, 7.1f, 432.121f, 12.22f }; 22 size_t numFloats = sizeof(floatArray) / sizeof(floatArray[0]); 23 std::vector<armnn::Half> convertedBuffer(numFloats, 0.0_h); 24 25 armnnUtils::FloatingPointConverter::ConvertFloat32To16(floatArray, numFloats, convertedBuffer.data()); 26 27 for (size_t i = 0; i < numFloats; i++) 28 { 29 armnn::Half expected(floatArray[i]); 30 armnn::Half actual = convertedBuffer[i]; 31 CHECK_EQ(expected, actual); 32 33 float convertedHalf = actual; 34 CHECK_EQ(floatArray[i], doctest::Approx(convertedHalf).epsilon(0.07)); 35 } 36 } 37 38 TEST_CASE("TestConvertFp16ToFp32") 39 { 40 using namespace half_float::literal; 41 42 armnn::Half halfArray[] = { 1.0_h, 2.0_h, 0.5_h, 3.1_h, 2.4_h, 43 5.666_h, 6.444_h, 7.1_h, 432.121_h, 12.22_h }; 44 size_t numFloats = sizeof(halfArray) / sizeof(halfArray[0]); 45 std::vector<float> convertedBuffer(numFloats, 0.0f); 46 47 armnnUtils::FloatingPointConverter::ConvertFloat16To32(halfArray, numFloats, convertedBuffer.data()); 48 49 for (size_t i = 0; i < numFloats; i++) 50 { 51 float expected(halfArray[i]); 52 float actual = convertedBuffer[i]; 53 CHECK_EQ(expected, actual); 54 } 55 } 56 57 } 58