⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_compress.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        size_t os_str_len = os_str.pcount();        PrintResult(eCompress, kUnknownErr, kDataLen, kBufLen, os_str_len);        // Try to decompress data        TCompression c;        result = c.DecompressBuffer(str, os_str_len, cmp_buf, kBufLen,                                    &out_len);        PrintResult(eDecompress, c.GetErrorCode(), os_str_len, kBufLen,                    out_len);        assert(result);        // Compare original and decompressed data        assert(out_len == kDataLen);        assert(memcmp(src_buf, cmp_buf, out_len) == 0);        os_str.rdbuf()->freeze(0);        OK;    }}    //------------------------------------------------------------------------    // Decompression output stream test    //------------------------------------------------------------------------    {{        cout << "Testing decompression output stream...\n";        INIT_BUFFERS;        // Compress the data        TCompression c;        result = c.CompressBuffer(src_buf, kDataLen, dst_buf, kBufLen,                                  &out_len);        PrintResult(eCompress, c.GetErrorCode(), kDataLen, kBufLen, out_len);        assert(result);        // Write compressed data to decompressing stream        CNcbiOstrstream os_str;        CCompressionOStream os_zip(os_str, new TStreamDecompressor(),                                   CCompressionStream::fOwnProcessor);        os_zip.write(dst_buf, out_len);        // Finalize a compression stream via direct call Finalize()        os_zip.Finalize();        // Get decompressed size        const char*  str = os_str.str();        size_t os_str_len = os_str.pcount();        PrintResult(eDecompress, kUnknownErr, out_len, kBufLen, os_str_len);        assert(os_zip.GetProcessedSize() == out_len);        assert(os_zip.GetOutputSize() == kDataLen);        // Compare original and uncompressed data        assert(os_str_len == kDataLen);        assert(memcmp(src_buf, str, os_str_len) == 0);        os_str.rdbuf()->freeze(0);        OK;    }}    //------------------------------------------------------------------------    // IO stream tests    //------------------------------------------------------------------------    {{        cout << "Testing IO stream...\n";        {{            INIT_BUFFERS;            CNcbiStrstream stm(dst_buf, kBufLen);            CCompressionIOStream zip(stm, new TStreamDecompressor(),                                          new TStreamCompressor(),                                          CCompressionStream::fOwnProcessor);            zip.write(src_buf, kDataLen);            assert(zip.good()  &&  stm.good());            zip.Finalize(CCompressionStream::eWrite);            assert(!stm.eof()  &&  stm.good());            assert(!zip.eof()  &&  zip.good());            assert(zip.GetProcessedSize(CCompressionStream::eWrite)                   == kDataLen);            assert(zip.GetProcessedSize(CCompressionStream::eRead) == 0);            assert(zip.GetOutputSize(CCompressionStream::eWrite) > 0);            assert(zip.GetOutputSize(CCompressionStream::eRead) == 0);            // Read as much as possible            zip.read(cmp_buf, kDataLen);            out_len = zip.gcount();            assert(!stm.eof()  &&  stm.good());            assert(!zip.eof()  &&  zip.good());            assert(out_len <= kDataLen);            zip.Finalize(CCompressionStream::eRead);            // Read the residue of the data after finalization            if ( out_len < kDataLen ) {                zip.clear();                zip.read(cmp_buf + out_len, kDataLen - out_len);                out_len += zip.gcount();                assert(out_len == kDataLen);            }            assert(!zip.eof());            assert(zip.GetProcessedSize(CCompressionStream::eWrite)                   == kDataLen);            assert(zip.GetProcessedSize(CCompressionStream::eRead) > 0);            assert(zip.GetOutputSize(CCompressionStream::eWrite) > 0);            assert(zip.GetOutputSize(CCompressionStream::eRead) == kDataLen);            // Check on EOF            char c;            zip >> c;            assert(zip.eof());            // Compare buffers            assert(memcmp(src_buf, cmp_buf, kDataLen) == 0);        }}        {{            INIT_BUFFERS;            CNcbiStrstream stm(dst_buf, kBufLen);            CCompressionIOStream zip(stm, new TStreamDecompressor(),                                          new TStreamCompressor(),                                          CCompressionStream::fOwnProcessor);            int v;            for (int i = 0; i < 1000; i++) {                 v = i * 2;                 zip << v << endl;            }            zip.Finalize(CCompressionStream::eWrite);            zip.clear();            for (int i = 0; i < 1000; i++) {                 zip >> v;                 assert(!zip.eof());                 assert(v == i * 2);            }            zip.Finalize();            zip >> v;            assert(zip.eof());        }}        OK;    }}    //------------------------------------------------------------------------    // Advanced I/O stream test    //------------------------------------------------------------------------    {{        cout << "Advanced I/O stream test...\n";        INIT_BUFFERS;        int v;        // Compress output        CNcbiOstrstream os_str;        {{            CCompressionOStream ocs_zip(os_str, new TStreamCompressor(),                                        CCompressionStream::fOwnWriter);            for (int i = 0; i < 1000; i++) {                v = i * 2;                ocs_zip << v << endl;            }        }}        const char* str = os_str.str();        size_t os_str_len = os_str.pcount();        PrintResult(eCompress, kUnknownErr, kUnknown, kUnknown,os_str_len);        // Decompress input        CNcbiIstrstream is_str(str, os_str_len);        CCompressionIStream ids_zip(is_str, new TStreamDecompressor(),                                    CCompressionStream::fOwnReader);        for (int i = 0; i < 1000; i++) {            ids_zip >> v;            assert(!ids_zip.eof());            assert( i*2 == v);        }        // Check EOF        ids_zip >> v;        PrintResult(eDecompress, kUnknownErr, os_str_len, kUnknown,                    kUnknown);        assert(ids_zip.eof());        os_str.rdbuf()->freeze(0);        OK;    }}    //------------------------------------------------------------------------}template<class TCompression,         class TCompressionFile,         class TStreamCompressor,         class TStreamDecompressor>void CTestCompressor<TCompression, TCompressionFile,                     TStreamCompressor, TStreamDecompressor>    ::PrintResult(EPrintType type, int last_errcode,                   unsigned int src_len,                  unsigned int dst_len,                  unsigned int out_len){    cout << (type == eCompress) ? "Compress   ":                                   "Decompress ";    cout << "errcode = ";    cout << ((last_errcode == kUnknownErr) ? '?' : last_errcode) << ", ";    cout << ((src_len == kUnknown) ? '?' : src_len) << " -> ";    cout << ((out_len == kUnknown) ? '?' : out_len) << ", limit ";    cout << ((dst_len == kUnknown) ? '?' : dst_len) << endl;}////////////////////////////////////////////////////////////////////////////////// Test application//class CTest : public CNcbiApplication{public:    void Init(void);    int  Run(void);};void CTest::Init(void){    SetDiagPostLevel(eDiag_Warning);}int CTest::Run(void){    char* src_buf = new char[kBufLen];    assert(src_buf);    // Preparing a data for compression    unsigned int seed = time(0);    cout << "Random seed = " << seed << endl << endl;    srand(seed);    for (size_t i=0; i<kDataLen; i++) {        // Use a set from 25 chars [A-Z]        // src_buf[i] = (char)(65+(double)rand()/RAND_MAX*(90-65));        // Use a set from 10 chars ['\0'-'\9']        src_buf[i] = (char)((double)rand()/RAND_MAX*10);    }    // Test compressors    cout << "-------------- BZip2 ---------------\n\n";    CTestCompressor<CBZip2Compression, CBZip2CompressionFile,                    CBZip2StreamCompressor, CBZip2StreamDecompressor>        ::Run(src_buf);    cout << "--------------- Zlib ---------------\n\n";        CTestCompressor<CZipCompression, CZipCompressionFile,                    CZipStreamCompressor, CZipStreamDecompressor>        ::Run(src_buf);    cout << "\nTEST execution completed successfully!\n\n";     return 0;}////////////////////////////////////////////////////////////////////////////////// MAIN//int main(int argc, const char* argv[]){    // Execute main application function    return CTest().AppMain(argc, argv, 0, eDS_Default, 0);}/* * =========================================================================== * $Log: test_compress.cpp,v $ * Revision 1000.2  2004/06/01 19:42:40  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9 * * Revision 1.9  2004/05/17 21:09:26  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.8  2004/05/13 13:56:05  ivanov * Cosmetic changes * * Revision 1.7  2004/05/10 12:07:26  ivanov * Added tests for GetProcessedSize() and GetOutputSize() * * Revision 1.6  2004/04/09 11:48:26  ivanov * Added ownership parameter to CCompressionStream constructors. * * Revision 1.5  2003/07/15 15:54:43  ivanov * GetLastError() -> GetErrorCode() renaming * * Revision 1.4  2003/06/17 15:53:31  ivanov * Changed tests accordingly the last Compression API changes. * Some tests rearrangemets. * * Revision 1.3  2003/06/04 21:12:17  ivanov * Added a random seed print out. Minor cosmetic changes. * * Revision 1.2  2003/06/03 20:12:26  ivanov * Added small changes after Compression API redesign. * Added tests for CCompressionFile class. * * Revision 1.1  2003/04/08 15:02:47  ivanov * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -