| // $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; |
| } |
| |