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