236 lines
4.9 KiB
C++
236 lines
4.9 KiB
C++
#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;
|
|
}
|