blob: bee1a270d88ef305a21e8781c27b816e0f00a368 [file] [log] [blame]
// $Id: test_io.cpp,v 1.6 2003/03/02 15:17:21 t1mpy Exp $
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <id3/readers.h>
#include <id3/writers.h>
#include <id3/io_decorators.h>
#include <id3/io_helpers.h>
#include <id3/io_strings.h>
#include <id3/utils.h>
using std::cout;
using std::endl;
using std::cerr;
using namespace dami;
int
main(size_t argc, const char** argv)
{
ID3D_INIT_DOUT();
ID3D_INIT_WARNING();
ID3D_INIT_NOTICE();
ID3_IStreamReader isr(cin);
BString orig = io::readAllBinary(isr);
cout << "input size: " << orig.size() << endl;
cout << endl;
cout << "=== Testing Synchronization ===" << endl;
BString synced;
{
io::BStringReader sr(orig);
io::UnsyncedReader ur(sr);
synced = io::readAllBinary(ur);
}
cout << "synced size: " << synced.size() << endl;
BString unsynced;
{
io::BStringWriter sw(unsynced);
io::UnsyncedWriter uw(sw);
uw.writeChars(synced.data(), synced.size());
}
cout << "unsynced size: " << unsynced.size() << endl;
BString resynced;
{
io::BStringReader sr(unsynced);
io::UnsyncedReader ur(sr);
resynced = io::readAllBinary(ur);
}
cout << "resynced size: " << resynced.size() << endl;
if (unsynced == orig)
{
cout << "orig == unsynced" << endl;
}
else
{
cout << "orig != unsynced" << endl;
}
if (synced == resynced)
{
cout << "synced == resynced" << endl;
}
else
{
cout << "synced != resynced" << endl;
}
cout << endl;
cout << "=== Testing Trailing Spaces ===" << endl;
String text;
{
io::StringWriter sw(text);
io::writeTrailingSpaces (sw, "hello, world", 50);
}
cout << "new text = \"" << text << "\"" << endl;
String origText;
{
io::StringReader sr(text);
origText = io::readTrailingSpaces(sr, 100);
}
cout << "orig text = \"" << origText << "\"" << endl;
cout << endl;
cout << "=== Testing Binary Numbers ===" << endl;
String number;
{
io::StringWriter sw(number);
io::writeBENumber(sw, 1234567890, 4);
}
cout << "binary number:";
for (size_t i = 0; i < number.size(); ++i)
{
cout << " 0x" << hex << (size_t) (0xFF & number[i]) << dec;
}
cout << endl;
size_t val;
{
io::StringReader sr(number);
val = io::readBENumber(sr, 4);
}
cout << "orig number: " << val << endl;
cout << endl;
cout << "=== Testing Compression ===" << endl;
String compressed;
size_t origSize = orig.size();
cout << "origSize = " << origSize << endl;
{
io::StringWriter sw(compressed);
io::CompressedWriter cw(sw);
cw.writeChars(orig.data(), orig.size());
cw.flush();
if (origSize != cw.getOrigSize())
{
origSize = cw.getOrigSize();
cout << "cw.getOrigSize() = " << origSize << endl;
}
}
cout << "compressed size = " << compressed.size() << endl;
BString uncompressed;
if (origSize == 0)
{
cout << "no compression" << endl;
}
else
{
io::StringReader sr(compressed);
io::CompressedReader cr(sr, origSize);
uncompressed = io::readAllBinary(cr);
cout << "uncompressed size = " << uncompressed.size() << endl;
}
if (uncompressed.size() == orig.size())
{
if (uncompressed == orig)
{
cout << "orig == uncompressed" << endl;
}
else
{
cout << "orig != uncompressed" << endl;
}
}
String ascii;
ascii.reserve(8192);
for (size_t i = 0; i < 8192; ++i)
{
ascii += 'a' + (i % 26);
}
cout << endl;
cout << "ascii.size() = " << ascii.size() << endl;
String unicode = dami::convert(ascii, ID3TE_ASCII, ID3TE_UTF16BE);
cout << "uncicode.size() = " << unicode.size() << endl;
String ascii_2 = dami::convert(unicode, ID3TE_UTF16BE, ID3TE_ASCII);
if (ascii != ascii_2)
{
cout << "ascii != ascii_2" << endl;
}
else
{
cout << "ascii == ascii_2" << endl;
}
return 0;
}