Blame pcre_stringpiece_unittest.cc

Packit 78a954
// Copyright 2003 and onwards Google Inc.
Packit 78a954
// Author: Sanjay Ghemawat
Packit 78a954
Packit 78a954
#ifdef HAVE_CONFIG_H
Packit 78a954
#include "config.h"
Packit 78a954
#endif
Packit 78a954
Packit 78a954
#include <stdio.h>
Packit 78a954
#include <map>
Packit 78a954
#include <algorithm>    // for make_pair
Packit 78a954
Packit 78a954
#include "pcrecpp.h"
Packit 78a954
#include "pcre_stringpiece.h"
Packit 78a954
Packit 78a954
// CHECK dies with a fatal error if condition is not true.  It is *not*
Packit 78a954
// controlled by NDEBUG, so the check will be executed regardless of
Packit 78a954
// compilation mode.  Therefore, it is safe to do things like:
Packit 78a954
//    CHECK(fp->Write(x) == 4)
Packit 78a954
#define CHECK(condition) do {                           \
Packit 78a954
  if (!(condition)) {                                   \
Packit 78a954
    fprintf(stderr, "%s:%d: Check failed: %s\n",        \
Packit 78a954
            __FILE__, __LINE__, #condition);            \
Packit 78a954
    exit(1);                                            \
Packit 78a954
  }                                                     \
Packit 78a954
} while (0)
Packit 78a954
Packit 78a954
using pcrecpp::StringPiece;
Packit 78a954
Packit 78a954
static void CheckSTLComparator() {
Packit 78a954
  string s1("foo");
Packit 78a954
  string s2("bar");
Packit 78a954
  string s3("baz");
Packit 78a954
Packit 78a954
  StringPiece p1(s1);
Packit 78a954
  StringPiece p2(s2);
Packit 78a954
  StringPiece p3(s3);
Packit 78a954
Packit 78a954
  typedef std::map<StringPiece, int> TestMap;
Packit 78a954
  TestMap map;
Packit 78a954
Packit 78a954
  map.insert(std::make_pair(p1, 0));
Packit 78a954
  map.insert(std::make_pair(p2, 1));
Packit 78a954
  map.insert(std::make_pair(p3, 2));
Packit 78a954
Packit 78a954
  CHECK(map.size() == 3);
Packit 78a954
Packit 78a954
  TestMap::const_iterator iter = map.begin();
Packit 78a954
  CHECK(iter->second == 1);
Packit 78a954
  ++iter;
Packit 78a954
  CHECK(iter->second == 2);
Packit 78a954
  ++iter;
Packit 78a954
  CHECK(iter->second == 0);
Packit 78a954
  ++iter;
Packit 78a954
  CHECK(iter == map.end());
Packit 78a954
Packit 78a954
  TestMap::iterator new_iter = map.find("zot");
Packit 78a954
  CHECK(new_iter == map.end());
Packit 78a954
Packit 78a954
  new_iter = map.find("bar");
Packit 78a954
  CHECK(new_iter != map.end());
Packit 78a954
Packit 78a954
  map.erase(new_iter);
Packit 78a954
  CHECK(map.size() == 2);
Packit 78a954
Packit 78a954
  iter = map.begin();
Packit 78a954
  CHECK(iter->second == 2);
Packit 78a954
  ++iter;
Packit 78a954
  CHECK(iter->second == 0);
Packit 78a954
  ++iter;
Packit 78a954
  CHECK(iter == map.end());
Packit 78a954
}
Packit 78a954
Packit 78a954
static void CheckComparisonOperators() {
Packit 78a954
#define CMP_Y(op, x, y)                                         \
Packit 78a954
  CHECK( (StringPiece((x)) op StringPiece((y))));               \
Packit 78a954
  CHECK( (StringPiece((x)).compare(StringPiece((y))) op 0))
Packit 78a954
Packit 78a954
#define CMP_N(op, x, y)                                         \
Packit 78a954
  CHECK(!(StringPiece((x)) op StringPiece((y))));               \
Packit 78a954
  CHECK(!(StringPiece((x)).compare(StringPiece((y))) op 0))
Packit 78a954
Packit 78a954
  CMP_Y(==, "",   "");
Packit 78a954
  CMP_Y(==, "a",  "a");
Packit 78a954
  CMP_Y(==, "aa", "aa");
Packit 78a954
  CMP_N(==, "a",  "");
Packit 78a954
  CMP_N(==, "",   "a");
Packit 78a954
  CMP_N(==, "a",  "b");
Packit 78a954
  CMP_N(==, "a",  "aa");
Packit 78a954
  CMP_N(==, "aa", "a");
Packit 78a954
Packit 78a954
  CMP_N(!=, "",   "");
Packit 78a954
  CMP_N(!=, "a",  "a");
Packit 78a954
  CMP_N(!=, "aa", "aa");
Packit 78a954
  CMP_Y(!=, "a",  "");
Packit 78a954
  CMP_Y(!=, "",   "a");
Packit 78a954
  CMP_Y(!=, "a",  "b");
Packit 78a954
  CMP_Y(!=, "a",  "aa");
Packit 78a954
  CMP_Y(!=, "aa", "a");
Packit 78a954
Packit 78a954
  CMP_Y(<, "a",  "b");
Packit 78a954
  CMP_Y(<, "a",  "aa");
Packit 78a954
  CMP_Y(<, "aa", "b");
Packit 78a954
  CMP_Y(<, "aa", "bb");
Packit 78a954
  CMP_N(<, "a",  "a");
Packit 78a954
  CMP_N(<, "b",  "a");
Packit 78a954
  CMP_N(<, "aa", "a");
Packit 78a954
  CMP_N(<, "b",  "aa");
Packit 78a954
  CMP_N(<, "bb", "aa");
Packit 78a954
Packit 78a954
  CMP_Y(<=, "a",  "a");
Packit 78a954
  CMP_Y(<=, "a",  "b");
Packit 78a954
  CMP_Y(<=, "a",  "aa");
Packit 78a954
  CMP_Y(<=, "aa", "b");
Packit 78a954
  CMP_Y(<=, "aa", "bb");
Packit 78a954
  CMP_N(<=, "b",  "a");
Packit 78a954
  CMP_N(<=, "aa", "a");
Packit 78a954
  CMP_N(<=, "b",  "aa");
Packit 78a954
  CMP_N(<=, "bb", "aa");
Packit 78a954
Packit 78a954
  CMP_N(>=, "a",  "b");
Packit 78a954
  CMP_N(>=, "a",  "aa");
Packit 78a954
  CMP_N(>=, "aa", "b");
Packit 78a954
  CMP_N(>=, "aa", "bb");
Packit 78a954
  CMP_Y(>=, "a",  "a");
Packit 78a954
  CMP_Y(>=, "b",  "a");
Packit 78a954
  CMP_Y(>=, "aa", "a");
Packit 78a954
  CMP_Y(>=, "b",  "aa");
Packit 78a954
  CMP_Y(>=, "bb", "aa");
Packit 78a954
Packit 78a954
  CMP_N(>, "a",  "a");
Packit 78a954
  CMP_N(>, "a",  "b");
Packit 78a954
  CMP_N(>, "a",  "aa");
Packit 78a954
  CMP_N(>, "aa", "b");
Packit 78a954
  CMP_N(>, "aa", "bb");
Packit 78a954
  CMP_Y(>, "b",  "a");
Packit 78a954
  CMP_Y(>, "aa", "a");
Packit 78a954
  CMP_Y(>, "b",  "aa");
Packit 78a954
  CMP_Y(>, "bb", "aa");
Packit 78a954
Packit 78a954
#undef CMP_Y
Packit 78a954
#undef CMP_N
Packit 78a954
}
Packit 78a954
Packit 78a954
int main(int argc, char** argv) {
Packit 78a954
  (void)argc;
Packit 78a954
  (void)argv;
Packit 78a954
  CheckComparisonOperators();
Packit 78a954
  CheckSTLComparator();
Packit 78a954
Packit 78a954
  printf("OK\n");
Packit 78a954
  return 0;
Packit 78a954
}