1*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
2*ab8db090SAndroid Build Coastguard Worker #include <io.h>
3*ab8db090SAndroid Build Coastguard Worker #else
4*ab8db090SAndroid Build Coastguard Worker #include <unistd.h>
5*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
6*ab8db090SAndroid Build Coastguard Worker
7*ab8db090SAndroid Build Coastguard Worker #include <sys/types.h>
8*ab8db090SAndroid Build Coastguard Worker #include <sys/stat.h>
9*ab8db090SAndroid Build Coastguard Worker #include <fcntl.h>
10*ab8db090SAndroid Build Coastguard Worker
11*ab8db090SAndroid Build Coastguard Worker #include <sstream>
12*ab8db090SAndroid Build Coastguard Worker
13*ab8db090SAndroid Build Coastguard Worker #include <marisa/grimoire/io.h>
14*ab8db090SAndroid Build Coastguard Worker
15*ab8db090SAndroid Build Coastguard Worker #include "marisa-assert.h"
16*ab8db090SAndroid Build Coastguard Worker
17*ab8db090SAndroid Build Coastguard Worker namespace {
18*ab8db090SAndroid Build Coastguard Worker
TestFilename()19*ab8db090SAndroid Build Coastguard Worker void TestFilename() {
20*ab8db090SAndroid Build Coastguard Worker TEST_START();
21*ab8db090SAndroid Build Coastguard Worker
22*ab8db090SAndroid Build Coastguard Worker {
23*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Writer writer;
24*ab8db090SAndroid Build Coastguard Worker writer.open("io-test.dat");
25*ab8db090SAndroid Build Coastguard Worker
26*ab8db090SAndroid Build Coastguard Worker writer.write((marisa::UInt32)123);
27*ab8db090SAndroid Build Coastguard Worker writer.write((marisa::UInt32)234);
28*ab8db090SAndroid Build Coastguard Worker
29*ab8db090SAndroid Build Coastguard Worker double values[] = { 3.45, 4.56 };
30*ab8db090SAndroid Build Coastguard Worker writer.write(values, 2);
31*ab8db090SAndroid Build Coastguard Worker
32*ab8db090SAndroid Build Coastguard Worker EXCEPT(writer.write(values, MARISA_SIZE_MAX), MARISA_SIZE_ERROR);
33*ab8db090SAndroid Build Coastguard Worker }
34*ab8db090SAndroid Build Coastguard Worker
35*ab8db090SAndroid Build Coastguard Worker {
36*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Reader reader;
37*ab8db090SAndroid Build Coastguard Worker reader.open("io-test.dat");
38*ab8db090SAndroid Build Coastguard Worker
39*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value;
40*ab8db090SAndroid Build Coastguard Worker reader.read(&value);
41*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 123);
42*ab8db090SAndroid Build Coastguard Worker reader.read(&value);
43*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 234);
44*ab8db090SAndroid Build Coastguard Worker
45*ab8db090SAndroid Build Coastguard Worker double values[2];
46*ab8db090SAndroid Build Coastguard Worker reader.read(values, 2);
47*ab8db090SAndroid Build Coastguard Worker ASSERT(values[0] == 3.45);
48*ab8db090SAndroid Build Coastguard Worker ASSERT(values[1] == 4.56);
49*ab8db090SAndroid Build Coastguard Worker
50*ab8db090SAndroid Build Coastguard Worker char byte;
51*ab8db090SAndroid Build Coastguard Worker EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
52*ab8db090SAndroid Build Coastguard Worker }
53*ab8db090SAndroid Build Coastguard Worker
54*ab8db090SAndroid Build Coastguard Worker {
55*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Mapper mapper;
56*ab8db090SAndroid Build Coastguard Worker mapper.open("io-test.dat");
57*ab8db090SAndroid Build Coastguard Worker
58*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value;
59*ab8db090SAndroid Build Coastguard Worker mapper.map(&value);
60*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 123);
61*ab8db090SAndroid Build Coastguard Worker mapper.map(&value);
62*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 234);
63*ab8db090SAndroid Build Coastguard Worker
64*ab8db090SAndroid Build Coastguard Worker const double *values;
65*ab8db090SAndroid Build Coastguard Worker mapper.map(&values, 2);
66*ab8db090SAndroid Build Coastguard Worker ASSERT(values[0] == 3.45);
67*ab8db090SAndroid Build Coastguard Worker ASSERT(values[1] == 4.56);
68*ab8db090SAndroid Build Coastguard Worker
69*ab8db090SAndroid Build Coastguard Worker char byte;
70*ab8db090SAndroid Build Coastguard Worker EXCEPT(mapper.map(&byte), MARISA_IO_ERROR);
71*ab8db090SAndroid Build Coastguard Worker }
72*ab8db090SAndroid Build Coastguard Worker
73*ab8db090SAndroid Build Coastguard Worker {
74*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Writer writer;
75*ab8db090SAndroid Build Coastguard Worker writer.open("io-test.dat");
76*ab8db090SAndroid Build Coastguard Worker }
77*ab8db090SAndroid Build Coastguard Worker
78*ab8db090SAndroid Build Coastguard Worker {
79*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Reader reader;
80*ab8db090SAndroid Build Coastguard Worker reader.open("io-test.dat");
81*ab8db090SAndroid Build Coastguard Worker
82*ab8db090SAndroid Build Coastguard Worker char byte;
83*ab8db090SAndroid Build Coastguard Worker EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
84*ab8db090SAndroid Build Coastguard Worker }
85*ab8db090SAndroid Build Coastguard Worker
86*ab8db090SAndroid Build Coastguard Worker TEST_END();
87*ab8db090SAndroid Build Coastguard Worker }
88*ab8db090SAndroid Build Coastguard Worker
TestFd()89*ab8db090SAndroid Build Coastguard Worker void TestFd() {
90*ab8db090SAndroid Build Coastguard Worker TEST_START();
91*ab8db090SAndroid Build Coastguard Worker
92*ab8db090SAndroid Build Coastguard Worker {
93*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
94*ab8db090SAndroid Build Coastguard Worker int fd = -1;
95*ab8db090SAndroid Build Coastguard Worker ASSERT(::_sopen_s(&fd, "io-test.dat",
96*ab8db090SAndroid Build Coastguard Worker _O_BINARY | _O_CREAT | _O_WRONLY | _O_TRUNC,
97*ab8db090SAndroid Build Coastguard Worker _SH_DENYRW, _S_IREAD | _S_IWRITE) == 0);
98*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
99*ab8db090SAndroid Build Coastguard Worker int fd = ::creat("io-test.dat", 0644);
100*ab8db090SAndroid Build Coastguard Worker ASSERT(fd != -1);
101*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
102*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Writer writer;
103*ab8db090SAndroid Build Coastguard Worker writer.open(fd);
104*ab8db090SAndroid Build Coastguard Worker
105*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value = 234;
106*ab8db090SAndroid Build Coastguard Worker writer.write(value);
107*ab8db090SAndroid Build Coastguard Worker
108*ab8db090SAndroid Build Coastguard Worker double values[] = { 34.5, 67.8 };
109*ab8db090SAndroid Build Coastguard Worker writer.write(values, 2);
110*ab8db090SAndroid Build Coastguard Worker
111*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
112*ab8db090SAndroid Build Coastguard Worker ASSERT(::_close(fd) == 0);
113*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
114*ab8db090SAndroid Build Coastguard Worker ASSERT(::close(fd) == 0);
115*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
116*ab8db090SAndroid Build Coastguard Worker }
117*ab8db090SAndroid Build Coastguard Worker
118*ab8db090SAndroid Build Coastguard Worker {
119*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
120*ab8db090SAndroid Build Coastguard Worker int fd = -1;
121*ab8db090SAndroid Build Coastguard Worker ASSERT(::_sopen_s(&fd, "io-test.dat", _O_BINARY | _O_RDONLY,
122*ab8db090SAndroid Build Coastguard Worker _SH_DENYRW, _S_IREAD) == 0);
123*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
124*ab8db090SAndroid Build Coastguard Worker int fd = ::open("io-test.dat", O_RDONLY);
125*ab8db090SAndroid Build Coastguard Worker ASSERT(fd != -1);
126*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
127*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Reader reader;
128*ab8db090SAndroid Build Coastguard Worker reader.open(fd);
129*ab8db090SAndroid Build Coastguard Worker
130*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value;
131*ab8db090SAndroid Build Coastguard Worker reader.read(&value);
132*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 234);
133*ab8db090SAndroid Build Coastguard Worker
134*ab8db090SAndroid Build Coastguard Worker double values[2];
135*ab8db090SAndroid Build Coastguard Worker reader.read(values, 2);
136*ab8db090SAndroid Build Coastguard Worker ASSERT(values[0] == 34.5);
137*ab8db090SAndroid Build Coastguard Worker ASSERT(values[1] == 67.8);
138*ab8db090SAndroid Build Coastguard Worker
139*ab8db090SAndroid Build Coastguard Worker char byte;
140*ab8db090SAndroid Build Coastguard Worker EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
141*ab8db090SAndroid Build Coastguard Worker
142*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
143*ab8db090SAndroid Build Coastguard Worker ASSERT(::_close(fd) == 0);
144*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
145*ab8db090SAndroid Build Coastguard Worker ASSERT(::close(fd) == 0);
146*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
147*ab8db090SAndroid Build Coastguard Worker }
148*ab8db090SAndroid Build Coastguard Worker
149*ab8db090SAndroid Build Coastguard Worker TEST_END();
150*ab8db090SAndroid Build Coastguard Worker }
151*ab8db090SAndroid Build Coastguard Worker
TestFile()152*ab8db090SAndroid Build Coastguard Worker void TestFile() {
153*ab8db090SAndroid Build Coastguard Worker TEST_START();
154*ab8db090SAndroid Build Coastguard Worker
155*ab8db090SAndroid Build Coastguard Worker {
156*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
157*ab8db090SAndroid Build Coastguard Worker FILE *file = NULL;
158*ab8db090SAndroid Build Coastguard Worker ASSERT(::fopen_s(&file, "io-test.dat", "wb") == 0);
159*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
160*ab8db090SAndroid Build Coastguard Worker FILE *file = std::fopen("io-test.dat", "wb");
161*ab8db090SAndroid Build Coastguard Worker ASSERT(file != NULL);
162*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
163*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Writer writer;
164*ab8db090SAndroid Build Coastguard Worker writer.open(file);
165*ab8db090SAndroid Build Coastguard Worker
166*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value = 10;
167*ab8db090SAndroid Build Coastguard Worker writer.write(value);
168*ab8db090SAndroid Build Coastguard Worker
169*ab8db090SAndroid Build Coastguard Worker double values[2] = { 0.1, 0.2 };
170*ab8db090SAndroid Build Coastguard Worker writer.write(values, 2);
171*ab8db090SAndroid Build Coastguard Worker
172*ab8db090SAndroid Build Coastguard Worker ASSERT(std::fclose(file) == 0);
173*ab8db090SAndroid Build Coastguard Worker }
174*ab8db090SAndroid Build Coastguard Worker
175*ab8db090SAndroid Build Coastguard Worker {
176*ab8db090SAndroid Build Coastguard Worker #ifdef _MSC_VER
177*ab8db090SAndroid Build Coastguard Worker FILE *file = NULL;
178*ab8db090SAndroid Build Coastguard Worker ASSERT(::fopen_s(&file, "io-test.dat", "rb") == 0);
179*ab8db090SAndroid Build Coastguard Worker #else // _MSC_VER
180*ab8db090SAndroid Build Coastguard Worker FILE *file = std::fopen("io-test.dat", "rb");
181*ab8db090SAndroid Build Coastguard Worker ASSERT(file != NULL);
182*ab8db090SAndroid Build Coastguard Worker #endif // _MSC_VER
183*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Reader reader;
184*ab8db090SAndroid Build Coastguard Worker reader.open(file);
185*ab8db090SAndroid Build Coastguard Worker
186*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value;
187*ab8db090SAndroid Build Coastguard Worker reader.read(&value);
188*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 10);
189*ab8db090SAndroid Build Coastguard Worker
190*ab8db090SAndroid Build Coastguard Worker double values[2];
191*ab8db090SAndroid Build Coastguard Worker reader.read(values, 2);
192*ab8db090SAndroid Build Coastguard Worker ASSERT(values[0] == 0.1);
193*ab8db090SAndroid Build Coastguard Worker ASSERT(values[1] == 0.2);
194*ab8db090SAndroid Build Coastguard Worker
195*ab8db090SAndroid Build Coastguard Worker char byte;
196*ab8db090SAndroid Build Coastguard Worker EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
197*ab8db090SAndroid Build Coastguard Worker
198*ab8db090SAndroid Build Coastguard Worker ASSERT(std::fclose(file) == 0);
199*ab8db090SAndroid Build Coastguard Worker }
200*ab8db090SAndroid Build Coastguard Worker
201*ab8db090SAndroid Build Coastguard Worker TEST_END();
202*ab8db090SAndroid Build Coastguard Worker }
203*ab8db090SAndroid Build Coastguard Worker
TestStream()204*ab8db090SAndroid Build Coastguard Worker void TestStream() {
205*ab8db090SAndroid Build Coastguard Worker TEST_START();
206*ab8db090SAndroid Build Coastguard Worker
207*ab8db090SAndroid Build Coastguard Worker std::stringstream stream;
208*ab8db090SAndroid Build Coastguard Worker
209*ab8db090SAndroid Build Coastguard Worker {
210*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Writer writer;
211*ab8db090SAndroid Build Coastguard Worker writer.open(stream);
212*ab8db090SAndroid Build Coastguard Worker
213*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value = 12;
214*ab8db090SAndroid Build Coastguard Worker writer.write(value);
215*ab8db090SAndroid Build Coastguard Worker
216*ab8db090SAndroid Build Coastguard Worker double values[2] = { 3.4, 5.6 };
217*ab8db090SAndroid Build Coastguard Worker writer.write(values, 2);
218*ab8db090SAndroid Build Coastguard Worker }
219*ab8db090SAndroid Build Coastguard Worker
220*ab8db090SAndroid Build Coastguard Worker {
221*ab8db090SAndroid Build Coastguard Worker marisa::grimoire::Reader reader;
222*ab8db090SAndroid Build Coastguard Worker reader.open(stream);
223*ab8db090SAndroid Build Coastguard Worker
224*ab8db090SAndroid Build Coastguard Worker marisa::UInt32 value;
225*ab8db090SAndroid Build Coastguard Worker reader.read(&value);
226*ab8db090SAndroid Build Coastguard Worker ASSERT(value == 12);
227*ab8db090SAndroid Build Coastguard Worker
228*ab8db090SAndroid Build Coastguard Worker double values[2];
229*ab8db090SAndroid Build Coastguard Worker reader.read(values, 2);
230*ab8db090SAndroid Build Coastguard Worker ASSERT(values[0] == 3.4);
231*ab8db090SAndroid Build Coastguard Worker ASSERT(values[1] == 5.6);
232*ab8db090SAndroid Build Coastguard Worker
233*ab8db090SAndroid Build Coastguard Worker char byte;
234*ab8db090SAndroid Build Coastguard Worker EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
235*ab8db090SAndroid Build Coastguard Worker }
236*ab8db090SAndroid Build Coastguard Worker
237*ab8db090SAndroid Build Coastguard Worker TEST_END();
238*ab8db090SAndroid Build Coastguard Worker }
239*ab8db090SAndroid Build Coastguard Worker
240*ab8db090SAndroid Build Coastguard Worker } // namespace
241*ab8db090SAndroid Build Coastguard Worker
main()242*ab8db090SAndroid Build Coastguard Worker int main() try {
243*ab8db090SAndroid Build Coastguard Worker TestFilename();
244*ab8db090SAndroid Build Coastguard Worker TestFd();
245*ab8db090SAndroid Build Coastguard Worker TestFile();
246*ab8db090SAndroid Build Coastguard Worker TestStream();
247*ab8db090SAndroid Build Coastguard Worker
248*ab8db090SAndroid Build Coastguard Worker return 0;
249*ab8db090SAndroid Build Coastguard Worker } catch (const marisa::Exception &ex) {
250*ab8db090SAndroid Build Coastguard Worker std::cerr << ex.what() << std::endl;
251*ab8db090SAndroid Build Coastguard Worker throw;
252*ab8db090SAndroid Build Coastguard Worker }
253