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 |
(void)argc;
|
146 |
(void)argv;
|
147 |
CheckComparisonOperators();
|
148 |
CheckSTLComparator();
|
149 |
|
150 |
printf("OK\n");
|
151 |
return 0;
|
152 |
}
|