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()); }
/* * 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); } }