Annotation of embedaddon/pcre/pcre_stringpiece_unittest.cc, revision 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>