mirror of https://github.com/KLayout/klayout.git
121 lines
2.9 KiB
C++
121 lines
2.9 KiB
C++
|
|
/*
|
|
|
|
KLayout Layout Viewer
|
|
Copyright (C) 2006-2017 Matthias Koefferlein
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
|
|
#include "tlStream.h"
|
|
#include "tlDeflate.h"
|
|
#include "tlUnitTest.h"
|
|
|
|
#include "zlib.h"
|
|
|
|
TEST(1)
|
|
{
|
|
unsigned char data[] = {
|
|
// gzip header
|
|
// 0x1f, 0x8b, 0x08, 0x08,
|
|
// 0xed, 0x11, 0x07, 0x50,
|
|
// 0x00, 0x03,
|
|
// 0x78, 0x00,
|
|
0x0b, 0xc9, 0xc8, 0x2c,
|
|
0x56, 0x00, 0xa2, 0x44,
|
|
0x85, 0x92, 0xd4, 0xe2,
|
|
0x12, 0x85, 0x18, 0x45,
|
|
0x2e, 0x00, 0x20, 0xc7,
|
|
0x43, 0x6a, 0x12, 0x00,
|
|
0x00, 0x00
|
|
};
|
|
|
|
tl::InputMemoryStream ims = tl::InputMemoryStream ((const char *) data, sizeof (data));
|
|
tl::InputStream is (ims);
|
|
|
|
std::string out;
|
|
tl::InflateFilter f (is);
|
|
while (! f.at_end ()) {
|
|
out += f.get (1) [0];
|
|
}
|
|
|
|
EXPECT_EQ (out, "This is a test \\!\n");
|
|
}
|
|
|
|
TEST(2)
|
|
{
|
|
const char hello[] = "This is a test \\!";
|
|
|
|
tl::OutputStringStream oss;
|
|
tl::OutputStream os (oss);
|
|
tl::DeflateFilter fg (os);
|
|
fg.put (hello, sizeof (hello) - 1);
|
|
fg.flush ();
|
|
|
|
std::string deflated = oss.string ();
|
|
for (size_t i = 0; i < deflated.size(); ++i) {
|
|
}
|
|
tl::InputMemoryStream ims = tl::InputMemoryStream ((const char *) deflated.c_str (), deflated.size ());
|
|
tl::InputStream is (ims);
|
|
|
|
std::string out;
|
|
tl::InflateFilter f (is);
|
|
while (! f.at_end ()) {
|
|
out += f.get (1) [0];
|
|
}
|
|
|
|
EXPECT_EQ (out, "This is a test \\!");
|
|
}
|
|
|
|
// Big deflate:
|
|
TEST(3)
|
|
{
|
|
size_t n_hello = 1024*1024;
|
|
char *hello = new char[n_hello + 1];
|
|
hello[n_hello] = 0;
|
|
size_t r = 1;
|
|
for (size_t i = 0; i < n_hello; ++i) {
|
|
r *= 12361;
|
|
r ^= (r >> 8);
|
|
hello [i] = "abc" [r % 3];
|
|
}
|
|
|
|
tl::OutputStringStream oss;
|
|
tl::OutputStream os (oss);
|
|
tl::DeflateFilter fg (os);
|
|
fg.put (hello, n_hello);
|
|
fg.flush ();
|
|
|
|
std::string deflated = oss.string ();
|
|
EXPECT_EQ (deflated.size () < 300000 && deflated.size () > 200000, true);
|
|
EXPECT_EQ (deflated.size (), fg.compressed ());
|
|
EXPECT_EQ (n_hello, fg.uncompressed ());
|
|
tl::InputMemoryStream ims = tl::InputMemoryStream ((const char *) deflated.c_str (), deflated.size ());
|
|
tl::InputStream is (ims);
|
|
|
|
std::string out;
|
|
tl::InflateFilter f (is);
|
|
while (! f.at_end ()) {
|
|
out += f.get (1) [0];
|
|
}
|
|
|
|
EXPECT_EQ (out, hello);
|
|
|
|
delete[] hello;
|
|
}
|
|
|