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