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