#include <gtest/gtest.h> class DwtTest: public ::testing::Test { protected: DwtTest() : img(kWidth * kHeight) { std::fill(img.begin(), img.end(), 0); auto it = img.begin() + kHeight/2 * kWidth; for (auto i = 0; i < kHeight/5; ++i) std::fill_n(it + i * kWidth + kWidth/4, kWidth/2, 255); } void SetUp() {} void TearDown() {} protected: std::vector<float> img; }; TEST_F(DwtTest, DwtIDwt) { std::vector<float> subbands(img); ASSERT_EQ(wt2d_cdf97_fwd(subbands.data(), kHeight, kWidth, 3), 0); std::vector<float> restored(subbands); ASSERT_EQ(wt2d_cdf97_inv(restored.data(), kHeight, kWidth, 3), 0); ASSERT_EQ(restored.size(), img.size()); for (int i = 0; i < img.size(); ++i) EXPECT_NEAR(restored[i], img[i], 1) << "Index " << i; }