diff options
-rw-r--r-- | test/ipa/rkisp1/rkisp1-utils.cpp | 24 |
1 files 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<unsigned int IntPrec, unsigned FracPrec, typename T> + /* R for real, I for integer */ + template<unsigned int IntPrec, unsigned int FracPrec, typename I, typename R> + int testFixedToFloat(I input, R expected) + { + R out = utils::fixedToFloatingPoint<IntPrec, FracPrec, R>(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<unsigned int IntPrec, unsigned int FracPrec, typename T> int testSingleFixedPoint(double input, T expected) { T ret = utils::floatingToFixedPoint<IntPrec, FracPrec, T>(input); @@ -54,7 +70,6 @@ protected: */ std::map<double, uint16_t> 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; } |