libraries/spcre/libpcre/pcre/pcre_stringpiece_unittest.cc
changeset 0 7f656887cf89
equal deleted inserted replaced
-1:000000000000 0:7f656887cf89
       
     1 // Copyright 2003 and onwards Google Inc.
       
     2 // Author: Sanjay Ghemawat
       
     3 
       
     4 #ifdef HAVE_CONFIG_H
       
     5 #include "config.h"
       
     6 #endif
       
     7 
       
     8 #include <stdio.h>
       
     9 #include <map>
       
    10 #include <algorithm>    // for make_pair
       
    11 
       
    12 #include "pcrecpp.h"
       
    13 #include "pcre_stringpiece.h"
       
    14 
       
    15 // CHECK dies with a fatal error if condition is not true.  It is *not*
       
    16 // controlled by NDEBUG, so the check will be executed regardless of
       
    17 // compilation mode.  Therefore, it is safe to do things like:
       
    18 //    CHECK(fp->Write(x) == 4)
       
    19 #define CHECK(condition) do {                           \
       
    20   if (!(condition)) {                                   \
       
    21     fprintf(stderr, "%s:%d: Check failed: %s\n",        \
       
    22             __FILE__, __LINE__, #condition);            \
       
    23     exit(1);                                            \
       
    24   }                                                     \
       
    25 } while (0)
       
    26 
       
    27 using std::map;
       
    28 using std::make_pair;
       
    29 using pcrecpp::StringPiece;
       
    30 
       
    31 static void CheckSTLComparator() {
       
    32   string s1("foo");
       
    33   string s2("bar");
       
    34   string s3("baz");
       
    35 
       
    36   StringPiece p1(s1);
       
    37   StringPiece p2(s2);
       
    38   StringPiece p3(s3);
       
    39 
       
    40   typedef map<StringPiece, int> TestMap;
       
    41   TestMap map;
       
    42 
       
    43   map.insert(make_pair(p1, 0));
       
    44   map.insert(make_pair(p2, 1));
       
    45   map.insert(make_pair(p3, 2));
       
    46   CHECK(map.size() == 3);
       
    47 
       
    48   TestMap::const_iterator iter = map.begin();
       
    49   CHECK(iter->second == 1);
       
    50   ++iter;
       
    51   CHECK(iter->second == 2);
       
    52   ++iter;
       
    53   CHECK(iter->second == 0);
       
    54   ++iter;
       
    55   CHECK(iter == map.end());
       
    56 
       
    57   TestMap::iterator new_iter = map.find("zot");
       
    58   CHECK(new_iter == map.end());
       
    59 
       
    60   new_iter = map.find("bar");
       
    61   CHECK(new_iter != map.end());
       
    62 
       
    63   map.erase(new_iter);
       
    64   CHECK(map.size() == 2);
       
    65 
       
    66   iter = map.begin();
       
    67   CHECK(iter->second == 2);
       
    68   ++iter;
       
    69   CHECK(iter->second == 0);
       
    70   ++iter;
       
    71   CHECK(iter == map.end());
       
    72 }
       
    73 
       
    74 static void CheckComparisonOperators() {
       
    75 #define CMP_Y(op, x, y)                                         \
       
    76   CHECK( (StringPiece((x)) op StringPiece((y))));               \
       
    77   CHECK( (StringPiece((x)).compare(StringPiece((y))) op 0))
       
    78 
       
    79 #define CMP_N(op, x, y)                                         \
       
    80   CHECK(!(StringPiece((x)) op StringPiece((y))));               \
       
    81   CHECK(!(StringPiece((x)).compare(StringPiece((y))) op 0))
       
    82 
       
    83   CMP_Y(==, "",   "");
       
    84   CMP_Y(==, "a",  "a");
       
    85   CMP_Y(==, "aa", "aa");
       
    86   CMP_N(==, "a",  "");
       
    87   CMP_N(==, "",   "a");
       
    88   CMP_N(==, "a",  "b");
       
    89   CMP_N(==, "a",  "aa");
       
    90   CMP_N(==, "aa", "a");
       
    91 
       
    92   CMP_N(!=, "",   "");
       
    93   CMP_N(!=, "a",  "a");
       
    94   CMP_N(!=, "aa", "aa");
       
    95   CMP_Y(!=, "a",  "");
       
    96   CMP_Y(!=, "",   "a");
       
    97   CMP_Y(!=, "a",  "b");
       
    98   CMP_Y(!=, "a",  "aa");
       
    99   CMP_Y(!=, "aa", "a");
       
   100 
       
   101   CMP_Y(<, "a",  "b");
       
   102   CMP_Y(<, "a",  "aa");
       
   103   CMP_Y(<, "aa", "b");
       
   104   CMP_Y(<, "aa", "bb");
       
   105   CMP_N(<, "a",  "a");
       
   106   CMP_N(<, "b",  "a");
       
   107   CMP_N(<, "aa", "a");
       
   108   CMP_N(<, "b",  "aa");
       
   109   CMP_N(<, "bb", "aa");
       
   110 
       
   111   CMP_Y(<=, "a",  "a");
       
   112   CMP_Y(<=, "a",  "b");
       
   113   CMP_Y(<=, "a",  "aa");
       
   114   CMP_Y(<=, "aa", "b");
       
   115   CMP_Y(<=, "aa", "bb");
       
   116   CMP_N(<=, "b",  "a");
       
   117   CMP_N(<=, "aa", "a");
       
   118   CMP_N(<=, "b",  "aa");
       
   119   CMP_N(<=, "bb", "aa");
       
   120 
       
   121   CMP_N(>=, "a",  "b");
       
   122   CMP_N(>=, "a",  "aa");
       
   123   CMP_N(>=, "aa", "b");
       
   124   CMP_N(>=, "aa", "bb");
       
   125   CMP_Y(>=, "a",  "a");
       
   126   CMP_Y(>=, "b",  "a");
       
   127   CMP_Y(>=, "aa", "a");
       
   128   CMP_Y(>=, "b",  "aa");
       
   129   CMP_Y(>=, "bb", "aa");
       
   130 
       
   131   CMP_N(>, "a",  "a");
       
   132   CMP_N(>, "a",  "b");
       
   133   CMP_N(>, "a",  "aa");
       
   134   CMP_N(>, "aa", "b");
       
   135   CMP_N(>, "aa", "bb");
       
   136   CMP_Y(>, "b",  "a");
       
   137   CMP_Y(>, "aa", "a");
       
   138   CMP_Y(>, "b",  "aa");
       
   139   CMP_Y(>, "bb", "aa");
       
   140 
       
   141 #undef CMP_Y
       
   142 #undef CMP_N
       
   143 }
       
   144 
       
   145 int main(int argc, char** argv) {
       
   146   CheckComparisonOperators();
       
   147   CheckSTLComparator();
       
   148 
       
   149   printf("OK\n");
       
   150   return 0;
       
   151 }