Fixing Valgrind warnings caused by open files and undeleted memory.

Restructured scaler_unittest.cc to focus tests on testing one thing.

BUG=
TEST=libyuv_unittests in Debug+Release at Linux, Mac and Windows.

Review URL: http://webrtc-codereview.appspot.com/329026

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1329 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
kjellander@webrtc.org 2012-01-04 13:51:50 +00:00
parent d439870473
commit 94558d83bf
2 changed files with 36 additions and 31 deletions

View File

@ -188,8 +188,8 @@ TEST_F(TestLibYuv, ConvertTest) {
fwrite(res_i420_buffer, frame_length_, 1, output_file);
psnr = I420PSNR(orig_buffer, res_i420_buffer, width_, height_);
EXPECT_EQ(48.0, psnr);
ASSERT_EQ(0, fclose(output_file));
delete [] out_yuy2_buffer;
delete [] res_i420_buffer;
delete [] orig_buffer;
}

View File

@ -24,16 +24,19 @@ class TestScaler : public ::testing::Test {
virtual void SetUp();
virtual void TearDown();
void ScaleSequence(ScaleMethod method,
FILE* source_file, std::string out_name,
int src_width, int src_height,
int dst_width, int dst_height);
Scaler test_scaler_;
FILE* source_file_;
uint8_t* test_buffer_;
const int width_;
const int height_;
const int frame_length_;
};
void ScaleSequence(ScaleMethod method,
FILE* source_file, std::string out_name,
int src_width, int src_height,
int dst_width, int dst_height);
// TODO (mikhal): Use scoped_ptr when handling buffers.
TestScaler::TestScaler()
@ -44,11 +47,12 @@ TestScaler::TestScaler()
}
void TestScaler::SetUp() {
const std::string input_file_name = webrtc::test::ProjectRootPath() +
"resources/foreman_cif.yuv";
const std::string input_file_name =
webrtc::test::ResourcePath("foreman_cif", "yuv");
source_file_ = fopen(input_file_name.c_str(), "rb");
ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<<
input_file_name << "\n";
test_buffer_ = new uint8_t[frame_length_];
}
void TestScaler::TearDown() {
@ -56,35 +60,36 @@ void TestScaler::TearDown() {
ASSERT_EQ(0, fclose(source_file_));
}
source_file_ = NULL;
delete [] test_buffer_;
}
TEST_F(TestScaler, ScaleSanityTest) {
Scaler test_scaler;
uint8_t* test_buffer = new uint8_t[frame_length_];
// Scaling without setting values
TEST_F(TestScaler, ScaleWithoutSettingValues) {
int size = 100;
EXPECT_EQ(-2, test_scaler.Scale(test_buffer, test_buffer, size));
EXPECT_EQ(-2, test_scaler_.Scale(test_buffer_, test_buffer_, size));
}
// Setting bad initial values
EXPECT_EQ(-1, test_scaler.Set(0, 288, 352, 288, kI420, kI420, kScalePoint));
EXPECT_EQ(-1, test_scaler.Set(704, 0, 352, 288, kI420, kI420, kScaleBox));
EXPECT_EQ(-1, test_scaler.Set(704, 576, 352, 0, kI420, kI420,
TEST_F(TestScaler, ScaleBadInitialValues) {
EXPECT_EQ(-1, test_scaler_.Set(0, 288, 352, 288, kI420, kI420, kScalePoint));
EXPECT_EQ(-1, test_scaler_.Set(704, 0, 352, 288, kI420, kI420, kScaleBox));
EXPECT_EQ(-1, test_scaler_.Set(704, 576, 352, 0, kI420, kI420,
kScaleBilinear));
EXPECT_EQ(-1, test_scaler.Set(704, 576, 0, 288, kI420, kI420, kScalePoint));
EXPECT_EQ(-1, test_scaler_.Set(704, 576, 0, 288, kI420, kI420, kScalePoint));
}
// Sending NULL pointer
size = 0;
EXPECT_EQ(-1, test_scaler.Scale(NULL, test_buffer, size));
TEST_F(TestScaler, ScaleSendingNullSourcePointer) {
int size = 0;
EXPECT_EQ(-1, test_scaler_.Scale(NULL, test_buffer_, size));
}
TEST_F(TestScaler, ScaleSendingBufferTooSmall) {
// Sending a buffer which is too small (should reallocate and update size)
EXPECT_EQ(0, test_scaler.Set(352, 288, 144, 288, kI420, kI420, kScalePoint));
EXPECT_EQ(0, test_scaler_.Set(352, 288, 144, 288, kI420, kI420, kScalePoint));
uint8_t* test_buffer2 = NULL;
size = 0;
EXPECT_GT(fread(test_buffer, 1, frame_length_, source_file_), 0U);
EXPECT_EQ(0, test_scaler.Scale(test_buffer, test_buffer2, size));
int size = 0;
EXPECT_GT(fread(test_buffer_, 1, frame_length_, source_file_), 0U);
EXPECT_EQ(0, test_scaler_.Scale(test_buffer_, test_buffer2, size));
EXPECT_EQ(144 * 288 * 3 / 2, size);
delete [] test_buffer;
delete [] test_buffer2;
}
//TODO (mikhal): Converge the test into one function that accepts the method.
@ -183,13 +188,12 @@ TEST_F(TestScaler, BoxScaleTest) {
}
// TODO (mikhal): Move part to a separate scale test.
void ScaleSequence(ScaleMethod method,
void TestScaler::ScaleSequence(ScaleMethod method,
FILE* source_file, std::string out_name,
int src_width, int src_height,
int dst_width, int dst_height) {
Scaler test_scaler;
FILE* output_file;
EXPECT_EQ(0, test_scaler.Set(src_width, src_height,
EXPECT_EQ(0, test_scaler_.Set(src_width, src_height,
dst_width, dst_height,
kI420, kI420, method));
@ -214,7 +218,7 @@ void ScaleSequence(ScaleMethod method,
break;
start_clock = TickTime::MillisecondTimestamp();
EXPECT_EQ(0, test_scaler.Scale(input_buffer, output_buffer,
EXPECT_EQ(0, test_scaler_.Scale(input_buffer, output_buffer,
out_required_size));
total_clock += TickTime::MillisecondTimestamp() - start_clock;
fwrite(output_buffer, out_required_size, 1, output_file);
@ -227,8 +231,9 @@ void ScaleSequence(ScaleMethod method,
printf("Average time per frame[ms]: %.2lf\n",
(static_cast<double>(total_clock) / frame_count));
}
ASSERT_EQ(0, fclose(output_file));
delete [] input_buffer;
delete [] output_buffer;
}
} // namespace
} // namespace webrtc