156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson//===- llvm/unittest/Support/CompressionTest.cpp - Compression tests ------===// 256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// 356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// The LLVM Compiler Infrastructure 456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// 556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// This file is distributed under the University of Illinois Open Source 656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// License. See LICENSE.TXT for details. 756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// 856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson//===----------------------------------------------------------------------===// 956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// 1056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// This file implements unit tests for the Compression functions. 1156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson// 1256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson//===----------------------------------------------------------------------===// 1356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 1456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#include "llvm/Support/Compression.h" 1556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#include "llvm/ADT/StringRef.h" 1656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#include "llvm/ADT/SmallString.h" 1756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#include "llvm/Config/config.h" 1856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#include "gtest/gtest.h" 1956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonusing namespace llvm; 2156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonnamespace { 2356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#if LLVM_ENABLE_ZLIB == 1 && HAVE_LIBZ 2556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 2656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodsonvoid TestZlibCompression(StringRef Input, zlib::CompressionLevel Level) { 2756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson SmallString<32> Compressed; 2856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson SmallString<32> Uncompressed; 2956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson EXPECT_EQ(zlib::StatusOK, zlib::compress(Input, Compressed, Level)); 3056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // Check that uncompressed buffer is the same as original. 3156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson EXPECT_EQ(zlib::StatusOK, 3256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson zlib::uncompress(Compressed, Uncompressed, Input.size())); 3356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson EXPECT_EQ(Input, Uncompressed); 3456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson if (Input.size() > 0) { 3556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson // Uncompression fails if expected length is too short. 3656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson EXPECT_EQ(zlib::StatusBufferTooShort, 3756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson zlib::uncompress(Compressed, Uncompressed, Input.size() - 1)); 3856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 3956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 4056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4156ed4167b942ec265f9cee70ac4d71d10b3835ceBen DodsonTEST(CompressionTest, Zlib) { 4256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression("", zlib::DefaultCompression); 4356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression("hello, world!", zlib::NoCompression); 4556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression("hello, world!", zlib::BestSizeCompression); 4656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression("hello, world!", zlib::BestSpeedCompression); 4756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression("hello, world!", zlib::DefaultCompression); 4856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 4956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson const size_t kSize = 1024; 5056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson char BinaryData[kSize]; 5156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson for (size_t i = 0; i < kSize; ++i) { 5256ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson BinaryData[i] = i & 255; 5356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson } 5456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson StringRef BinaryDataStr(BinaryData, kSize); 5556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 5656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression(BinaryDataStr, zlib::NoCompression); 5756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression(BinaryDataStr, zlib::BestSizeCompression); 5856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression(BinaryDataStr, zlib::BestSpeedCompression); 5956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson TestZlibCompression(BinaryDataStr, zlib::DefaultCompression); 6056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 6156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6256ed4167b942ec265f9cee70ac4d71d10b3835ceBen DodsonTEST(CompressionTest, ZlibCRC32) { 6356ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson EXPECT_EQ( 6456ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 0x414FA339U, 6556ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson zlib::crc32(StringRef("The quick brown fox jumps over the lazy dog"))); 6656ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 6756ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 6856ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson#endif 6956ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson 7056ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson} 7156ed4167b942ec265f9cee70ac4d71d10b3835ceBen Dodson