/[pcre]/code/tags/pcre-7.7/pcre_stringpiece_unittest.cc
ViewVC logotype

Contents of /code/tags/pcre-7.7/pcre_stringpiece_unittest.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 348 - (show annotations) (download)
Wed May 7 16:39:17 2008 UTC (6 years, 7 months ago) by ph10
File size: 3594 byte(s)
Tag the 7.7 release.

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 }

Properties

Name Value
svn:eol-style native
svn:keywords "Author Date Id Revision Url"

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12