1 // $Id: test_io.cpp,v 1.6 2003/03/02 15:17:21 t1mpy Exp $
2 
3 #ifdef HAVE_CONFIG_H
4 #  include <config.h>
5 #endif
6 
7 #include <id3/readers.h>
8 #include <id3/writers.h>
9 #include <id3/io_decorators.h>
10 #include <id3/io_helpers.h>
11 #include <id3/io_strings.h>
12 #include <id3/utils.h>
13 
14 using std::cout;
15 using std::endl;
16 using std::cerr;
17 
18 using namespace dami;
19 
20 int
main(size_t argc,const char ** argv)21 main(size_t argc, const char** argv)
22 {
23   ID3D_INIT_DOUT();
24   ID3D_INIT_WARNING();
25   ID3D_INIT_NOTICE();
26 
27   ID3_IStreamReader isr(cin);
28   BString orig = io::readAllBinary(isr);
29 
30   cout << "input size:    " << orig.size() << endl;
31 
32   cout << endl;
33 
34   cout << "=== Testing Synchronization ===" << endl;
35   BString synced;
36 
37   {
38     io::BStringReader sr(orig);
39     io::UnsyncedReader ur(sr);
40 
41     synced = io::readAllBinary(ur);
42   }
43 
44   cout << "synced size:   " << synced.size() << endl;
45 
46   BString unsynced;
47 
48   {
49     io::BStringWriter sw(unsynced);
50     io::UnsyncedWriter uw(sw);
51 
52     uw.writeChars(synced.data(), synced.size());
53   }
54 
55   cout << "unsynced size: " << unsynced.size() << endl;
56 
57   BString resynced;
58 
59   {
60     io::BStringReader sr(unsynced);
61     io::UnsyncedReader ur(sr);
62 
63     resynced = io::readAllBinary(ur);
64   }
65 
66   cout << "resynced size: " << resynced.size() << endl;
67 
68   if (unsynced == orig)
69   {
70     cout << "orig == unsynced" << endl;
71   }
72   else
73   {
74     cout << "orig != unsynced" << endl;
75   }
76   if (synced == resynced)
77   {
78     cout << "synced == resynced" << endl;
79   }
80   else
81   {
82     cout << "synced != resynced" << endl;
83   }
84 
85   cout << endl;
86   cout << "=== Testing Trailing Spaces ===" << endl;
87 
88   String text;
89 
90   {
91     io::StringWriter sw(text);
92     io::writeTrailingSpaces (sw, "hello, world", 50);
93   }
94 
95   cout << "new text  = \"" << text << "\"" << endl;
96 
97   String origText;
98 
99   {
100     io::StringReader sr(text);
101     origText = io::readTrailingSpaces(sr, 100);
102   }
103 
104   cout << "orig text = \"" << origText << "\"" << endl;
105 
106   cout << endl;
107   cout << "=== Testing Binary Numbers ===" << endl;
108 
109   String number;
110 
111   {
112     io::StringWriter sw(number);
113     io::writeBENumber(sw, 1234567890, 4);
114   }
115 
116   cout << "binary number:";
117   for (size_t i = 0; i < number.size(); ++i)
118   {
119     cout << " 0x" << hex << (size_t) (0xFF & number[i]) << dec;
120   }
121   cout << endl;
122 
123   size_t val;
124 
125   {
126     io::StringReader sr(number);
127     val = io::readBENumber(sr, 4);
128   }
129 
130   cout << "orig number: " << val << endl;
131 
132   cout << endl;
133   cout << "=== Testing Compression ===" << endl;
134 
135   String compressed;
136   size_t origSize = orig.size();
137   cout << "origSize = " << origSize << endl;
138 
139 
140   {
141     io::StringWriter sw(compressed);
142     io::CompressedWriter cw(sw);
143     cw.writeChars(orig.data(), orig.size());
144     cw.flush();
145     if (origSize != cw.getOrigSize())
146     {
147       origSize = cw.getOrigSize();
148       cout << "cw.getOrigSize() = " << origSize << endl;
149     }
150   }
151 
152   cout << "compressed size = " << compressed.size() << endl;
153 
154   BString uncompressed;
155 
156   if (origSize == 0)
157   {
158     cout << "no compression" << endl;
159   }
160   else
161   {
162     io::StringReader sr(compressed);
163     io::CompressedReader cr(sr, origSize);
164 
165     uncompressed = io::readAllBinary(cr);
166     cout << "uncompressed size = " << uncompressed.size() << endl;
167   }
168 
169   if (uncompressed.size() == orig.size())
170   {
171     if (uncompressed == orig)
172     {
173       cout << "orig == uncompressed" << endl;
174     }
175     else
176     {
177       cout << "orig != uncompressed" << endl;
178     }
179   }
180 
181   String ascii;
182   ascii.reserve(8192);
183 
184   for (size_t i = 0; i < 8192; ++i)
185   {
186     ascii += 'a' + (i % 26);
187   }
188 
189   cout << endl;
190   cout << "ascii.size() = " << ascii.size() << endl;
191   String unicode = dami::convert(ascii, ID3TE_ASCII, ID3TE_UTF16BE);
192   cout << "uncicode.size() = " << unicode.size() << endl;
193   String ascii_2 = dami::convert(unicode, ID3TE_UTF16BE, ID3TE_ASCII);
194   if (ascii != ascii_2)
195   {
196     cout << "ascii != ascii_2" << endl;
197   }
198   else
199   {
200     cout << "ascii == ascii_2" << endl;
201   }
202 
203 
204 
205   return 0;
206 }
207 
208