/* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ZstdUtil.h" #include #include using namespace simpleperf; // @CddTest = 6.1/C-0-2 TEST(ZstdUtil, smoke) { std::unique_ptr compressor = CreateZstdCompressor(); ASSERT_TRUE(compressor); std::unique_ptr decompressor = CreateZstdDecompressor(); ASSERT_TRUE(decompressor); // Compress and decompress input_a. std::vector input_a(65536); for (size_t i = 0; i < input_a.size(); i++) { input_a[i] = static_cast(i % 256); } std::vector compressed_output; auto get_compressor_output = [&]() { std::string_view output = compressor->GetOutputData(); compressed_output.insert(compressed_output.end(), output.begin(), output.end()); compressor->ConsumeOutputData(output.size()); }; std::vector decompressed_output; auto get_decompressor_output = [&]() { std::string_view output = decompressor->GetOutputData(); decompressed_output.insert(decompressed_output.end(), output.begin(), output.end()); decompressor->ConsumeOutputData(output.size()); }; ASSERT_TRUE(compressor->AddInputData(input_a.data(), input_a.size() / 2)); get_compressor_output(); ASSERT_TRUE(compressor->AddInputData(input_a.data() + input_a.size() / 2, input_a.size() - input_a.size() / 2)); ASSERT_TRUE(compressor->FlushOutputData()); get_compressor_output(); ASSERT_NE(compressed_output.size(), 0); ASSERT_EQ(compressor->TotalInputSize(), input_a.size()); ASSERT_EQ(compressor->TotalOutputSize(), compressed_output.size()); // Flush with no new input doesn't affect output. ASSERT_TRUE(compressor->FlushOutputData()); ASSERT_TRUE(compressor->GetOutputData().empty()); ASSERT_TRUE(decompressor->AddInputData(compressed_output.data(), compressed_output.size() / 2)); get_decompressor_output(); ASSERT_TRUE(decompressor->AddInputData(compressed_output.data() + compressed_output.size() / 2, compressed_output.size() - compressed_output.size() / 2)); get_decompressor_output(); ASSERT_EQ(decompressed_output, input_a); // Compress and decompress input_b. std::vector input_b(65536); for (size_t i = 0; i < input_b.size(); i++) { input_b[i] = static_cast(i % 32); } compressed_output.clear(); decompressed_output.clear(); ASSERT_TRUE(compressor->AddInputData(input_b.data(), input_b.size())); ASSERT_TRUE(compressor->FlushOutputData()); get_compressor_output(); ASSERT_NE(compressed_output.size(), 0); ASSERT_TRUE(decompressor->AddInputData(compressed_output.data(), compressed_output.size())); get_decompressor_output(); ASSERT_EQ(decompressed_output, input_b); }