• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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