aboutsummaryrefslogtreecommitdiff
path: root/examples/test_io.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/test_io.cpp')
-rw-r--r--examples/test_io.cpp207
1 files changed, 207 insertions, 0 deletions
diff --git a/examples/test_io.cpp b/examples/test_io.cpp
new file mode 100644
index 0000000..bee1a27
--- /dev/null
+++ b/examples/test_io.cpp
@@ -0,0 +1,207 @@
+// $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;
+}
+