diff options
author | Lei Zhang <thestig@chromium.org> | 2018-10-16 05:21:13 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-10-16 05:21:13 +0000 |
commit | 2e2acbdc523735fdbbf69b1f9fee9a24e4303045 (patch) | |
tree | 8faa4479c0e73771fc816791a97aa4c83f8769a1 /core/fxcodec/codec/fx_codec_rle_unittest.cpp | |
parent | 6ea4d08b905de5fab7dc64f35b0abf745a1db3f3 (diff) | |
download | pdfium-2e2acbdc523735fdbbf69b1f9fee9a24e4303045.tar.xz |
Make {A85,RunLength}Encode()'s buffer out parameter a unique_ptr.
Change-Id: I3f06ea7ed39c8a8fff57e07f14ff6c21bedbc028
Reviewed-on: https://pdfium-review.googlesource.com/c/43998
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxcodec/codec/fx_codec_rle_unittest.cpp')
-rw-r--r-- | core/fxcodec/codec/fx_codec_rle_unittest.cpp | 233 |
1 files changed, 116 insertions, 117 deletions
diff --git a/core/fxcodec/codec/fx_codec_rle_unittest.cpp b/core/fxcodec/codec/fx_codec_rle_unittest.cpp index 3ee0aa6368..433d96d112 100644 --- a/core/fxcodec/codec/fx_codec_rle_unittest.cpp +++ b/core/fxcodec/codec/fx_codec_rle_unittest.cpp @@ -14,7 +14,7 @@ TEST(fxcodec, RLETestBadInputs) { const uint8_t src_buf[] = {1}; - uint8_t* dest_buf = nullptr; + std::unique_ptr<uint8_t, FxFreeDeleter> dest_buf; uint32_t dest_size = 0; CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule(); @@ -28,145 +28,144 @@ TEST(fxcodec, RLETestBadInputs) { // Check length 1 input works. Check terminating character is applied. TEST(fxcodec, RLETestShortInput) { - const uint8_t src_buf[] = {1}; - uint8_t* dest_buf = nullptr; - uint32_t dest_size = 0; - CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule(); EXPECT_TRUE(pEncoders); + const uint8_t src_buf[] = {1}; + std::unique_ptr<uint8_t, FxFreeDeleter> dest_buf; + uint32_t dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf, &dest_buf, &dest_size)); ASSERT_EQ(3u, dest_size); - EXPECT_EQ(0, dest_buf[0]); - EXPECT_EQ(1, dest_buf[1]); - EXPECT_EQ(128, dest_buf[2]); - - FX_Free(dest_buf); + auto dest_buf_span = pdfium::make_span(dest_buf.get(), dest_size); + EXPECT_EQ(0, dest_buf_span[0]); + EXPECT_EQ(1, dest_buf_span[1]); + EXPECT_EQ(128, dest_buf_span[2]); } // Check a few basic cases (2 matching runs in a row, matching run followed // by a non-matching run, and non-matching run followed by a matching run). TEST(fxcodec, RLETestNormalInputs) { - // Match, match - const uint8_t src_buf_1[] = {2, 2, 2, 2, 4, 4, 4, 4, 4, 4}; - - // Match, non-match - const uint8_t src_buf_2[] = {2, 2, 2, 2, 1, 2, 3, 4, 5, 6}; - - // Non-match, match - const uint8_t src_buf_3[] = {1, 2, 3, 4, 5, 3, 3, 3, 3, 3}; - - uint32_t dest_size = 0; - uint8_t* dest_buf = nullptr; - CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule(); EXPECT_TRUE(pEncoders); - // Case 1: - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_1, &dest_buf, &dest_size)); + std::unique_ptr<uint8_t, FxFreeDeleter> dest_buf; + uint32_t dest_size = 0; std::unique_ptr<uint8_t, FxFreeDeleter> decoded_buf; uint32_t decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_1), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_1[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); - - // Case 2: - dest_buf = nullptr; - dest_size = 0; - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_2, &dest_buf, &dest_size)); - decoded_buf.reset(); - decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_2), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_2[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); - - // Case 3: - dest_buf = nullptr; - dest_size = 0; - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_3, &dest_buf, &dest_size)); - decoded_buf.reset(); - decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_3), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_3[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); + + { + // Case 1: Match, match + const uint8_t src_buf_1[] = {2, 2, 2, 2, 4, 4, 4, 4, 4, 4}; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_1, &dest_buf, &dest_size)); + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_1), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_1[i], decoded_buf_span[i]) << " at " << i; + } + + { + // Case 2: Match, non-match + const uint8_t src_buf_2[] = {2, 2, 2, 2, 1, 2, 3, 4, 5, 6}; + dest_buf.reset(); + dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_2, &dest_buf, &dest_size)); + decoded_buf.reset(); + decoded_size = 0; + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_2), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_2[i], decoded_buf_span[i]) << " at " << i; + } + + { + // Case 3: Non-match, match + const uint8_t src_buf_3[] = {1, 2, 3, 4, 5, 3, 3, 3, 3, 3}; + dest_buf.reset(); + dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_3, &dest_buf, &dest_size)); + decoded_buf.reset(); + decoded_size = 0; + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_3), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_3[i], decoded_buf_span[i]) << " at " << i; + } } // Check that runs longer than 128 are broken up properly, both matched and // non-matched. TEST(fxcodec, RLETestFullLengthInputs) { - // Match, match - const uint8_t src_buf_1[260] = {1}; - - // Match, non-match - uint8_t src_buf_2[260] = {2}; - for (uint16_t i = 128; i < 260; i++) - src_buf_2[i] = (uint8_t)(i - 125); - - // Non-match, match - uint8_t src_buf_3[260] = {3}; - for (uint8_t i = 0; i < 128; i++) - src_buf_3[i] = i; - - // Non-match, non-match - uint8_t src_buf_4[260]; - for (uint16_t i = 0; i < 260; i++) - src_buf_4[i] = (uint8_t)(i); - - uint32_t dest_size = 0; - uint8_t* dest_buf = nullptr; - CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule(); EXPECT_TRUE(pEncoders); - // Case 1: - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_1, &dest_buf, &dest_size)); + std::unique_ptr<uint8_t, FxFreeDeleter> dest_buf; + uint32_t dest_size = 0; std::unique_ptr<uint8_t, FxFreeDeleter> decoded_buf; uint32_t decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_1), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_1[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); - - // Case 2: - dest_buf = nullptr; - dest_size = 0; - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_2, &dest_buf, &dest_size)); - decoded_buf.reset(); - decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_2), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_2[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); - - // Case 3: - dest_buf = nullptr; - dest_size = 0; - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_3, &dest_buf, &dest_size)); - decoded_buf.reset(); - decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_3), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_3[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); - - // Case 4: - dest_buf = nullptr; - dest_size = 0; - EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_4, &dest_buf, &dest_size)); - decoded_buf.reset(); - decoded_size = 0; - RunLengthDecode({dest_buf, dest_size}, &decoded_buf, &decoded_size); - ASSERT_EQ(sizeof(src_buf_4), decoded_size); - for (uint32_t i = 0; i < decoded_size; i++) - EXPECT_EQ(src_buf_4[i], decoded_buf.get()[i]) << " at " << i; - FX_Free(dest_buf); + + { + // Case 1: Match, match + const uint8_t src_buf_1[260] = {1}; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_1, &dest_buf, &dest_size)); + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_1), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_1[i], decoded_buf_span[i]) << " at " << i; + } + + { + // Case 2: Match, non-match + uint8_t src_buf_2[260] = {2}; + for (uint16_t i = 128; i < 260; i++) + src_buf_2[i] = static_cast<uint8_t>(i - 125); + dest_buf.reset(); + dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_2, &dest_buf, &dest_size)); + decoded_buf.reset(); + decoded_size = 0; + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_2), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_2[i], decoded_buf_span[i]) << " at " << i; + } + + { + // Case 3: Non-match, match + uint8_t src_buf_3[260] = {3}; + for (uint8_t i = 0; i < 128; i++) + src_buf_3[i] = i; + dest_buf.reset(); + dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_3, &dest_buf, &dest_size)); + decoded_buf.reset(); + decoded_size = 0; + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_3), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_3[i], decoded_buf_span[i]) << " at " << i; + } + + { + // Case 4: Non-match, non-match + uint8_t src_buf_4[260]; + for (uint16_t i = 0; i < 260; i++) + src_buf_4[i] = static_cast<uint8_t>(i); + dest_buf.reset(); + dest_size = 0; + EXPECT_TRUE(pEncoders->RunLengthEncode(src_buf_4, &dest_buf, &dest_size)); + decoded_buf.reset(); + decoded_size = 0; + RunLengthDecode({dest_buf.get(), dest_size}, &decoded_buf, &decoded_size); + ASSERT_EQ(sizeof(src_buf_4), decoded_size); + auto decoded_buf_span = pdfium::make_span(decoded_buf.get(), decoded_size); + for (uint32_t i = 0; i < decoded_size; i++) + EXPECT_EQ(src_buf_4[i], decoded_buf_span[i]) << " at " << i; + } } |