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