xref: /aosp_15_r20/external/armnn/src/armnn/test/FloatingPointConverterTest.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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