14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <stdint.h>
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <limits>
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h"
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/codec/ccodec_basicmodule.h"
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcodec/fx_codec.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "testing/gtest/include/gtest/gtest.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannTEST(fxcodec, RLETestBadInputs) {
1533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf[] = {1};
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* dest_buf = nullptr;
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t src_size = 4;
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dest_size = 0;
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule();
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(pEncoders);
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Error codes, not segvs, should callers pass us a nullptr pointer.
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_FALSE(
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf, src_size, &dest_buf, nullptr));
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_FALSE(
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf, src_size, nullptr, &dest_size));
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_FALSE(pEncoders->RunLengthEncode(src_buf, 0, &dest_buf, &dest_size));
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_FALSE(
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(nullptr, src_size, &dest_buf, &dest_size));
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Check length 1 input works. Check terminating character is applied.
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannTEST(fxcodec, RLETestShortInput) {
3533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf[] = {1};
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* dest_buf = nullptr;
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t src_size = 1;
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dest_size = 0;
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule();
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(pEncoders);
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf, src_size, &dest_buf, &dest_size));
4533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(3u, dest_size);
4633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  EXPECT_EQ(0, dest_buf[0]);
4733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  EXPECT_EQ(1, dest_buf[1]);
4833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  EXPECT_EQ(128, dest_buf[2]);
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Check a few basic cases (2 matching runs in a row, matching run followed
5433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann// by a non-matching run, and non-matching run followed by a matching run).
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannTEST(fxcodec, RLETestNormalInputs) {
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Match, match
5733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf_1[] = {2, 2, 2, 2, 4, 4, 4, 4, 4, 4};
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
5933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  // Match, non-match
6033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf_2[] = {2, 2, 2, 2, 1, 2, 3, 4, 5, 6};
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  // Non-match, match
6333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf_3[] = {1, 2, 3, 4, 5, 3, 3, 3, 3, 3};
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t src_size = 10;
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dest_size = 0;
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* dest_buf = nullptr;
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule();
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(pEncoders);
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 1:
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_1, src_size, &dest_buf, &dest_size));
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* decoded_buf = nullptr;
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t decoded_size = 0;
77d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
7833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
8033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_1[i], decoded_buf[i]) << " at " << i;
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 2:
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_buf = nullptr;
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_size = 0;
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_2, src_size, &dest_buf, &dest_size));
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_buf = nullptr;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_size = 0;
91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
9233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
9433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_2[i], decoded_buf[i]) << " at " << i;
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 3:
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_buf = nullptr;
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_size = 0;
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_3, src_size, &dest_buf, &dest_size));
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_buf = nullptr;
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_size = 0;
105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
10633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
10833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_3[i], decoded_buf[i]) << " at " << i;
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Check that runs longer than 128 are broken up properly, both matched and
11433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann// non-matched.
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannTEST(fxcodec, RLETestFullLengthInputs) {
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Match, match
11733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  const uint8_t src_buf_1[260] = {1};
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
11933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  // Match, non-match
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t src_buf_2[260] = {2};
1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint16_t i = 128; i < 260; i++)
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    src_buf_2[i] = (uint8_t)(i - 125);
1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  // Non-match, match
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t src_buf_3[260] = {3};
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint8_t i = 0; i < 128; i++)
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    src_buf_3[i] = i;
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  // Non-match, non-match
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t src_buf_4[260];
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint16_t i = 0; i < 260; i++)
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    src_buf_4[i] = (uint8_t)(i);
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t src_size = 260;
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dest_size = 0;
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* dest_buf = nullptr;
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CCodec_BasicModule* pEncoders = CCodec_ModuleMgr().GetBasicModule();
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(pEncoders);
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 1:
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_1, src_size, &dest_buf, &dest_size));
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint8_t* decoded_buf = nullptr;
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t decoded_size = 0;
146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
14733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
14933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_1[i], decoded_buf[i]) << " at " << i;
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 2:
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_buf = nullptr;
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_size = 0;
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_2, src_size, &dest_buf, &dest_size));
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_buf = nullptr;
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_size = 0;
160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
16133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
16333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_2[i], decoded_buf[i]) << " at " << i;
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 3:
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_buf = nullptr;
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_size = 0;
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_3, src_size, &dest_buf, &dest_size));
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_buf = nullptr;
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_size = 0;
174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
17533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
17733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_3[i], decoded_buf[i]) << " at " << i;
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Case 4:
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_buf = nullptr;
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  dest_size = 0;
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  EXPECT_TRUE(
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pEncoders->RunLengthEncode(src_buf_4, src_size, &dest_buf, &dest_size));
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_buf = nullptr;
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  decoded_size = 0;
188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  RunLengthDecode(dest_buf, dest_size, &decoded_buf, &decoded_size);
18933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  ASSERT_EQ(src_size, decoded_size);
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  for (uint32_t i = 0; i < src_size; i++)
19133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    EXPECT_EQ(src_buf_4[i], decoded_buf[i]) << " at " << i;
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(dest_buf);
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_Free(decoded_buf);
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
195