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