00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #include <shwild/shwild.hpp>
00047 #include <shwild/implicit_link.h>
00048
00049
00050 #include <cstring/implicit_link.h>
00051
00052
00053
00054 #include <exception>
00055 #include <iostream>
00056
00057 #if !defined(__WATCOMC__) && \
00058 ( !defined(_MSC_VER) || \
00059 _MSC_VER >= 1100)
00060
00061 using std::cerr;
00062 using std::endl;
00063
00064 #else
00065 namespace std
00066 {
00067 using ::exception;
00068 }
00069 #endif
00070
00071
00072 #include <assert.h>
00073 #include <stdlib.h>
00074
00075 #if defined(_MSC_VER) && \
00076 defined(_DEBUG)
00077 # include <crtdbg.h>
00078 #endif
00079
00080
00081
00082 static int main_(int , char ** )
00083 {
00084
00085 {
00086 const shwild::Pattern pattern1("abcd");
00087
00088 assert(pattern1.match("abcd"));
00089 assert(!pattern1.match("ABCD"));
00090
00091 const shwild::Pattern pattern2("abcd", SHWILD_F_IGNORE_CASE);
00092
00093 assert(pattern2.match("ABCD"));
00094 }
00095
00096
00097 {
00098 const shwild::Pattern pattern("a*c?");
00099
00100 assert(pattern.match("abcd"));
00101 assert(pattern.match("a*c?"));
00102 assert(pattern.match("abbbbbbbbcd"));
00103 assert(pattern.match("acd"));
00104 assert(!pattern.match("abdc"));
00105 assert(pattern.match("abc?"));
00106 }
00107
00108
00109 {
00110 const shwild::Pattern pattern1("a\\*c\\?");
00111
00112 assert(!pattern1.match("abcd"));
00113 assert(pattern1.match("a*c?"));
00114 assert(!pattern1.match("abbbbbbbbcd"));
00115 assert(!pattern1.match("acd"));
00116 assert(!pattern1.match("abdc"));
00117 assert(!pattern1.match("abc?"));
00118
00119
00120
00121
00122
00123 const shwild::Pattern pattern2("a\\*c\\?", SHWILD_F_SUPPRESS_BACKSLASH_ESCAPE);
00124
00125 assert(!pattern2.match("abcd"));
00126 assert(pattern2.match("a\\*c\\?"));
00127 }
00128
00129
00130 {
00131 const shwild::Pattern pattern1("a[bc]c[defghijklm]");
00132
00133 assert(pattern1.match("abcd"));
00134 assert(!pattern1.match("aacd"));
00135 assert(pattern1.match("accm"));
00136 assert(!pattern1.match("abcn"));
00137 assert(!pattern1.match("a[bc]c[defghijklm]"));
00138
00139
00140
00141
00142 const shwild::Pattern pattern2("a[bc]c[defghijklm]", SHWILD_F_SUPPRESS_RANGE_SUPPORT);
00143
00144 assert(!pattern2.match("abcd"));
00145 assert(!pattern2.match("aacd"));
00146 assert(!pattern2.match("accm"));
00147 assert(!pattern2.match("abcn"));
00148 assert(pattern2.match("a[bc]c[defghijklm]"));
00149 }
00150
00151
00152 {
00153 const shwild::Pattern pattern1("a[b-c]c[d-m]");
00154
00155 assert(pattern1.match("abcd"));
00156 assert(!pattern1.match("aacd"));
00157 assert(pattern1.match("accm"));
00158 assert(!pattern1.match("abcn"));
00159
00160 const shwild::Pattern pattern2("a[b-c]c[d-m]", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT);
00161
00162 assert(pattern2.match("abcd"));
00163 assert(pattern2.match("a-cd"));
00164 assert(pattern2.match("accd"));
00165 assert(!pattern2.match("aacd"));
00166 assert(pattern2.match("accm"));
00167 assert(!pattern2.match("accl"));
00168 assert(!pattern2.match("abcn"));
00169 }
00170
00171
00172 {
00173 const shwild::Pattern pattern1("a[c-b]c[m-d]");
00174
00175 assert(pattern1.match("abcd"));
00176 assert(!pattern1.match("aacd"));
00177 assert(pattern1.match("accm"));
00178 assert(!pattern1.match("abcn"));
00179
00180 try
00181 {
00182 const shwild::Pattern pattern2("a[c-b]c[m-d]", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT);
00183
00184 assert(!"Should not get here, since the continuum is high->low");
00185
00186 assert(!pattern2.match("aacd"));
00187 assert(!pattern2.match("abcd"));
00188 assert(!pattern2.match("accd"));
00189 assert(!pattern2.match("accm"));
00190 assert(!pattern2.match("abcn"));
00191 }
00192 catch(shwild::PatternException &)
00193 {
00194 }
00195 }
00196
00197
00198 {
00199 const shwild::Pattern pattern1("a[b-C]c[d-M]");
00200
00201 assert(pattern1.match("abcd"));
00202 assert(!pattern1.match("aacd"));
00203 assert(pattern1.match("aCcJ"));
00204 assert(!pattern1.match("abcn"));
00205
00206 try
00207 {
00208 const shwild::Pattern pattern2("a[b-C]c[d-M]", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_CROSSCASE_SUPPORT);
00209
00210 assert(!"Should not get here, since the continuum is cross-case");
00211
00212 assert(!pattern2.match("abcd"));
00213 assert(!pattern2.match("aacd"));
00214 assert(!pattern2.match("aCcJ"));
00215 assert(!pattern2.match("abcn"));
00216 }
00217 catch(shwild::PatternException &)
00218 {
00219 }
00220 }
00221
00222
00223 {
00224 const shwild::Pattern pattern1("a[*]c[?]");
00225
00226 assert(!pattern1.match("abcd"));
00227 assert(pattern1.match("a*c?"));
00228 assert(!pattern1.match("abbbbbbbbcd"));
00229 assert(!pattern1.match("acd"));
00230 assert(!pattern1.match("abdc"));
00231 assert(!pattern1.match("abc?"));
00232
00233 try
00234 {
00235 const shwild::Pattern pattern2("a[*]c[?]", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT);
00236
00237 assert(!"Should not get here, since the range contains literal wildcards");
00238
00239 assert(!pattern2.match("abcd"));
00240 assert(!pattern2.match("a*c?"));
00241 assert(!pattern2.match("abbbbbbbbcd"));
00242 assert(!pattern2.match("acd"));
00243 assert(!pattern2.match("abdc"));
00244 assert(!pattern2.match("abc?"));
00245 }
00246 catch(shwild::PatternException &)
00247 {
00248 }
00249 }
00250
00251
00252 {
00253 const shwild::Pattern pattern1("a[-a-c]c[d-]");
00254
00255 assert(pattern1.match("abcd"));
00256 assert(pattern1.match("aacd"));
00257 assert(pattern1.match("acc-"));
00258 assert(pattern1.match("a-c-"));
00259 assert(!pattern1.match("abce"));
00260
00261 try
00262 {
00263 const shwild::Pattern pattern2("a[-a-c]c[d-]", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT);
00264
00265 assert(!"Should not get here, since the range contains leading/trailing hyphens");
00266
00267 assert(!pattern2.match("abcd"));
00268 assert(!pattern2.match("aacd"));
00269 assert(!pattern2.match("acc-"));
00270 assert(!pattern2.match("a-c-"));
00271 assert(!pattern2.match("abce"));
00272 }
00273 catch(shwild::PatternException &)
00274 {
00275 }
00276 }
00277
00278
00279 {
00280 const shwild::Pattern pattern1("a[b-c]c[^d-m]");
00281
00282 assert(!pattern1.match("abcd"));
00283 assert(!pattern1.match("aacd"));
00284 assert(pattern1.match("abcc"));
00285 assert(!pattern1.match("accm"));
00286 assert(pattern1.match("abcn"));
00287
00288 try
00289 {
00290 const shwild::Pattern pattern2("a[b-c]c[^d-m]", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT);
00291
00292 assert(!"Should not get here, since the range does not support ^");
00293
00294 assert(pattern2.match("abcd"));
00295 assert(!pattern2.match("aacd"));
00296 assert(!pattern2.match("abcc"));
00297 assert(pattern2.match("accm"));
00298 assert(!pattern2.match("abcn"));
00299 }
00300 catch(shwild::PatternException &)
00301 {
00302 }
00303 }
00304
00305 return EXIT_SUCCESS;
00306 }
00307
00308 int main(int argc, char *argv[])
00309 {
00310 int iRet;
00311
00312 #if defined(_MSC_VER) && \
00313 defined(_DEBUG)
00314 _CrtMemState memState;
00315 #endif
00316
00317 #if defined(_MSC_VER) && \
00318 defined(_DEBUG)
00319 _CrtMemCheckpoint(&memState);
00320 #endif
00321
00322 try
00323 {
00324 iRet = main_(argc, argv);
00325 }
00326 catch(std::exception &x)
00327 {
00328 cerr << "Unhandled error: " << x.what() << endl;
00329
00330 iRet = EXIT_FAILURE;
00331 }
00332 catch(...)
00333 {
00334 cerr << "Unhandled unknown error" << endl;
00335
00336 iRet = EXIT_FAILURE;
00337 }
00338
00339 #if defined(_MSC_VER) && \
00340 defined(_DEBUG)
00341 _CrtMemDumpAllObjectsSince(&memState);
00342 #endif
00343
00344 return iRet;
00345 }
00346
00347