From f3caea0ff7e63b529c9464f911162aa457e9b858 Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Mon, 3 Jun 2024 21:47:00 +0900 Subject: test: ipa: rkisp1: utils: Fix floating and fixed point conversion test There was an issue where using map to store the test cases meant that the test for ignoring unused bits was skipped because of clashing keys. Fix this by moving the offending test out of the loop. While at it, also change the arbitrary floating comparison precision to be more precise. Also fix a missing documentation brief. Fixes: 9d152e9c66c1 ("ipa: rkisp1: Add a helper to convert floating-point to fixed-point") Signed-off-by: Paul Elder Reviewed-by: Stefan Klug Reviewed-by: Kieran Bingham --- test/ipa/rkisp1/rkisp1-utils.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/ipa/rkisp1/rkisp1-utils.cpp b/test/ipa/rkisp1/rkisp1-utils.cpp index e48f8d36..b1863894 100644 --- a/test/ipa/rkisp1/rkisp1-utils.cpp +++ b/test/ipa/rkisp1/rkisp1-utils.cpp @@ -21,7 +21,23 @@ using namespace ipa::rkisp1; class RkISP1UtilsTest : public Test { protected: - template + /* R for real, I for integer */ + template + int testFixedToFloat(I input, R expected) + { + R out = utils::fixedToFloatingPoint(input); + R prec = 1.0 / (1 << FracPrec); + if (std::abs(out - expected) > prec) { + cerr << "Reverse conversion expected " << input + << " to convert to " << expected + << ", got " << out << std::endl; + return TestFail; + } + + return TestPass; + } + + template int testSingleFixedPoint(double input, T expected) { T ret = utils::floatingToFixedPoint(input); @@ -54,7 +70,6 @@ protected: */ std::map testCases = { { 7.992, 0x3ff }, - { 7.992, 0xbff }, { 0.2, 0x01a }, { -0.2, 0x7e6 }, { -0.8, 0x79a }, @@ -72,6 +87,11 @@ protected: return ret; } + /* Special case with a superfluous one in the unused bits */ + ret = testFixedToFloat<4, 7, uint16_t, double>(0xbff, 7.992); + if (ret != TestPass) + return ret; + return TestPass; } -- cgit v1.2.1