Fennel: SqlRegExpTest Class Reference (original) (raw)
00496 {
00497 bool result = false;
00498 int i;
00499
00500 const char* test[][3] = {
00501
00502
00503
00504
00505 { "a{2}", "aa", "t" },
00506 { "a{2}b", "aab", "t" },
00507 { "(bc){2}", "bcbc", "t" },
00508 { "(bc){2}d", "bcbcd", "t" },
00509 { "a(bc){2}", "abcbc", "t" },
00510 { "[bc]{2}", "bb", "t" },
00511 { "[bc]{2}", "cc", "t" },
00512 { "[bc]{2}", "bc", "t" },
00513 { "[bc]{2}", "cb", "t" },
00514
00515 { "a{2}", "", "f" },
00516 { "a{2}", "a", "f" },
00517 { "a{2}", "ac", "f" },
00518 { "a{2}", "aaa", "f" },
00519 { "a{2}", "ab", "f" },
00520 { "a{2}b", "", "f" },
00521 { "a{2}b", "b", "f" },
00522 { "a{2}b", "ab", "f" },
00523 { "a{2}b", "aa", "f" },
00524 { "a{2}b", "ab", "f" },
00525 { "(bc){2}", "", "f" },
00526 { "(bc){2}", "a", "f" },
00527 { "(bc){2}", "bc", "f" },
00528 { "(bc){2}", "bcbcb", "f" },
00529 { "[bc]{2}", "", "f" },
00530 { "[bc]{2}", "a", "f" },
00531 { "[bc]{2}", "b", "f" },
00532 { "[bc]{2}", "c", "f" },
00533 { "[bc]{2}", "ad", "f" },
00534 { "[bc]{2}", "", "f" },
00535 { "[bc]{2}", "bbc", "f" },
00536
00537
00538
00539
00540 { "a{2,3}", "aa", "t" },
00541 { "a{2,3}", "aaa", "t" },
00542 { "a{2,3}b", "aab", "t" },
00543 { "a{2,3}b", "aaab", "t" },
00544 { "(bc){2,3}", "bcbc", "t" },
00545 { "(bc){2,3}", "bcbcbc", "t" },
00546 { "[bc]{2,3}", "bb", "t" },
00547 { "[bc]{2,3}", "bbb", "t" },
00548 { "[bc]{2,3}", "cc", "t" },
00549 { "[bc]{2,3}", "ccc", "t" },
00550 { "[bc]{2,3}", "bcb", "t" },
00551 { "[bc]{2,3}", "cbc", "t" },
00552
00553 { "a{2,3}", "", "f" },
00554 { "a{2,3}", "a", "f" },
00555 { "a{2,3}", "aaaa", "f" },
00556 { "a{2,3}", "aab", "f" },
00557 { "(bc){2,3}", "", "f" },
00558 { "(bc){2,3}", "a", "f" },
00559 { "(bc){2,3}", "bc", "f" },
00560 { "(bc){2,3}", "cbcb", "f" },
00561 { "[bc]{2,3}", "", "f" },
00562 { "[bc]{2,3}", "a", "f" },
00563 { "[bc]{2,3}", "b", "f" },
00564 { "[bc]{2,3}", "c", "f" },
00565 { "[bc]{2,3}", "bcbcbc", "f" },
00566 { "[bc]{2,3}", "bcbcbcb","f" },
00567 { "[bc]{2,3}", "", "f" },
00568 { "[bc]{2,3}", "bbcc", "f" },
00569
00570
00571
00572
00573
00574 { "a{2,}", "aa", "t" },
00575 { "a{2,}", "aaa", "t" },
00576 { "a{2,}", "aaaa", "t" },
00577 { "a{2,}b", "aab", "t" },
00578 { "a{2,}b", "aaab", "t" },
00579 { "(bc){2,}", "bcbc", "t" },
00580 { "(bc){2,}", "bcbcbc", "t" },
00581 { "[bc]{2,}", "bb", "t" },
00582 { "[bc]{2,}", "bbb", "t" },
00583 { "[bc]{2,}", "cc", "t" },
00584 { "[bc]{2,}", "ccc", "t" },
00585 { "[bc]{2,}", "bcb", "t" },
00586 { "[bc]{2,}", "cbc", "t" },
00587
00588 { "a{2,}", "", "f" },
00589 { "a{2,}", "a", "f" },
00590 { "a{2,}", "aab", "f" },
00591 { "(bc){2,}", "", "f" },
00592 { "(bc){2,}", "a", "f" },
00593 { "(bc){2,}", "bc", "f" },
00594 { "(bc){2,}", "cbcb", "f" },
00595 { "(bc){2,}", "bcbcb", "f" },
00596 { "[bc]{2,}", "", "f" },
00597 { "[bc]{2,}", "a", "f" },
00598 { "[bc]{2,}", "b", "f" },
00599 { "[bc]{2,}", "c", "f" },
00600 { "[bc]{2,}", "bcd", "f" },
00601
00602
00603
00604 { "a|b", "a", "t" },
00605 { "a|b", "b", "t" },
00606 { "a|bc", "a", "t" },
00607 { "a|bc", "bc", "t" },
00608 { "(a|b)c", "ac", "t" },
00609 { "(a|b)c", "bc", "t" },
00610
00611 { "a|b", "c", "f" },
00612 { "a|bc", "c", "f" },
00613 { "a|bc", "ac", "f" },
00614 { "(a|b)c", "c", "f" },
00615 { "(a|b)c", "dc", "f" },
00616
00617
00618
00619 { "ab", "b", "t" },
00620 { "ab", "ab", "t" },
00621 { "ab", "aab", "t" },
00622 { "ab", "a", "t" },
00623 { "ab*", "ab", "t" },
00624 { "ab*", "abb", "t" },
00625 { "a(bc)", "a", "t" },
00626 { "a(bc)", "abc", "t" },
00627 { "a(bc)", "abcbc", "t" },
00628 { "a[bc]", "a", "t" },
00629 { "a[bc]", "ab", "t" },
00630 { "a[bc]", "ac", "t" },
00631 { "a[bc]", "abb", "t" },
00632 { "a[bc]", "abc", "t" },
00633 { "a[bc]", "abc", "t" },
00634 { "a[bc]", "acc", "t" },
00635 { "a[bc]", "abbb", "t" },
00636 { "a[bc]", "accc", "t" },
00637
00638 { "ab", "", "f" },
00639 { "ab", "a", "f" },
00640 { "ab", "ac", "f" },
00641 { "ab", "b" , "f" },
00642 { "ab*", "ac", "f" },
00643 { "a(bc)", "", "f" },
00644 { "a(bc)", "ad", "f" },
00645 { "a(bc)", "abd", "f" },
00646 { "a(bc)", "adb", "f" },
00647 { "a[bc]", "", "f" },
00648 { "a[bc]", "ad", "f" },
00649 { "a[bc]", "abd", "f" },
00650 { "a[bc]", "acd", "f" },
00651
00652
00653
00654 { "a+b", "ab", "t" },
00655 { "a+b", "aab", "t" },
00656 { "ab+", "ab", "t" },
00657 { "ab+", "abb", "t" },
00658 { "a(bc)+", "abc", "t" },
00659 { "a(bc)+", "abcbc", "t" },
00660 { "a[bc]+", "ab", "t" },
00661 { "a[bc]+", "abb", "t" },
00662 { "a[bc]+", "ac", "t" },
00663 { "a[bc]+", "acc", "t" },
00664 { "a[bc]+", "abc", "t" },
00665 { "a[bc]+", "abccb", "t" },
00666
00667 { "a+b", "", "f" },
00668 { "a+b", "a", "f" },
00669 { "a+b", "b", "f" },
00670 { "a+b", "ac", "f" },
00671 { "ab+", "", "f" },
00672 { "ab+", "a", "f" },
00673 { "ab+", "b" , "f" },
00674 { "ab+", "ac", "f" },
00675 { "a(bc)+", "", "f" },
00676 { "a(bc)+", "a", "f" },
00677 { "a(bc)+", "ad", "f" },
00678 { "a(bc)+", "abd", "f" },
00679 { "a(bc)+", "adb", "f" },
00680 { "a[bc]+", "", "f" },
00681 { "a[bc]+", "a", "f" },
00682 { "a[bc]+", "ad", "f" },
00683 { "a[bc]+", "abd", "f" },
00684 { "a[bc]+", "acd", "f" },
00685
00686
00687
00688
00689 { "a", "a", "t" },
00690 { "a", "", "f" },
00691
00692
00693
00694 { "%", "", "t" },
00695 { "%", "a", "t" },
00696 { "%", "abc", "t" },
00697 { "%b", "ab", "t" },
00698 { "a%", "ab", "t" },
00699 { "ab%", "abc", "t" },
00700 { "a%c", "abc", "t" },
00701 { "%bc", "abc", "t" },
00702 { "a%", "abc", "t" },
00703 { "%b%", "abc", "t" },
00704 { "%c", "abc", "t" },
00705 { "%abc", "abc", "t" },
00706 { "abc%", "abc", "t" },
00707
00708 { "%b", "a", "f" },
00709 { "a%", "b", "f" },
00710 { "ab%", "ac", "f" },
00711 { "a%c", "ab", "f" },
00712 { "%bc", "ab", "f" },
00713 { "%b%", "aBc", "f" },
00714 { "%c", "ab", "f" },
00715 { "%abc", "ac", "f" },
00716 { "%abc", "bc", "f" },
00717 { "%abc", "ab", "f" },
00718 { "abc%", "ab", "f" },
00719 { "abc%", "ac", "f" },
00720 { "abc%", "bc", "f" },
00721
00722
00723
00724 { "a?b", "b", "t" },
00725 { "a?b", "ab", "t" },
00726 { "ab?", "a", "t" },
00727 { "ab?", "ab", "t" },
00728 { "a(bc)?", "a", "t" },
00729 { "a(bc)?", "abc", "t" },
00730 { "a[bc]?", "a", "t" },
00731 { "a[bc]?", "ab", "t" },
00732 { "a[bc]?", "ac", "t" },
00733
00734 { "a?b", "", "f" },
00735 { "a?b", "a", "f" },
00736 { "a?b", "ac", "f" },
00737 { "a?b", "aab", "f" },
00738 { "ab?", "abb", "f" },
00739 { "ab?", "b" , "f" },
00740 { "ab?", "ac", "f" },
00741 { "a(bc)?", "", "f" },
00742 { "a(bc)?", "abcbc", "f" },
00743 { "a(bc)?", "ad", "f" },
00744 { "a(bc)?", "abd", "f" },
00745 { "a(bc)?", "adb", "f" },
00746 { "a[bc]?", "", "f" },
00747 { "a[bc]?", "ad", "f" },
00748 { "a[bc]?", "abd", "f" },
00749 { "a[bc]?", "acd", "f" },
00750 { "a[bc]?", "abb", "f" },
00751 { "a[bc]?", "abc", "f" },
00752 { "a[bc]?", "abc", "f" },
00753 { "a[bc]?", "acc", "f" },
00754 { "a[bc]?", "abbb", "f" },
00755 { "a[bc]?", "accc", "f" },
00756
00757
00758
00759 { "(a)", "a", "t" },
00760 { "(ab)", "ab", "t" },
00761 { "(a)(b)", "ab", "t" },
00762 { "a(b)(c)d", "abcd", "t" },
00763 { "(a(b))", "ab", "t" },
00764
00765 { "(a)", "", "f" },
00766 { "(a)", "b", "f" },
00767 { "(ab)", "a", "f" },
00768 { "(ab)", "b", "f" },
00769 { "(a)(b)", "a", "f" },
00770 { "(a)(b)", "b", "f" },
00771 { "(a)(b)", "abc", "f" },
00772 { "a(b)(c)d", "abc", "f" },
00773 { "a(b)(c)d", "bcd", "f" },
00774 { "(a(b))", "abc", "f" },
00775
00776
00777
00778 { "", "a", "t" },
00779 { "a", "a", "t" },
00780 { "abc", "abc", "t" },
00781 { "bc", "abc", "t" },
00782 { "a_c", "abc", "t" },
00783 { "ab", "abc", "t" },
00784 { "a_", "abc", "t" },
00785 { "b", "abc", "t" },
00786 { "c", "abc", "t" },
00787
00788 { "_", "", "f" },
00789 { "a", "", "f" },
00790 { "a", "b", "f" },
00791 { "b", "ab", "f" },
00792 { "a", "ab", "f" },
00793 { "", "a", "f" },
00794 { "abc", "Abc", "f" },
00795 { "abc", "aBc", "f" },
00796 { "abc", "abC", "f" },
00797 { "bc", "aBc", "f" },
00798 { "bc", "abC", "f" },
00799 { "a_c", "Abc", "f" },
00800 { "ab", "aBc", "f" },
00801 { "a_", "Abc", "f" },
00802 { "b", "aBc", "f" },
00803 { "__c", "abC", "f" },
00804
00805
00806
00807
00808
00809 { "[a]", "a", "t" },
00810 { "[ab]", "a", "t" },
00811 { "[ab]", "b", "t" },
00812 { "[a-c]", "a", "t" },
00813 { "[a-c]", "b", "t" },
00814 { "[a-c]", "c", "t" },
00815
00816 { "[a]", "", "f" },
00817 { "[a]", "b", "f" },
00818 { "[a]", "ab", "f" },
00819 { "[ab]", "", "f" },
00820 { "[ab]", "c", "f" },
00821 { "[ab]", "ab", "f" },
00822 { "[a-c]", "", "f" },
00823 { "[a-c]", "Z", "f" },
00824 { "[a-c]", "d", "f" },
00825
00826
00827
00828
00829 { "[^a]", "b", "t" },
00830 { "[^ab]", "c", "t" },
00831 { "[^a-c]", "d", "t" },
00832
00833 { "[^a]", "", "f" },
00834 { "[^a]", "a", "f" },
00835 { "[^a]", "ab", "f" },
00836 { "[^ab]", "", "f" },
00837 { "[^ab]", "a", "f" },
00838 { "[^ab]", "b", "f" },
00839 { "[^ab]", "ab", "f" },
00840 { "[^a-c]", "", "f" },
00841 { "[^a-c]", "a", "f" },
00842 { "[^a-c]", "b", "f" },
00843 { "[^a-c]", "c", "f" },
00844 { "[^a-c]", "ab", "f" },
00845
00846
00847
00848
00849
00850
00851 #if 0
00852 { "[a^b]", "ac", "t" },
00853 { "[a^b]", "aa", "t" },
00854 { "[a-c^d-f]", "ad", "t" },
00855 { "[a-c^d-f]", "cf", "t" },
00856
00857 { "[a^b]", "", "f" },
00858 { "[a^b]", "a", "f" },
00859 { "[a^b]", "b", "f" },
00860 { "[a^b]", "bb", "f" },
00861 { "[a^b]", "ab", "f" },
00862 { "[a^b]", "acd", "f" },
00863 { "[a-c^d-f]", "", "f" },
00864 { "[a-c^d-f]", "aa", "f" },
00865 { "[a-c^d-f]", "ag", "f" },
00866 { "[a-c^d-f]", "ca", "f" },
00867 { "[a-c^d-f]", "cg", "f" },
00868 { "[a-c^d-f]", "ad", "f" },
00869 { "[a-c^d-f]", "af", "f" },
00870 { "[a-c^d-f]", "aaa", "f" },
00871 #endif
00872
00873
00874 { "[[:alpha:]]", "a", "t" },
00875 { "[[:ALPHA:]]", "a", "t" },
00876 { "[[:ALPHA:]]", "A", "t" },
00877 { "[^[:alpha:]]", "1", "t" },
00878 { "[^[:ALPHA:]]", "1", "t" },
00879
00880 { "[[:ALPHA:]]", "", "f" },
00881 { "[[:ALPHA:]]", " ", "f" },
00882 { "[[:ALPHA:]]", "\t", "f" },
00883 { "[[:ALPHA:]]", "\n", "f" },
00884 { "[[:ALPHA:]]", "1", "f" },
00885 { "[[:ALPHA:]]", "@", "f" },
00886 { "[[:ALPHA:]]", "a1", "f" },
00887 { "[[:ALPHA:]]", "aa", "f" },
00888 { "[^[:ALPHA:]]", "a", "f" },
00889 { "[^[:ALPHA:]]", "A", "f" },
00890
00891
00892 { "[[:upper:]]", "A", "t" },
00893 { "[[:UPPER:]]", "A", "t" },
00894 { "[^[:upper:]]", "1", "t" },
00895 { "[^[:UPPER:]]", "1", "t" },
00896 { "[^[:UPPER:]]", "a", "t" },
00897
00898 { "[[:UPPER:]]", "", "f" },
00899 { "[[:UPPER:]]", " ", "f" },
00900 { "[[:UPPER:]]", "\t", "f" },
00901 { "[[:UPPER:]]", "\n", "f" },
00902 { "[[:UPPER:]]", "1", "f" },
00903 { "[[:UPPER:]]", "@", "f" },
00904 { "[[:UPPER:]]", "a", "f" },
00905 { "[[:UPPER:]]", "AA", "f" },
00906 { "[^[:UPPER:]]", "A", "f" },
00907
00908
00909 { "[[:lower:]]", "a", "t" },
00910 { "[[:LOWER:]]", "a", "t" },
00911 { "[^[:lower:]]", "1", "t" },
00912 { "[^[:LOWER:]]", "1", "t" },
00913 { "[^[:LOWER:]]", "A", "t" },
00914
00915 { "[[:LOWER:]]", "", "f" },
00916 { "[[:LOWER:]]", " ", "f" },
00917 { "[[:LOWER:]]", "\t", "f" },
00918 { "[[:LOWER:]]", "\n", "f" },
00919 { "[[:LOWER:]]", "1", "f" },
00920 { "[[:LOWER:]]", "@", "f" },
00921 { "[[:LOWER:]]", "A", "f" },
00922 { "[[:LOWER:]]", "aa", "f" },
00923 { "[^[:LOWER:]]", "a", "f" },
00924
00925
00926 { "[[:digit:]]", "1", "t" },
00927 { "[[:DIGIT:]]", "1", "t" },
00928 { "[^[:digit:]]", "a", "t" },
00929 { "[^[:DIGIT:]]", "a", "t" },
00930 { "[^[:DIGIT:]]", "a", "t" },
00931
00932 { "[[:DIGIT:]]", "", "f" },
00933 { "[[:DIGIT:]]", " ", "f" },
00934 { "[[:DIGIT:]]", "\t", "f" },
00935 { "[[:DIGIT:]]", "\n", "f" },
00936 { "[[:DIGIT:]]", "a", "f" },
00937 { "[[:DIGIT:]]", "@", "f" },
00938
00939
00940 { "[[:space:]]", " ", "t" },
00941 { "[[:SPACE:]]", " ", "t" },
00942 { "[^[:space:]]", "a", "t" },
00943 { "[^[:SPACE:]]", "a", "t" },
00944 { "[^[:SPACE:]]", "\t", "t" },
00945 { "[^[:SPACE:]]", "\n", "t" },
00946
00947 { "[[:SPACE:]]", "", "f" },
00948 { "[^[:SPACE:]]", " ", "f" },
00949 { "[^[:SPACE:]]", " ", "f" },
00950 { "[[:SPACE:]]", "\t", "f" },
00951 { "[[:SPACE:]]", "\n", "f" },
00952 { "[[:SPACE:]]", "a", "f" },
00953 { "[[:SPACE:]]", "@", "f" },
00954
00955
00956
00957 { "[[:whitespace:]]", " ", "t" },
00958 { "[[:WHITESPACE:]]", " ", "t" },
00959 { "[[:WHITESPACE:]]", "\t", "t" },
00960 { "[[:WHITESPACE:]]", "\n", "t" },
00961 { "[[:WHITESPACE:]]", "\v", "t" },
00962 { "[[:WHITESPACE:]]", "\f", "t" },
00963 { "[[:WHITESPACE:]]", "\r", "t" },
00964 { "[[:WHITESPACE:]]", "\x20", "t" },
00965 { "[[:WHITESPACE:]]", "\xa0", "t" },
00966 { "[[:WHITESPACE:]]", "\x09", "t" },
00967 { "[[:WHITESPACE:]]", "\x0a", "t" },
00968 { "[[:WHITESPACE:]]", "\x0b", "t" },
00969 { "[[:WHITESPACE:]]", "\x0c", "t" },
00970 { "[[:WHITESPACE:]]", "\x0d", "t" },
00971 { "[[:WHITESPACE:]]", "\x85", "t" },
00972 { "[^[:whitespace:]]", "a", "t" },
00973 { "[^[:WHITESPACE:]]", "a", "t" },
00974
00975 { "[^[:WHITESPACE:]]", "\t", "f" },
00976 { "[^[:WHITESPACE:]]", "\n", "f" },
00977 { "[[:WHITESPACE:]]", "", "f" },
00978 { "[^[:WHITESPACE:]]", " ", "f" },
00979 { "[^[:WHITESPACE:]]", " ", "f" },
00980 { "[[:WHITESPACE:]]", "a", "f" },
00981 { "[[:WHITESPACE:]]", "@", "f" },
00982
00983
00984 { "[[:alnum:]]", "a", "t" },
00985 { "[[:ALNUM:]]", "a", "t" },
00986 { "[[:ALNUM:]]", "1", "t" },
00987 { "[[:ALNUM:]]", "A", "t" },
00988 { "[^[:alnum:]]", "!", "t" },
00989 { "[^[:ALNUM:]]", "!", "t" },
00990 { "[^[:ALNUM:]]", " ", "t" },
00991 { "[^[:ALNUM:]]", "\t", "t" },
00992 { "[^[:ALNUM:]]", "\n", "t" },
00993
00994 { "[[:ALNUM:]]", "", "f" },
00995 { "[[:ALNUM:]]", " ", "f" },
00996 { "[[:ALNUM:]]", "\t", "f" },
00997 { "[[:ALNUM:]]", "\n", "f" },
00998 { "[^[:ALNUM:]]", "1", "f" },
00999 { "[^[:ALNUM:]]", "a", "f" },
01000 { "[^[:ALNUM:]]", "A", "f" },
01001 { "[[:ALNUM:]]", "aa", "f" },
01002
01003
01004
01005 #if 0
01006 { "||", "a", "t" },
01007 { "||", "aa", "f" },
01008 #endif
01009
01010
01011 { "", "", "t" },
01012 { "", "a", "f" },
01013
01014
01015
01016 { "\", "\", "t" },
01017 { "\", "a", "f" },
01018 { "$", "$", "t" },
01019 { "a$c", "a$c", "t" },
01020 { "a$c", "abc", "f" },
01021 { ".", ".", "t" },
01022 { ".", "a", "f" },
01023
01024 { "X", "X", "X" }
01025 };
01026 string expPat;
01027 for (i = 0; test[i][0] != 'X'; i++) {
01028 BOOST_MESSAGE(" ===== Ascii Similar " << i <<
01029 " " << test[i][0] << " " <<
01030 test[i][1] << " " << test[i][2]);
01031 try {
01032 SqlSimilarPrep<1, 1>(
01033 test[i][0],
01034 strlen(test[i][0]),
01035 0, 0,
01036 expPat);
01037
01038 boost::regex exp(expPat);
01039 result = SqlRegExp<1, 1>(
01040 test[i][1],
01041 strlen(test[i][1]),
01042 strlen(test[i][0]),
01043 exp);
01044 } catch (char const * const ptr) {
01045
01046 BOOST_MESSAGE("unexpected SQL exception: " << ptr);
01047 BOOST_CHECK(0);
01048 } catch (boost::bad_expression badexp) {
01049
01050 BOOST_MESSAGE("unexpected regex exception: "
01051 <<badexp.what());
01052 BOOST_CHECK(0);
01053 } catch (...) {
01054
01055 BOOST_MESSAGE("unexpected unknown exception");
01056 BOOST_CHECK(0);
01057 }
01058
01059 if ((test[i][2]) == 't') {
01060 if (!result) {
01061 BOOST_MESSAGE("|" << test[i][1] <<
01062 "| |" << test[i][0] << "| expPat=|" <<
01063 expPat << "|");
01064 }
01065 BOOST_CHECK(result);
01066 } else {
01067 if (result) {
01068 BOOST_MESSAGE("|" << test[i][1] <<
01069 "| |" << test[i][0] << "| expPat=|" <<
01070 expPat << "|");
01071 }
01072 BOOST_CHECK(!result);
01073 }
01074 }
01075 }