Home | History | Annotate | Download | only in tests
      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