Annotation of embedaddon/pcre/pcre_stringpiece_unittest.cc, revision 1.1.1.1

1.1       misho       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 pcrecpp::StringPiece;
                     28: 
                     29: static void CheckSTLComparator() {
                     30:   string s1("foo");
                     31:   string s2("bar");
                     32:   string s3("baz");
                     33: 
                     34:   StringPiece p1(s1);
                     35:   StringPiece p2(s2);
                     36:   StringPiece p3(s3);
                     37: 
                     38:   typedef std::map<StringPiece, int> TestMap;
                     39:   TestMap map;
                     40: 
                     41:   map.insert(std::make_pair(p1, 0));
                     42:   map.insert(std::make_pair(p2, 1));
                     43:   map.insert(std::make_pair(p3, 2));
                     44: 
                     45:   CHECK(map.size() == 3);
                     46: 
                     47:   TestMap::const_iterator iter = map.begin();
                     48:   CHECK(iter->second == 1);
                     49:   ++iter;
                     50:   CHECK(iter->second == 2);
                     51:   ++iter;
                     52:   CHECK(iter->second == 0);
                     53:   ++iter;
                     54:   CHECK(iter == map.end());
                     55: 
                     56:   TestMap::iterator new_iter = map.find("zot");
                     57:   CHECK(new_iter == map.end());
                     58: 
                     59:   new_iter = map.find("bar");
                     60:   CHECK(new_iter != map.end());
                     61: 
                     62:   map.erase(new_iter);
                     63:   CHECK(map.size() == 2);
                     64: 
                     65:   iter = map.begin();
                     66:   CHECK(iter->second == 2);
                     67:   ++iter;
                     68:   CHECK(iter->second == 0);
                     69:   ++iter;
                     70:   CHECK(iter == map.end());
                     71: }
                     72: 
                     73: static void CheckComparisonOperators() {
                     74: #define CMP_Y(op, x, y)                                         \
                     75:   CHECK( (StringPiece((x)) op StringPiece((y))));               \
                     76:   CHECK( (StringPiece((x)).compare(StringPiece((y))) op 0))
                     77: 
                     78: #define CMP_N(op, x, y)                                         \
                     79:   CHECK(!(StringPiece((x)) op StringPiece((y))));               \
                     80:   CHECK(!(StringPiece((x)).compare(StringPiece((y))) op 0))
                     81: 
                     82:   CMP_Y(==, "",   "");
                     83:   CMP_Y(==, "a",  "a");
                     84:   CMP_Y(==, "aa", "aa");
                     85:   CMP_N(==, "a",  "");
                     86:   CMP_N(==, "",   "a");
                     87:   CMP_N(==, "a",  "b");
                     88:   CMP_N(==, "a",  "aa");
                     89:   CMP_N(==, "aa", "a");
                     90: 
                     91:   CMP_N(!=, "",   "");
                     92:   CMP_N(!=, "a",  "a");
                     93:   CMP_N(!=, "aa", "aa");
                     94:   CMP_Y(!=, "a",  "");
                     95:   CMP_Y(!=, "",   "a");
                     96:   CMP_Y(!=, "a",  "b");
                     97:   CMP_Y(!=, "a",  "aa");
                     98:   CMP_Y(!=, "aa", "a");
                     99: 
                    100:   CMP_Y(<, "a",  "b");
                    101:   CMP_Y(<, "a",  "aa");
                    102:   CMP_Y(<, "aa", "b");
                    103:   CMP_Y(<, "aa", "bb");
                    104:   CMP_N(<, "a",  "a");
                    105:   CMP_N(<, "b",  "a");
                    106:   CMP_N(<, "aa", "a");
                    107:   CMP_N(<, "b",  "aa");
                    108:   CMP_N(<, "bb", "aa");
                    109: 
                    110:   CMP_Y(<=, "a",  "a");
                    111:   CMP_Y(<=, "a",  "b");
                    112:   CMP_Y(<=, "a",  "aa");
                    113:   CMP_Y(<=, "aa", "b");
                    114:   CMP_Y(<=, "aa", "bb");
                    115:   CMP_N(<=, "b",  "a");
                    116:   CMP_N(<=, "aa", "a");
                    117:   CMP_N(<=, "b",  "aa");
                    118:   CMP_N(<=, "bb", "aa");
                    119: 
                    120:   CMP_N(>=, "a",  "b");
                    121:   CMP_N(>=, "a",  "aa");
                    122:   CMP_N(>=, "aa", "b");
                    123:   CMP_N(>=, "aa", "bb");
                    124:   CMP_Y(>=, "a",  "a");
                    125:   CMP_Y(>=, "b",  "a");
                    126:   CMP_Y(>=, "aa", "a");
                    127:   CMP_Y(>=, "b",  "aa");
                    128:   CMP_Y(>=, "bb", "aa");
                    129: 
                    130:   CMP_N(>, "a",  "a");
                    131:   CMP_N(>, "a",  "b");
                    132:   CMP_N(>, "a",  "aa");
                    133:   CMP_N(>, "aa", "b");
                    134:   CMP_N(>, "aa", "bb");
                    135:   CMP_Y(>, "b",  "a");
                    136:   CMP_Y(>, "aa", "a");
                    137:   CMP_Y(>, "b",  "aa");
                    138:   CMP_Y(>, "bb", "aa");
                    139: 
                    140: #undef CMP_Y
                    141: #undef CMP_N
                    142: }
                    143: 
                    144: int main(int argc, char** argv) {
                    145:   CheckComparisonOperators();
                    146:   CheckSTLComparator();
                    147: 
                    148:   printf("OK\n");
                    149:   return 0;
                    150: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>