Blame tests/io-test.cc

Packit de3218
#ifdef _MSC_VER
Packit de3218
#include <io.h>
Packit de3218
#else
Packit de3218
#include <unistd.h>
Packit de3218
#endif  // _MSC_VER
Packit de3218
Packit de3218
#include <sys/types.h>
Packit de3218
#include <sys/stat.h>
Packit de3218
#include <fcntl.h>
Packit de3218
Packit de3218
#include <sstream>
Packit de3218
Packit de3218
#include <marisa/grimoire/io.h>
Packit de3218
Packit de3218
#include "marisa-assert.h"
Packit de3218
Packit de3218
namespace {
Packit de3218
Packit de3218
void TestFilename() {
Packit de3218
  TEST_START();
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Writer writer;
Packit de3218
    writer.open("io-test.dat");
Packit de3218
Packit de3218
    writer.write((marisa::UInt32)123);
Packit de3218
    writer.write((marisa::UInt32)234);
Packit de3218
Packit de3218
    double values[] = { 3.45, 4.56 };
Packit de3218
    writer.write(values, 2);
Packit de3218
Packit de3218
    EXCEPT(writer.write(values, MARISA_SIZE_MAX), MARISA_SIZE_ERROR);
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Reader reader;
Packit de3218
    reader.open("io-test.dat");
Packit de3218
Packit de3218
    marisa::UInt32 value;
Packit de3218
    reader.read(&value);
Packit de3218
    ASSERT(value == 123);
Packit de3218
    reader.read(&value);
Packit de3218
    ASSERT(value == 234);
Packit de3218
Packit de3218
    double values[2];
Packit de3218
    reader.read(values, 2);
Packit de3218
    ASSERT(values[0] == 3.45);
Packit de3218
    ASSERT(values[1] == 4.56);
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Mapper mapper;
Packit de3218
    mapper.open("io-test.dat");
Packit de3218
Packit de3218
    marisa::UInt32 value;
Packit de3218
    mapper.map(&value);
Packit de3218
    ASSERT(value == 123);
Packit de3218
    mapper.map(&value);
Packit de3218
    ASSERT(value == 234);
Packit de3218
Packit de3218
    const double *values;
Packit de3218
    mapper.map(&values, 2);
Packit de3218
    ASSERT(values[0] == 3.45);
Packit de3218
    ASSERT(values[1] == 4.56);
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(mapper.map(&byte), MARISA_IO_ERROR);
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Writer writer;
Packit de3218
    writer.open("io-test.dat");
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Reader reader;
Packit de3218
    reader.open("io-test.dat");
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
Packit de3218
  }
Packit de3218
Packit de3218
  TEST_END();
Packit de3218
}
Packit de3218
Packit de3218
void TestFd() {
Packit de3218
  TEST_START();
Packit de3218
Packit de3218
  {
Packit de3218
#ifdef _MSC_VER
Packit de3218
    int fd = -1;
Packit de3218
    ASSERT(::_sopen_s(&fd, "io-test.dat",
Packit de3218
        _O_BINARY | _O_CREAT | _O_WRONLY | _O_TRUNC,
Packit de3218
        _SH_DENYRW, _S_IREAD | _S_IWRITE) == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    int fd = ::creat("io-test.dat", 0644);
Packit de3218
    ASSERT(fd != -1);
Packit de3218
#endif  // _MSC_VER
Packit de3218
    marisa::grimoire::Writer writer;
Packit de3218
    writer.open(fd);
Packit de3218
Packit de3218
    marisa::UInt32 value = 234;
Packit de3218
    writer.write(value);
Packit de3218
Packit de3218
    double values[] = { 34.5, 67.8 };
Packit de3218
    writer.write(values, 2);
Packit de3218
Packit de3218
#ifdef _MSC_VER
Packit de3218
    ASSERT(::_close(fd) == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    ASSERT(::close(fd) == 0);
Packit de3218
#endif  // _MSC_VER
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
#ifdef _MSC_VER
Packit de3218
    int fd = -1;
Packit de3218
    ASSERT(::_sopen_s(&fd, "io-test.dat", _O_BINARY | _O_RDONLY,
Packit de3218
        _SH_DENYRW, _S_IREAD) == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    int fd = ::open("io-test.dat", O_RDONLY);
Packit de3218
    ASSERT(fd != -1);
Packit de3218
#endif  // _MSC_VER
Packit de3218
    marisa::grimoire::Reader reader;
Packit de3218
    reader.open(fd);
Packit de3218
Packit de3218
    marisa::UInt32 value;
Packit de3218
    reader.read(&value);
Packit de3218
    ASSERT(value == 234);
Packit de3218
Packit de3218
    double values[2];
Packit de3218
    reader.read(values, 2);
Packit de3218
    ASSERT(values[0] == 34.5);
Packit de3218
    ASSERT(values[1] == 67.8);
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
Packit de3218
Packit de3218
#ifdef _MSC_VER
Packit de3218
    ASSERT(::_close(fd) == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    ASSERT(::close(fd) == 0);
Packit de3218
#endif  // _MSC_VER
Packit de3218
  }
Packit de3218
Packit de3218
  TEST_END();
Packit de3218
}
Packit de3218
Packit de3218
void TestFile() {
Packit de3218
  TEST_START();
Packit de3218
Packit de3218
  {
Packit de3218
#ifdef _MSC_VER
Packit de3218
    FILE *file = NULL;
Packit de3218
    ASSERT(::fopen_s(&file, "io-test.dat", "wb") == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    FILE *file = std::fopen("io-test.dat", "wb");
Packit de3218
    ASSERT(file != NULL);
Packit de3218
#endif  // _MSC_VER
Packit de3218
    marisa::grimoire::Writer writer;
Packit de3218
    writer.open(file);
Packit de3218
Packit de3218
    marisa::UInt32 value = 10;
Packit de3218
    writer.write(value);
Packit de3218
Packit de3218
    double values[2] = { 0.1, 0.2 };
Packit de3218
    writer.write(values, 2);
Packit de3218
Packit de3218
    ASSERT(std::fclose(file) == 0);
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
#ifdef _MSC_VER
Packit de3218
    FILE *file = NULL;
Packit de3218
    ASSERT(::fopen_s(&file, "io-test.dat", "rb") == 0);
Packit de3218
#else  // _MSC_VER
Packit de3218
    FILE *file = std::fopen("io-test.dat", "rb");
Packit de3218
    ASSERT(file != NULL);
Packit de3218
#endif  // _MSC_VER
Packit de3218
    marisa::grimoire::Reader reader;
Packit de3218
    reader.open(file);
Packit de3218
Packit de3218
    marisa::UInt32 value;
Packit de3218
    reader.read(&value);
Packit de3218
    ASSERT(value == 10);
Packit de3218
Packit de3218
    double values[2];
Packit de3218
    reader.read(values, 2);
Packit de3218
    ASSERT(values[0] == 0.1);
Packit de3218
    ASSERT(values[1] == 0.2);
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
Packit de3218
Packit de3218
    ASSERT(std::fclose(file) == 0);
Packit de3218
  }
Packit de3218
Packit de3218
  TEST_END();
Packit de3218
}
Packit de3218
Packit de3218
void TestStream() {
Packit de3218
  TEST_START();
Packit de3218
Packit de3218
  std::stringstream stream;
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Writer writer;
Packit de3218
    writer.open(stream);
Packit de3218
Packit de3218
    marisa::UInt32 value = 12;
Packit de3218
    writer.write(value);
Packit de3218
Packit de3218
    double values[2] = { 3.4, 5.6 };
Packit de3218
    writer.write(values, 2);
Packit de3218
  }
Packit de3218
Packit de3218
  {
Packit de3218
    marisa::grimoire::Reader reader;
Packit de3218
    reader.open(stream);
Packit de3218
Packit de3218
    marisa::UInt32 value;
Packit de3218
    reader.read(&value);
Packit de3218
    ASSERT(value == 12);
Packit de3218
Packit de3218
    double values[2];
Packit de3218
    reader.read(values, 2);
Packit de3218
    ASSERT(values[0] == 3.4);
Packit de3218
    ASSERT(values[1] == 5.6);
Packit de3218
Packit de3218
    char byte;
Packit de3218
    EXCEPT(reader.read(&byte), MARISA_IO_ERROR);
Packit de3218
  }
Packit de3218
Packit de3218
  TEST_END();
Packit de3218
}
Packit de3218
Packit de3218
}  // namespace
Packit de3218
Packit de3218
int main() try {
Packit de3218
  TestFilename();
Packit de3218
  TestFd();
Packit de3218
  TestFile();
Packit de3218
  TestStream();
Packit de3218
Packit de3218
  return 0;
Packit de3218
} catch (const marisa::Exception &ex) {
Packit de3218
  std::cerr << ex.what() << std::endl;
Packit de3218
  throw;
Packit de3218
}