diff options
| author | Avneesh Saluja <asaluja@gmail.com> | 2013-03-28 18:28:16 -0700 | 
|---|---|---|
| committer | Avneesh Saluja <asaluja@gmail.com> | 2013-03-28 18:28:16 -0700 | 
| commit | 5b8253e0e1f1393a509fb9975ba8c1347af758ed (patch) | |
| tree | 1790470b1d07a0b4973ebce19192e896566ea60b /klm/util/read_compressed_test.cc | |
| parent | 2389a5a8a43dda87c355579838559515b0428421 (diff) | |
| parent | b203f8c5dc8cff1b9c9c2073832b248fcad0765a (diff) | |
fixed conflicts
Diffstat (limited to 'klm/util/read_compressed_test.cc')
| -rw-r--r-- | klm/util/read_compressed_test.cc | 109 | 
1 files changed, 109 insertions, 0 deletions
| diff --git a/klm/util/read_compressed_test.cc b/klm/util/read_compressed_test.cc new file mode 100644 index 00000000..9cb4a4b9 --- /dev/null +++ b/klm/util/read_compressed_test.cc @@ -0,0 +1,109 @@ +#include "util/read_compressed.hh" + +#include "util/file.hh" +#include "util/have.hh" + +#define BOOST_TEST_MODULE ReadCompressedTest +#include <boost/test/unit_test.hpp> +#include <boost/scoped_ptr.hpp> + +#include <fstream> +#include <string> + +#include <stdlib.h> + +namespace util { +namespace { + +void ReadLoop(ReadCompressed &reader, void *to_void, std::size_t amount) { +  uint8_t *to = static_cast<uint8_t*>(to_void); +  while (amount) { +    std::size_t ret = reader.Read(to, amount); +    BOOST_REQUIRE(ret); +    to += ret; +    amount -= ret; +  } +} + +const uint32_t kSize4 = 100000 / 4; + +std::string WriteRandom() { +  char name[] = "tempXXXXXX"; +  scoped_fd original(mkstemp(name)); +  BOOST_REQUIRE(original.get() > 0); +  for (uint32_t i = 0; i < kSize4; ++i) { +    WriteOrThrow(original.get(), &i, sizeof(uint32_t)); +  } +  return name; +} + +void VerifyRead(ReadCompressed &reader) { +  for (uint32_t i = 0; i < kSize4; ++i) { +    uint32_t got; +    ReadLoop(reader, &got, sizeof(uint32_t)); +    BOOST_CHECK_EQUAL(i, got); +  } + +  char ignored; +  BOOST_CHECK_EQUAL((std::size_t)0, reader.Read(&ignored, 1)); +  // Test double EOF call. +  BOOST_CHECK_EQUAL((std::size_t)0, reader.Read(&ignored, 1)); +} + +void TestRandom(const char *compressor) { +  std::string name(WriteRandom()); + +  char gzname[] = "tempXXXXXX"; +  scoped_fd gzipped(mkstemp(gzname)); + +  std::string command(compressor); +#ifdef __CYGWIN__ +  command += ".exe"; +#endif +  command += " <\""; +  command += name; +  command += "\" >\""; +  command += gzname; +  command += "\""; +  BOOST_REQUIRE_EQUAL(0, system(command.c_str())); + +  BOOST_CHECK_EQUAL(0, unlink(name.c_str())); +  BOOST_CHECK_EQUAL(0, unlink(gzname)); + +  ReadCompressed reader(gzipped.release()); +  VerifyRead(reader); +} + +BOOST_AUTO_TEST_CASE(Uncompressed) { +  TestRandom("cat"); +} + +#ifdef HAVE_ZLIB +BOOST_AUTO_TEST_CASE(ReadGZ) { +  TestRandom("gzip"); +} +#endif // HAVE_ZLIB + +#ifdef HAVE_BZLIB +BOOST_AUTO_TEST_CASE(ReadBZ) { +  TestRandom("bzip2"); +} +#endif // HAVE_BZLIB + +#ifdef HAVE_XZLIB +BOOST_AUTO_TEST_CASE(ReadXZ) { +  TestRandom("xz"); +} +#endif + +BOOST_AUTO_TEST_CASE(IStream) { +  std::string name(WriteRandom()); +  std::fstream stream(name.c_str(), std::ios::in); +  BOOST_CHECK_EQUAL(0, unlink(name.c_str())); +  ReadCompressed reader; +  reader.Reset(stream); +  VerifyRead(reader); +} + +} // namespace +} // namespace util | 
