diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-07-08 21:42:48 +0000 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2024-07-09 23:07:40 +0200 |
commit | c4b19af8391640f143aaf446658354dcf01432d1 (patch) | |
tree | 68ebb11f38eaec53e16879e59ce776bd249d8491 /src/lib/mdct/mdct_ut.cpp | |
parent | f8eabde1e1a2fa6bdb2b09dcdee5cecb750beb30 (diff) | |
download | atracdenc-c4b19af8391640f143aaf446658354dcf01432d1.tar.gz |
Allow to configure atracdenc to use float instead of double
The default is double for hystorical reason.
Actually no any reason to use double precision float point
calculation for all processing. AT3P encoding will use float
except places were we really need double precision.
So this default will be changed to float in near future and
this option will be removed.
Diffstat (limited to 'src/lib/mdct/mdct_ut.cpp')
-rw-r--r-- | src/lib/mdct/mdct_ut.cpp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/lib/mdct/mdct_ut.cpp b/src/lib/mdct/mdct_ut.cpp index 31f6f81..6f49b59 100644 --- a/src/lib/mdct/mdct_ut.cpp +++ b/src/lib/mdct/mdct_ut.cpp @@ -17,6 +17,7 @@ */ #include "mdct.h" +#include "mdct_ut_common.h" #include <gtest/gtest.h> #include <vector> @@ -35,7 +36,7 @@ static vector<TFloat> mdct(TFloat* x, int N) { res.push_back(sum); } return res; -} +} static vector<TFloat> midct(TFloat* x, int N) { vector<TFloat> res; @@ -59,8 +60,9 @@ TEST(TMdctTest, MDCT32) { const vector<TFloat> res1 = mdct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N); for (int i = 0; i < res1.size(); i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -74,8 +76,9 @@ TEST(TMdctTest, MDCT64) { const vector<TFloat> res1 = mdct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N); for (int i = 0; i < res1.size(); i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -89,8 +92,9 @@ TEST(TMdctTest, MDCT128) { const vector<TFloat> res1 = mdct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N * 4); for (int i = 0; i < res1.size(); i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -104,8 +108,9 @@ TEST(TMdctTest, MDCT256) { const vector<TFloat> res1 = mdct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N * 4); for (int i = 0; i < res1.size(); i++) { - EXPECT_NEAR(res1[i], res2[i], 0.00000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -113,14 +118,17 @@ TEST(TMdctTest, MDCT256_RAND) { const int N = 256; TMDCT<N> transform(N); vector<TFloat> src(N); + TFloat m = 0.0; for (int i = 0; i < N; i++) { src[i] = rand(); + m = std::max(m, src[i]); } const vector<TFloat> res1 = mdct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(m * 8); for (int i = 0; i < res1.size(); i++) { - EXPECT_NEAR(res1[i], res2[i], 0.01); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -134,8 +142,9 @@ TEST(TMdctTest, MIDCT32) { const vector<TFloat> res1 = midct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N); for (int i = 0; i < N; i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -149,8 +158,9 @@ TEST(TMdctTest, MIDCT64) { const vector<TFloat> res1 = midct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N); for (int i = 0; i < N; i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -164,8 +174,9 @@ TEST(TMdctTest, MIDCT128) { const vector<TFloat> res1 = midct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N); for (int i = 0; i < N; i++) { - EXPECT_NEAR(res1[i], res2[i], 0.0000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -179,8 +190,9 @@ TEST(TMdctTest, MIDCT256) { const vector<TFloat> res1 = midct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(N * 2); for (int i = 0; i < N; i++) { - EXPECT_NEAR(res1[i], res2[i], 0.000000001); + EXPECT_NEAR(res1[i], res2[i], eps); } } @@ -188,13 +200,16 @@ TEST(TMdctTest, MIDCT256_RAND) { const int N = 256; TMIDCT<N> transform(N); vector<TFloat> src(N); + TFloat m = 0.0; for (int i = 0; i < N/2; i++) { src[i] = rand(); + m = std::max(m, src[i]); } const vector<TFloat> res1 = midct(&src[0], N/2); const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); + auto eps = CalcEps(m * 4); for (int i = 0; i < N; i++) { - EXPECT_NEAR(res1[i], res2[i], 0.01); + EXPECT_NEAR(res1[i], res2[i], eps); } } |