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 17namespace { 18 19void 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 96void 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 151void 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 195void 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 229int main() { 230 TestFilename(); 231 TestFd(); 232 TestFile(); 233 TestStream(); 234 235 return 0; 236} 237