C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html

This commit is contained in:
Arash Partow 2018-08-14 21:29:36 +10:00
parent 3653188ad5
commit 9a8474e7a2
2 changed files with 86 additions and 77 deletions

View File

@ -619,7 +619,14 @@ namespace exprtk
return false;
}
return (d_itr == data_end) && (p_itr == pattern_end);
if (d_itr != data_end)
return false;
else if (p_itr == pattern_end)
return true;
else if ((zero_or_more == *p_itr) || (zero_or_one == *p_itr))
++p_itr;
return pattern_end == p_itr;
}
inline bool wc_match(const std::string& wild_card,

View File

@ -2452,83 +2452,85 @@ inline bool run_test02()
test_ab<T>("var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+3] <=> y[:]; (x == '0123X') and (y == 'XXXX4567890')", "","",T(1.0)),
test_ab<T>("var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+4] <=> y[:]; (x == '01234') and (y == 'XXXXX567890')", "","",T(1.0)),
test_ab<T>("a like b", "abcd", "abcd", T(1.0)),
test_ab<T>("a like b", "abcd", "abc*", T(1.0)),
test_ab<T>("a like b", "abcd", "*bcd", T(1.0)),
test_ab<T>("a like b", "abcd", "abc?", T(1.0)),
test_ab<T>("a like b", "abcd", "?bcd", T(1.0)),
test_ab<T>("a like b", "abcd", "ab?d", T(1.0)),
test_ab<T>("a like b", "abcd", "ab*d", T(1.0)),
test_ab<T>("a like b", "abcd", "a?cd", T(1.0)),
test_ab<T>("a like b", "abcd", "a*cd", T(1.0)),
test_ab<T>("a like b", "abcd", "a??d", T(1.0)),
test_ab<T>("a like b", "abcd", "a*?d", T(1.0)),
test_ab<T>("a like b", "abcd", "*bc*", T(1.0)),
test_ab<T>("a like b", "abcd", "?bc?", T(1.0)),
test_ab<T>("a like b", "abcd", "????", T(1.0)),
test_ab<T>("a like b", "abcd", "a???", T(1.0)),
test_ab<T>("a like b", "abcd", "ab??", T(1.0)),
test_ab<T>("a like b", "abcd", "abc?", T(1.0)),
test_ab<T>("a like b", "abcd", "???d", T(1.0)),
test_ab<T>("a like b", "abcd", "??cd", T(1.0)),
test_ab<T>("a like b", "abcd", "?bcd", T(1.0)),
test_ab<T>("a like b", "abcd", "?b?d", T(1.0)),
test_ab<T>("a like b", "abcd", "a?c?", T(1.0)),
test_ab<T>("a like b", "abcd", "a??d", T(1.0)),
test_ab<T>("a like b", "abcd", "?bc?", T(1.0)),
test_ab<T>("a like b", "abcd", "ab**", T(1.0)),
test_ab<T>("a like b", "abcd", "ab*?", T(1.0)),
test_ab<T>("a like b", "abcd", "a***", T(1.0)),
test_ab<T>("a like b", "abcd", "**cd", T(1.0)),
test_ab<T>("a like b", "abcd", "*?cd", T(1.0)),
test_ab<T>("a like b", "abcd", "***d", T(1.0)),
test_ab<T>("a like b", "abcd", "*bc*", T(1.0)),
test_ab<T>("a like b", "abcd", "*bc?", T(1.0)),
test_ab<T>("a like b", "abcd", "*b??", T(1.0)),
test_ab<T>("a like b", "abcd", "?bc*", T(1.0)),
test_ab<T>("a like b", "abcd", "??c*", T(1.0)),
test_ab<T>("a like b", "abcd", "*b?*", T(1.0)),
test_ab<T>("a like b", "ab" , "a*" , T(1.0)),
test_ab<T>("a like b", "ab" , "a?" , T(1.0)),
test_ab<T>("a like b", "abcd", "abcd*", T(1.0)),
test_ab<T>("a like b", "abcd", "abcd" , T(1.0)),
test_ab<T>("a like b", "abcd", "abc*" , T(1.0)),
test_ab<T>("a like b", "abcd", "*bcd" , T(1.0)),
test_ab<T>("a like b", "abcd", "abc?" , T(1.0)),
test_ab<T>("a like b", "abcd", "?bcd" , T(1.0)),
test_ab<T>("a like b", "abcd", "ab?d" , T(1.0)),
test_ab<T>("a like b", "abcd", "ab*d" , T(1.0)),
test_ab<T>("a like b", "abcd", "a?cd" , T(1.0)),
test_ab<T>("a like b", "abcd", "a*cd" , T(1.0)),
test_ab<T>("a like b", "abcd", "a??d" , T(1.0)),
test_ab<T>("a like b", "abcd", "a*?d" , T(1.0)),
test_ab<T>("a like b", "abcd", "*bc*" , T(1.0)),
test_ab<T>("a like b", "abcd", "?bc?" , T(1.0)),
test_ab<T>("a like b", "abcd", "????" , T(1.0)),
test_ab<T>("a like b", "abcd", "a???" , T(1.0)),
test_ab<T>("a like b", "abcd", "ab??" , T(1.0)),
test_ab<T>("a like b", "abcd", "abc?" , T(1.0)),
test_ab<T>("a like b", "abcd", "???d" , T(1.0)),
test_ab<T>("a like b", "abcd", "??cd" , T(1.0)),
test_ab<T>("a like b", "abcd", "?bcd" , T(1.0)),
test_ab<T>("a like b", "abcd", "?b?d" , T(1.0)),
test_ab<T>("a like b", "abcd", "a?c?" , T(1.0)),
test_ab<T>("a like b", "abcd", "a??d" , T(1.0)),
test_ab<T>("a like b", "abcd", "?bc?" , T(1.0)),
test_ab<T>("a like b", "abcd", "ab**" , T(1.0)),
test_ab<T>("a like b", "abcd", "ab*?" , T(1.0)),
test_ab<T>("a like b", "abcd", "a***" , T(1.0)),
test_ab<T>("a like b", "abcd", "**cd" , T(1.0)),
test_ab<T>("a like b", "abcd", "*?cd" , T(1.0)),
test_ab<T>("a like b", "abcd", "***d" , T(1.0)),
test_ab<T>("a like b", "abcd", "*bc*" , T(1.0)),
test_ab<T>("a like b", "abcd", "*bc?" , T(1.0)),
test_ab<T>("a like b", "abcd", "*b??" , T(1.0)),
test_ab<T>("a like b", "abcd", "?bc*" , T(1.0)),
test_ab<T>("a like b", "abcd", "??c*" , T(1.0)),
test_ab<T>("a like b", "abcd", "*b?*" , T(1.0)),
test_ab<T>("a like b", "ab" , "a*" , T(1.0)),
test_ab<T>("a like b", "ab" , "a?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abcd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bcd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bcd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab?d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab*d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a?cd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a*cd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a??d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a*?d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "????", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a???", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab??", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "???d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "??cd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bcd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?b?d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a?c?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a??d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab**", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab*?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a***", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "**cd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*?cd", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "***d", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc?", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*b??", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "??c*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*b?*", T(1.0)),
test_ab<T>("a ilike b", "aB" , "a*" , T(1.0)),
test_ab<T>("a ilike b", "aB" , "a?" , T(1.0))
test_ab<T>("a ilike b", "aBcD", "abcd*", T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abcd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc*" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bcd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bcd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab?d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab*d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a?cd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a*cd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a??d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a*?d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc*" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "????" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a???" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab??" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "abc?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "???d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "??cd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bcd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?b?d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a?c?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a??d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab**" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "ab*?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "a***" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "**cd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*?cd" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "***d" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc*" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*bc?" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*b??" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "?bc*" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "??c*" , T(1.0)),
test_ab<T>("a ilike b", "aBcD", "*b?*" , T(1.0)),
test_ab<T>("a ilike b", "aB" , "a*" , T(1.0)),
test_ab<T>("a ilike b", "aB" , "a?" , T(1.0))
};
static const std::size_t test_list_size = sizeof(test_list) / sizeof(test_ab<T>);