| #ifdef _MSC_VER |
| #include <io.h> |
| #else |
| #include <unistd.h> |
| #endif // _MSC_VER |
| |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <fcntl.h> |
| |
| #include <fstream> |
| |
| #include <marisa/io.h> |
| |
| #include "assert.h" |
| |
| namespace { |
| |
| void TestFilename() { |
| TEST_START(); |
| |
| { |
| marisa::Writer writer; |
| writer.open("io-test.dat"); |
| marisa::UInt32 value = 123; |
| writer.write(value); |
| writer.write(value); |
| double values[] = { 345, 456 }; |
| writer.write(values, 2); |
| EXCEPT(writer.write(values, 1U << 30), MARISA_SIZE_ERROR); |
| } |
| |
| { |
| marisa::Writer writer; |
| writer.open("io-test.dat", false, 4, SEEK_SET); |
| marisa::UInt32 value = 234; |
| writer.write(value); |
| } |
| |
| { |
| marisa::Writer writer; |
| writer.open("io-test.dat", false, 0, SEEK_END); |
| double value = 567; |
| writer.write(value); |
| } |
| |
| { |
| marisa::Reader reader; |
| reader.open("io-test.dat"); |
| marisa::UInt32 value; |
| reader.read(&value); |
| ASSERT(value == 123); |
| reader.read(&value); |
| ASSERT(value == 234); |
| double values[3]; |
| reader.read(values, 3); |
| ASSERT(values[0] == 345); |
| ASSERT(values[1] == 456); |
| ASSERT(values[2] == 567); |
| char byte; |
| EXCEPT(reader.read(&byte), MARISA_IO_ERROR); |
| } |
| |
| { |
| marisa::Mapper mapper; |
| mapper.open("io-test.dat"); |
| marisa::UInt32 value; |
| mapper.map(&value); |
| ASSERT(value == 123); |
| mapper.map(&value); |
| ASSERT(value == 234); |
| const double *values; |
| mapper.map(&values, 3); |
| ASSERT(values[0] == 345); |
| ASSERT(values[1] == 456); |
| ASSERT(values[2] == 567); |
| char byte; |
| EXCEPT(mapper.map(&byte), MARISA_IO_ERROR); |
| } |
| |
| { |
| marisa::Writer writer; |
| writer.open("io-test.dat"); |
| } |
| |
| { |
| marisa::Reader reader; |
| reader.open("io-test.dat"); |
| char byte; |
| EXCEPT(reader.read(&byte), MARISA_IO_ERROR); |
| } |
| |
| TEST_END(); |
| } |
| |
| void TestFd() { |
| TEST_START(); |
| |
| { |
| #ifdef _MSC_VER |
| int fd = -1; |
| ASSERT(::_sopen_s(&fd, "io-test.dat", |
| _O_BINARY | _O_CREAT | _O_WRONLY | _O_TRUNC, |
| _SH_DENYRW, _S_IREAD | _S_IWRITE) == 0); |
| #else // _MSC_VER |
| int fd = ::creat("io-test.dat", 0644); |
| ASSERT(fd != -1); |
| #endif // _MSC_VER |
| marisa::Writer writer(fd); |
| marisa::UInt32 value = 345; |
| writer.write(value); |
| double values[] = { 456, 567, 678 }; |
| writer.write(values, 3); |
| #ifdef _MSC_VER |
| ASSERT(::_close(fd) == 0); |
| #else // _MSC_VER |
| ASSERT(::close(fd) == 0); |
| #endif // _MSC_VER |
| } |
| |
| { |
| #ifdef _MSC_VER |
| int fd = -1; |
| ASSERT(::_sopen_s(&fd, "io-test.dat", _O_BINARY | _O_RDONLY, |
| _SH_DENYRW, _S_IREAD) == 0); |
| #else // _MSC_VER |
| int fd = ::open("io-test.dat", O_RDONLY); |
| ASSERT(fd != -1); |
| #endif // _MSC_VER |
| marisa::Reader reader(fd); |
| marisa::UInt32 value; |
| reader.read(&value); |
| ASSERT(value == 345); |
| double values[3]; |
| reader.read(values, 3); |
| ASSERT(values[0] == 456); |
| ASSERT(values[1] == 567); |
| ASSERT(values[2] == 678); |
| char byte; |
| EXCEPT(reader.read(&byte), MARISA_IO_ERROR); |
| #ifdef _MSC_VER |
| ASSERT(::_close(fd) == 0); |
| #else // _MSC_VER |
| ASSERT(::close(fd) == 0); |
| #endif // _MSC_VER |
| } |
| |
| TEST_END(); |
| } |
| |
| void TestFile() { |
| TEST_START(); |
| |
| { |
| #ifdef _MSC_VER |
| FILE *file = NULL; |
| ASSERT(::fopen_s(&file, "io-test.dat", "wb") == 0); |
| #else // _MSC_VER |
| FILE *file = std::fopen("io-test.dat", "wb"); |
| ASSERT(file != NULL); |
| #endif // _MSC_VER |
| marisa::Writer writer(file); |
| marisa::UInt32 value = 345; |
| writer.write(value); |
| double values[3] = { 456, 567, 678 }; |
| writer.write(values, 3); |
| ASSERT(std::fclose(file) == 0); |
| } |
| |
| { |
| #ifdef _MSC_VER |
| FILE *file = NULL; |
| ASSERT(::fopen_s(&file, "io-test.dat", "rb") == 0); |
| #else // _MSC_VER |
| FILE *file = std::fopen("io-test.dat", "rb"); |
| ASSERT(file != NULL); |
| #endif // _MSC_VER |
| marisa::Reader reader(file); |
| marisa::UInt32 value; |
| reader.read(&value); |
| ASSERT(value == 345); |
| double values[3]; |
| reader.read(values, 3); |
| ASSERT(values[0] == 456); |
| ASSERT(values[1] == 567); |
| ASSERT(values[2] == 678); |
| char byte; |
| EXCEPT(reader.read(&byte), MARISA_IO_ERROR); |
| ASSERT(std::fclose(file) == 0); |
| } |
| |
| TEST_END(); |
| } |
| |
| void TestStream() { |
| TEST_START(); |
| |
| { |
| std::ofstream file("io-test.dat", std::ios::binary); |
| ASSERT(file.is_open()); |
| marisa::Writer writer(&file); |
| marisa::UInt32 value = 345; |
| writer.write(value); |
| double values[3] = { 456, 567, 678 }; |
| writer.write(values, 3); |
| } |
| |
| { |
| std::ifstream file("io-test.dat", std::ios::binary); |
| ASSERT(file.is_open()); |
| marisa::Reader reader(&file); |
| marisa::UInt32 value; |
| reader.read(&value); |
| ASSERT(value == 345); |
| double values[3]; |
| reader.read(values, 3); |
| ASSERT(values[0] == 456); |
| ASSERT(values[1] == 567); |
| ASSERT(values[2] == 678); |
| char byte; |
| EXCEPT(reader.read(&byte), MARISA_IO_ERROR); |
| } |
| |
| TEST_END(); |
| } |
| |
| } // namespace |
| |
| int main() { |
| TestFilename(); |
| TestFd(); |
| TestFile(); |
| TestStream(); |
| |
| return 0; |
| } |