2
0

CompressionLZ4EditorTest.cpp 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzCore/UnitTest/TestTypes.h>
  9. #include <Compression/CompressionLZ4API.h>
  10. #include <Tools/CompressorLZ4Impl.h>
  11. namespace CompressionLZ4Test
  12. {
  13. class CompressionLZ4Fixture
  14. : public UnitTest::LeakDetectionFixture
  15. {
  16. public:
  17. CompressionLZ4Fixture() = default;
  18. ~CompressionLZ4Fixture() = default;
  19. protected:
  20. };
  21. TEST_F(CompressionLZ4Fixture, LZ4Compressor_CompressBlock_Succeeds)
  22. {
  23. auto compressionAlgorithmId = CompressionLZ4::GetLZ4CompressionAlgorithmId();
  24. auto compressorLz4 = AZStd::make_unique<CompressionLZ4::CompressorLZ4>();
  25. EXPECT_EQ(compressionAlgorithmId, compressorLz4->GetCompressionAlgorithmId());
  26. constexpr AZStd::string_view dataToCompress = R"(Hello World)";
  27. size_t compressBufferUpperBound = compressorLz4->CompressBound(dataToCompress.size());
  28. EXPECT_GT(compressBufferUpperBound, 0);
  29. AZStd::vector<AZStd::byte> compressionBuffer;
  30. // Resize the compression output buffer to be able to fit the largest amount of compressed data
  31. // for the given dataToCompress size
  32. compressionBuffer.resize_no_construct(compressBufferUpperBound);
  33. AZStd::span uncompressedData(reinterpret_cast<const AZStd::byte*>(dataToCompress.data()), dataToCompress.size());
  34. Compression::CompressionResultData compressionResultData = compressorLz4->CompressBlock(
  35. compressionBuffer, uncompressedData);
  36. EXPECT_TRUE(static_cast<bool>(compressionResultData));
  37. EXPECT_TRUE(static_cast<bool>(compressionResultData.m_compressionOutcome));
  38. EXPECT_GT(compressionResultData.GetCompressedByteCount(), 0);
  39. EXPECT_NE(nullptr, compressionResultData.GetCompressedByteData());
  40. // Resize the compression buffer to the exact size
  41. compressionBuffer.resize_no_construct(compressionResultData.GetCompressedByteCount());
  42. }
  43. TEST_F(CompressionLZ4Fixture, LZ4Compressor_CompressBlock_WithBufferTooSmall_Fails)
  44. {
  45. auto compressionAlgorithmId = CompressionLZ4::GetLZ4CompressionAlgorithmId();
  46. auto compressorLz4 = AZStd::make_unique<CompressionLZ4::CompressorLZ4>();
  47. EXPECT_EQ(compressionAlgorithmId, compressorLz4->GetCompressionAlgorithmId());
  48. constexpr AZStd::string_view dataToCompress = R"(Hello World)";
  49. AZStd::span uncompressedData(reinterpret_cast<const AZStd::byte*>(dataToCompress.data()), dataToCompress.size());
  50. // The compression output buffer has a size of zero, so compression should fail
  51. AZStd::vector<AZStd::byte> compressionBuffer;
  52. Compression::CompressionResultData compressionResultData = compressorLz4->CompressBlock(
  53. compressionBuffer, uncompressedData);
  54. EXPECT_FALSE(static_cast<bool>(compressionResultData));
  55. EXPECT_FALSE(static_cast<bool>(compressionResultData.m_compressionOutcome));
  56. EXPECT_EQ(0, compressionResultData.GetCompressedByteCount());
  57. EXPECT_EQ(nullptr, compressionResultData.GetCompressedByteData());
  58. }
  59. }