예제 #1
0
파일: zlibstream.cpp 프로젝트: cip/zimlib
    void inflatorOstreamTest()
    {
      // test 
      std::stringstream deflatetarget;
      zim::DeflateStream deflator(deflatetarget);
      deflator << testtext << std::flush;

      {
        std::ostringstream msg;
        msg << "teststring with " << testtext.size() << " bytes compressed into " << deflatetarget.str().size() << " bytes";
        reportMessage(msg.str());
      }

      std::ostringstream inflatetarget;
      zim::InflateStream inflator(inflatetarget); // inflator is a ostream here
      inflator << deflatetarget.str() << std::flush;

      {
        std::ostringstream msg;
        msg << "teststring uncompressed to " << inflatetarget.str().size() << " bytes";
        reportMessage(msg.str());
      }

      CXXTOOLS_UNIT_ASSERT_EQUALS(testtext, inflatetarget.str());
    }
예제 #2
0
/*
 * test that DecodeVector works
 */
void BaseInflatorTest::testDecodeVector() {
  TestInflator inflator(0, PDU::ONE_BYTE);
  uint8_t data[] = {1, 2, 3, 4, 5, 6};  // the test data
  unsigned int vector = 1;
  unsigned int bytes_used = 0;
  uint8_t flags = PDU::VFLAG_MASK;

  OLA_ASSERT_FALSE(inflator.DecodeVector(flags, data, 0, &vector, &bytes_used));
  OLA_ASSERT_EQ((unsigned int) 0, vector);
  OLA_ASSERT_EQ((unsigned int) 0, bytes_used);

  data[0] = 42;
  for (unsigned int i = 1; i < sizeof(data); i++) {
    OLA_ASSERT(inflator.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 42, vector);
    OLA_ASSERT_EQ((unsigned int) 1, bytes_used);
  }

  // now make sure we can reuse the vector
  flags = 0;
  for (unsigned int i = 0; i < sizeof(data); i++) {
    OLA_ASSERT(inflator.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 42, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  // resetting doesn't allow us to reuse the vector
  inflator.ResetPDUFields();
  for (unsigned int i = 0; i < sizeof(data); i++) {
    OLA_ASSERT_FALSE(inflator.DecodeVector(flags, data, i, &vector,
                                           &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 0, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  // now try with a vector size of 2
  flags = PDU::VFLAG_MASK;
  TestInflator inflator2(0, PDU::TWO_BYTES);
  for (unsigned int i = 0; i < 2; i++) {
    OLA_ASSERT_FALSE(
        inflator2.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 0, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  data[0] = 0x80;
  data[1] = 0x21;
  for (unsigned int i = 2; i < sizeof(data); i++) {
    OLA_ASSERT(inflator2.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 32801, vector);
    OLA_ASSERT_EQ((unsigned int) 2, bytes_used);
  }

  // now make sure we can reuse the vector
  flags = 0;
  for (unsigned int i = 0; i < sizeof(data); i++) {
    OLA_ASSERT(inflator2.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 32801, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  // resetting doesn't allow us to reuse the vector
  inflator2.ResetPDUFields();
  for (unsigned int i = 0; i < sizeof(data); i++) {
    OLA_ASSERT_FALSE(
        inflator2.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 0, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  // now try with a vector size of 4
  flags = PDU::VFLAG_MASK;
  TestInflator inflator4(0, PDU::FOUR_BYTES);
  for (unsigned int i = 0; i < 4; i++) {
    OLA_ASSERT_FALSE(
        inflator4.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((unsigned int) 0, vector);
    OLA_ASSERT_EQ((unsigned int) 0, bytes_used);
  }

  data[0] = 0x01;
  data[1] = 0x21;
  data[2] = 0x32;
  data[3] = 0x45;
  for (unsigned int i = 4; i < 8; i++) {
    OLA_ASSERT(inflator4.DecodeVector(flags, data, i, &vector, &bytes_used));
    OLA_ASSERT_EQ((uint32_t) 18952773, vector);
    OLA_ASSERT_EQ((unsigned int) 4, bytes_used);
  }
}