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