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 char pattern[] = "abcd";
00087
00088 assert(0 == shwild::match(pattern, "abcd", 0));
00089 assert(0 != shwild::match(pattern, "ABCD", 0));
00090 assert(0 == shwild::match(pattern, "ABCD", SHWILD_F_IGNORE_CASE));
00091
00092 ((void)pattern);
00093 }
00094
00095
00096 {
00097 const char pattern[] = "a*c?";
00098
00099 assert(0 == shwild::match(pattern, "abcd", 0));
00100 assert(0 == shwild::match(pattern, "a*c?", 0));
00101 assert(0 == shwild::match(pattern, "abbbbbbbbcd", 0));
00102 assert(0 == shwild::match(pattern, "acd", 0));
00103 assert(0 != shwild::match(pattern, "abdc", 0));
00104 assert(0 == shwild::match(pattern, "abc?", 0));
00105
00106 ((void)pattern);
00107 }
00108
00109
00110 {
00111 const char pattern[] = "a\\*c\\?";
00112
00113 assert(0 != shwild::match(pattern, "abcd", 0));
00114 assert(0 == shwild::match(pattern, "a*c?", 0));
00115 assert(0 != shwild::match(pattern, "a\\*c\\?", 0));
00116 assert(0 != shwild::match(pattern, "abbbbbbbbcd", 0));
00117 assert(0 != shwild::match(pattern, "acd", 0));
00118 assert(0 != shwild::match(pattern, "abdc", 0));
00119 assert(0 != shwild::match(pattern, "abc?", 0));
00120
00121
00122
00123
00124
00125 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_BACKSLASH_ESCAPE));
00126 assert(0 == shwild::match(pattern, "a\\*c\\?", SHWILD_F_SUPPRESS_BACKSLASH_ESCAPE));
00127
00128 ((void)pattern);
00129 }
00130
00131
00132 {
00133 const char pattern[] = "a[bc]c[defghijklm]";
00134
00135 assert(0 == shwild::match(pattern, "abcd", 0));
00136 assert(0 != shwild::match(pattern, "aacd", 0));
00137 assert(0 == shwild::match(pattern, "accm", 0));
00138 assert(0 != shwild::match(pattern, "abcn", 0));
00139 assert(0 != shwild::match(pattern, "a[bc]c[defghijklm]", 0));
00140
00141
00142
00143
00144 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_SUPPORT));
00145 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_SUPPORT));
00146 assert(0 != shwild::match(pattern, "accm", SHWILD_F_SUPPRESS_RANGE_SUPPORT));
00147 assert(0 != shwild::match(pattern, "abcn", SHWILD_F_SUPPRESS_RANGE_SUPPORT));
00148 assert(0 == shwild::match(pattern, "a[bc]c[defghijklm]", SHWILD_F_SUPPRESS_RANGE_SUPPORT));
00149
00150 ((void)pattern);
00151 }
00152
00153
00154 {
00155 const char pattern[] = "a[b-c]c[d-m]";
00156
00157 assert(0 == shwild::match(pattern, "abcd", 0));
00158 assert(0 != shwild::match(pattern, "aacd", 0));
00159 assert(0 == shwild::match(pattern, "accm", 0));
00160 assert(0 != shwild::match(pattern, "abcn", 0));
00161
00162
00163
00164
00165 assert(0 == shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00166 assert(0 == shwild::match(pattern, "a-cd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00167 assert(0 == shwild::match(pattern, "accd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00168 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00169 assert(0 == shwild::match(pattern, "accm", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00170 assert(0 != shwild::match(pattern, "accl", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00171 assert(0 != shwild::match(pattern, "abcn", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_SUPPORT));
00172
00173 ((void)pattern);
00174 }
00175
00176
00177 {
00178 const char pattern[] = "a[c-b]c[m-d]";
00179
00180 assert(0 == shwild::match(pattern, "abcd", 0));
00181 assert(0 != shwild::match(pattern, "aacd", 0));
00182 assert(0 == shwild::match(pattern, "accm", 0));
00183 assert(0 != shwild::match(pattern, "abcn", 0));
00184
00185 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT));
00186 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT));
00187 assert(0 != shwild::match(pattern, "accd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT));
00188 assert(0 != shwild::match(pattern, "accm", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT));
00189 assert(0 != shwild::match(pattern, "abcn", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_HIGHLOW_SUPPORT));
00190
00191 ((void)pattern);
00192 }
00193
00194
00195 {
00196 const char pattern[] = "a[b-C]c[d-M]";
00197
00198 assert(0 == shwild::match(pattern, "abcd", 0));
00199 assert(0 != shwild::match(pattern, "aacd", 0));
00200 assert(0 == shwild::match(pattern, "aCcJ", 0));
00201 assert(0 != shwild::match(pattern, "abcn", 0));
00202
00203 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_CROSSCASE_SUPPORT));
00204 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_CROSSCASE_SUPPORT));
00205 assert(0 != shwild::match(pattern, "aCcJ", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_CROSSCASE_SUPPORT));
00206 assert(0 != shwild::match(pattern, "abcn", SHWILD_F_SUPPRESS_RANGE_CONTINUUM_CROSSCASE_SUPPORT));
00207
00208 ((void)pattern);
00209 }
00210
00211
00212 {
00213 const char pattern[] = "a[*]c[?]";
00214
00215 assert(0 != shwild::match(pattern, "abcd", 0));
00216 assert(0 == shwild::match(pattern, "a*c?", 0));
00217 assert(0 != shwild::match(pattern, "abbbbbbbbcd", 0));
00218 assert(0 != shwild::match(pattern, "acd", 0));
00219 assert(0 != shwild::match(pattern, "abdc", 0));
00220 assert(0 != shwild::match(pattern, "abc?", 0));
00221
00222 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00223 assert(0 != shwild::match(pattern, "a*c?", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00224 assert(0 != shwild::match(pattern, "abbbbbbbbcd", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00225 assert(0 != shwild::match(pattern, "acd", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00226 assert(0 != shwild::match(pattern, "abdc", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00227 assert(0 != shwild::match(pattern, "abc?", SHWILD_F_SUPPRESS_RANGE_LITERAL_WILDCARD_SUPPORT));
00228
00229 ((void)pattern);
00230 }
00231
00232
00233 {
00234 const char pattern[] = "a[-a-c]c[d-]";
00235
00236 assert(0 == shwild::match(pattern, "abcd", 0));
00237 assert(0 == shwild::match(pattern, "aacd", 0));
00238 assert(0 == shwild::match(pattern, "acc-", 0));
00239 assert(0 == shwild::match(pattern, "a-c-", 0));
00240 assert(0 != shwild::match(pattern, "abce", 0));
00241
00242 assert(0 != shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT));
00243 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT));
00244 assert(0 != shwild::match(pattern, "acc-", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT));
00245 assert(0 != shwild::match(pattern, "a-c-", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT));
00246 assert(0 != shwild::match(pattern, "abce", SHWILD_F_SUPPRESS_RANGE_LEADTRAIL_LITERAL_HYPHEN_SUPPORT));
00247
00248 ((void)pattern);
00249 }
00250
00251
00252 {
00253 const char pattern[] = "a[b-c]c[^d-m]";
00254
00255 assert(0 != shwild::match(pattern, "abcd", 0));
00256 assert(0 != shwild::match(pattern, "aacd", 0));
00257 assert(0 == shwild::match(pattern, "abcc", 0));
00258 assert(0 != shwild::match(pattern, "accm", 0));
00259 assert(0 == shwild::match(pattern, "abcn", 0));
00260
00261 assert(0 == shwild::match(pattern, "abcd", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT));
00262 assert(0 != shwild::match(pattern, "aacd", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT));
00263 assert(0 != shwild::match(pattern, "abcc", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT));
00264 assert(0 == shwild::match(pattern, "accm", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT));
00265 assert(0 != shwild::match(pattern, "abcn", SHWILD_F_SUPPRESS_RANGE_NOT_SUPPORT));
00266
00267 ((void)pattern);
00268 }
00269
00270 return EXIT_SUCCESS;
00271 }
00272
00273 int main(int argc, char *argv[])
00274 {
00275 int iRet;
00276
00277 #if defined(_MSC_VER) && \
00278 defined(_DEBUG)
00279 _CrtMemState memState;
00280 #endif
00281
00282 #if defined(_MSC_VER) && \
00283 defined(_DEBUG)
00284 _CrtMemCheckpoint(&memState);
00285 #endif
00286
00287 try
00288 {
00289 iRet = main_(argc, argv);
00290 }
00291 catch(std::exception &x)
00292 {
00293 cerr << "Unhandled error: " << x.what() << endl;
00294
00295 iRet = EXIT_FAILURE;
00296 }
00297 catch(...)
00298 {
00299 cerr << "Unhandled unknown error" << endl;
00300
00301 iRet = EXIT_FAILURE;
00302 }
00303
00304 #if defined(_MSC_VER) && \
00305 defined(_DEBUG)
00306 _CrtMemDumpAllObjectsSince(&memState);
00307 #endif
00308
00309 return iRet;
00310 }
00311
00312