home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / REGEX011.TAZ / REGEX011 / regex-0.11 / test / other.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-16  |  19.1 KB  |  504 lines

  1. /* other.c: test (not exhaustively) non-POSIX regular expressions.  */
  2.  
  3. #include "test.h"
  4.  
  5. void
  6. test_others ()
  7. {
  8.   struct re_registers regs;
  9.   
  10.   printf ("\nStarting non-POSIX tests.\n");
  11.   t = other_test;
  12.  
  13.   test_should_match = true;
  14.  
  15.   /* The big question: does the group participate in the match, or match
  16.      the empty string?  */
  17.   re_set_syntax (RE_NO_BK_PARENS);
  18.   test_match ("(a*)*ab", "ab");
  19.   TEST_REGISTERS ("(a*)*ab", "ab", 0, 2, 0, 0, -1, -1);
  20.   test_match ("(a*)*", "");
  21.   TEST_REGISTERS ("(a*)*ab", "ab", 0, 0, 0, 0, -1, -1);
  22.   
  23.   /* This tests finding the highest and lowest active registers.  */
  24.   test_match ("(a(b)c(d(e)f)g)h(i(j)k(l(m)n)o)\\1\\2\\3\\4\\5\\6\\7\\8",
  25.               "abcdefghijklmnoabcdefgbdefeijklmnojlmnm");
  26.  
  27.   /* Test that \< and \> match at the beginning and end of the string.  */
  28.   test_match ("\\<abc\\>", "abc");
  29.   
  30.   /* May as well test \` and \' while we're at it.  */
  31.   test_match ("\\`abc\\'", "abc");
  32.   
  33. #if 0
  34.   /* Test backreferencing and the fastmap -- which doesn't work.  */
  35.   test_fastmap ("(a)*\\1", "a", 0, 0);
  36. #endif
  37.  
  38.   /* But at least we shouldn't search improperly.  */
  39.   test_search_return (-1, "(a)\\1", "");
  40.   
  41.   re_set_syntax (RE_SYNTAX_EMACS);
  42.   
  43.   MATCH_SELF("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  44.   MATCH_SELF ("a^");
  45.   MATCH_SELF ("a^b");
  46.   MATCH_SELF ("$a");
  47.   MATCH_SELF ("a$b");
  48.  
  49.   re_set_syntax (RE_BACKSLASH_ESCAPE_IN_LISTS);
  50.   test_match ("[\\^a]", "a");
  51.   test_match ("[\\^a]", "^");
  52.  
  53.   /* These op characters should be ordinary if RE_CONTEXT_INVALID_OPS
  54.      isn't set.  */
  55.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_BRACES | RE_INTERVALS
  56.                  | RE_NO_BK_PARENS);
  57.   MATCH_SELF ("*");
  58.   test_match ("a|*", "*");
  59.   test_match ("(*)", "*");
  60.  
  61.   MATCH_SELF ("+");
  62.   test_match ("a|+", "+");
  63.   test_match ("(+)", "+");
  64.  
  65.   MATCH_SELF ("?");
  66.   test_match ("a|?", "?");
  67.   test_match ("(?)", "?");
  68.  
  69.   MATCH_SELF ("{1}");
  70.   test_match ("a|{1}", "a");
  71.   test_match ("a|{1}", "{1}");
  72.   test_match ("({1})", "{1}");
  73.   
  74.   test_match ("\\{", "{");
  75.  
  76.  
  77.   re_set_syntax (RE_LIMITED_OPS);
  78.   MATCH_SELF ("|");
  79.   MATCH_SELF ("a|");
  80.   MATCH_SELF ("a|");
  81.   MATCH_SELF ("a||");
  82.   MATCH_SELF ("a||");
  83.   MATCH_SELF ("(|)");
  84.  
  85.   re_set_syntax (RE_SYNTAX_EMACS);
  86.   TEST_SEARCH ("^a", "b\na", 0, 3);
  87.   TEST_SEARCH ("b$", "b\na", 0, 3);
  88.  
  89. #if 0
  90.   /* Newline is no longer special for anchors (16 Sep 92).  --karl  */
  91.   test_match_2 ("a\n^b", "a", "\nb");
  92.   test_match_2 ("a$\nb", "a\n", "b");
  93. #endif
  94.  
  95.   /* Test grouping.  */
  96.   re_set_syntax (RE_NO_BK_PARENS);
  97.   
  98.   test_match ("()", "");
  99.   test_fastmap ("()", "", 0, 0);
  100.   TEST_REGISTERS ("()", "", 0, 0, 0, 0, -1, -1);
  101.  
  102.   test_match ("((((((((()))))))))", "");
  103.   test_fastmap ("((((((((()))))))))", "", 0, 0);
  104.   test_match ("a()b", "ab");
  105.   TEST_REGISTERS ("a()b", "ab", 0, 2, 1, 1, -1, -1);
  106.  
  107.   test_match ("(((((((((())))))))))", "");
  108.   test_fastmap ("(((((((((())))))))))", "", 0, 0);
  109.   
  110.   test_match ("()*", "");
  111.   TEST_REGISTERS ("()*", "", 0, 0, 0, 0, -1, -1);  /* empty string */
  112.   test_match ("(())*", "");
  113.  
  114.   re_set_syntax (RE_CONTEXT_INDEP_OPS);
  115.   test_match ("*", "");
  116.   
  117.   re_set_syntax (RE_INTERVALS | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES);
  118.   test_match ("{1}", "");        /* Should remain an interval.  */
  119.   MATCH_SELF ("{1");            /* Not a valid interval.  */
  120.   
  121.   re_set_syntax (RE_NEWLINE_ALT);
  122.   test_match ("a\nb", "a");
  123.   test_match ("a\nb", "b");
  124.   
  125.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS);
  126.   test_match ("^a", "a");
  127.   test_match ("(^a)", "a");
  128.   test_match ("(a|^b)", "b");
  129.   test_match ("a$", "a");
  130.   test_match ("(a$)", "a");
  131.   test_match ("a$|b", "a");
  132.   
  133.   /* You should be able to have empty alternatives if RE_NO_EMPTY_ALTS
  134.      isn't set.  */
  135.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS);
  136.   
  137.   test_match ("|", "");
  138.   test_match ("^|a", "");
  139.   test_match ("^|a", "a");
  140.   test_match ("a|", "");
  141.   test_match ("a|", "a");
  142.   test_match ("a|$", "");
  143.   test_match ("a|$", "a");
  144.   test_match ("a||b", "a");
  145.   test_match ("a||b", "");
  146.   test_match ("a||b", "b");
  147.   test_match ("(|a)", "");
  148.   test_match ("(|a)", "a");
  149.   test_match ("(a|)", "");
  150.   test_match ("(a|)", "a");
  151.  
  152.   TEST_SEARCH ("a|$", "xa", 0, 2);
  153.   TEST_SEARCH ("a|$", "x", 0, 1);
  154.   TEST_SEARCH ("$|b", "x", 0, 1);
  155.   TEST_SEARCH ("$|b", "xb", 0, 2);
  156.   TEST_SEARCH ("c(a|$)", "xca", 0, 3);
  157.   TEST_SEARCH ("c(a|$)", "xc", 0, 2);
  158.   TEST_SEARCH ("c($|b)", "xcb", 0, 3);
  159.   TEST_SEARCH ("c($|b)", "xc", 0, 2);
  160.   TEST_SEARCH ("c($|b$)", "xcb", 0, 3);
  161.   TEST_SEARCH ("c($|b$)", "xc", 0, 2);
  162.   TEST_SEARCH ("c(a$|$)", "xca", 0, 3);
  163.   TEST_SEARCH ("c(a$|$)", "xc", 0, 2);
  164.   TEST_SEARCH ("(a$|b$)|$", "x", 0, 1);
  165.   TEST_SEARCH ("(a$|b$)|$", "xa", 0, 2);
  166.   TEST_SEARCH ("(a$|b$)|$", "xb", 0, 2);
  167.   TEST_SEARCH ("(a$|$)|c$", "x", 0, 1);
  168.   TEST_SEARCH ("(a$|$)|c$", "xa", 0, 2);
  169.   TEST_SEARCH ("(a$|$)|c$", "xc", 0, 2);
  170.   TEST_SEARCH ("($|b$)|c$", "x", 0, 1);
  171.   TEST_SEARCH ("($|b$)|c$", "xb", 0, 2);
  172.   TEST_SEARCH ("($|b$)|c$", "xc", 0, 2);
  173.   TEST_SEARCH ("c$|(a$|$)", "x", 0, 1);
  174.   TEST_SEARCH ("c$|(a$|$)", "xa", 0, 2);
  175.   TEST_SEARCH ("c$|(a$|$)", "xc", 0, 2);
  176.   TEST_SEARCH ("c$|($|b$)", "x", 0, 1);
  177.   TEST_SEARCH ("c$|($|b$)", "xb", 0, 2);
  178.   TEST_SEARCH ("c$|($|b$)", "xc", 0, 2);
  179.   TEST_SEARCH ("$|(a$|b$)", "x", 0, 1);
  180.   TEST_SEARCH ("$|(a$|b$)", "xa", 0, 2);
  181.   TEST_SEARCH ("$|(a$|b$)", "xb", 0, 2);
  182.   TEST_SEARCH ("c(a$|b$)|$", "x", 0, 1);
  183.   TEST_SEARCH ("c(a$|b$)|$", "xca", 0, 3);
  184.   TEST_SEARCH ("c(a$|b$)|$", "xcb", 0, 3);
  185.   TEST_SEARCH ("c(a$|$)|d$", "xc", 0, 2);
  186.   TEST_SEARCH ("c(a$|$)|d$", "xca", 0, 3);
  187.   TEST_SEARCH ("c(a$|$)|d$", "xd", 0, 2);
  188.   TEST_SEARCH ("c($|b$)|d$", "xc", 0, 2);
  189.   TEST_SEARCH ("c($|b$)|d$", "xcb", 0, 3);
  190.   TEST_SEARCH ("c($|b$)|d$", "xd", 0, 2);
  191.   TEST_SEARCH ("d(c$|e((a$|$)))", "xdc", 0, 3);
  192.   TEST_SEARCH ("d(c$|e((a$|$)))", "xde", 0, 3);
  193.   TEST_SEARCH ("d(c$|e((a$|$)))", "xdea", 0, 4);
  194.   TEST_SEARCH ("d(c$|e(($|b$)))", "xdc", 0, 3);
  195.   TEST_SEARCH ("d(c$|e(($|b$)))", "xde", 0, 3);
  196.   TEST_SEARCH ("d(c$|e(($|b$)))", "xdeb", 0, 4);
  197.   TEST_SEARCH ("d($|e((a$|b$)))", "xd", 0, 2);
  198.   TEST_SEARCH ("d($|e((a$|b$)))", "xdea", 0, 4);
  199.   TEST_SEARCH ("d($|e((a$|b$)))", "xdeb", 0, 4);
  200.   TEST_SEARCH ("a(b$|c$)|$", "x", 0, 1);
  201.   TEST_SEARCH ("a(b$|c$)|$", "xab", 0, 3);
  202.   TEST_SEARCH ("a(b$|c$)|$", "xac", 0, 3);
  203.   TEST_SEARCH ("a(b$|$)|d$", "xa", 0, 2);
  204.   TEST_SEARCH ("a(b$|$)|d$", "xab", 0, 3);
  205.   TEST_SEARCH ("a(b$|$)|d$", "xd", 0, 2);
  206.   TEST_SEARCH ("a($|c$)|d$", "xa", 0, 2);
  207.   TEST_SEARCH ("a($|c$)|d$", "xac", 0, 3);
  208.   TEST_SEARCH ("a($|c$)|d$", "xd", 0, 2);
  209.   TEST_SEARCH ("d$|a(b$|$)", "xd", 0, 2);
  210.   TEST_SEARCH ("d$|a(b$|$)", "xa", 0, 2);
  211.   TEST_SEARCH ("d$|a(b$|$)", "xab", 0, 3);
  212.   TEST_SEARCH ("d$|a($|c$)", "xd", 0, 2);
  213.   TEST_SEARCH ("d$|a($|c$)", "xa", 0, 2);
  214.   TEST_SEARCH ("d$|a($|c$)", "xac", 0, 3);
  215.   TEST_SEARCH ("$|a(b$|c$)", "x", 0, 1);
  216.   TEST_SEARCH ("$|a(b$|c$)", "xab", 0, 3);
  217.   TEST_SEARCH ("$|a(b$|c$)", "xac", 0, 3);
  218.   TEST_SEARCH ("(a)(b$|c$)|d$", "xab", 0, 3);
  219.   TEST_SEARCH ("(a)(b$|c$)|d$", "xac", 0, 3);
  220.   TEST_SEARCH ("(a)(b$|c$)|d$", "xd", 0, 2);
  221.   TEST_SEARCH ("(a)(b$|$)|d$", "xa", 0, 2);
  222.   TEST_SEARCH ("(a)(b$|$)|d$", "xab", 0, 3);
  223.   TEST_SEARCH ("(a)(b$|$)|d$", "xd", 0, 2);
  224.   TEST_SEARCH ("(a)($|c$)|d$", "xa", 0, 2);
  225.   TEST_SEARCH ("(a)($|c$)|d$", "xac", 0, 3);
  226.   TEST_SEARCH ("(a)($|c$)|d$", "xd", 0, 2);
  227.   TEST_SEARCH ("d$|(a)(b$|$)", "xd", 0, 2);
  228.   TEST_SEARCH ("d$|(a)(b$|$)", "xa", 0, 2);
  229.   TEST_SEARCH ("d$|(a)(b$|$)", "xab", 0, 3);
  230.   TEST_SEARCH ("d$|(a)($|c$)", "xd", 0, 2);
  231.   TEST_SEARCH ("d$|(a)($|c$)", "xa", 0, 2);
  232.   TEST_SEARCH ("d$|(a)($|c$)", "xac", 0, 3);
  233.   TEST_SEARCH ("$|(a)(b$|c$)", "x", 0, 1);
  234.   TEST_SEARCH ("$|(a)(b$|c$)", "xab", 0, 3);
  235.   TEST_SEARCH ("$|(a)(b$|c$)", "xac", 0, 3);
  236.   TEST_SEARCH ("d$|(c$|(a$|$))", "x", 0, 1);
  237.   TEST_SEARCH ("d$|(c$|(a$|$))", "xd", 0, 2);
  238.   TEST_SEARCH ("d$|(c$|(a$|$))", "xc", 0, 2);
  239.   TEST_SEARCH ("d$|(c$|(a$|$))", "xa", 0, 2);
  240.   TEST_SEARCH ("d$|(c$|($|b$))", "x", 0, 1);
  241.   TEST_SEARCH ("d$|(c$|($|b$))", "xd", 0, 2);
  242.   TEST_SEARCH ("d$|(c$|($|b$))", "xc", 0, 2);
  243.   TEST_SEARCH ("d$|(c$|($|b$))", "xb", 0, 2);
  244.   TEST_SEARCH ("d$|($|(a$|b$))", "x", 0, 1);
  245.   TEST_SEARCH ("d$|($|(a$|b$))", "xd", 0, 2);
  246.   TEST_SEARCH ("d$|($|(a$|b$))", "xa", 0, 2);
  247.   TEST_SEARCH ("d$|($|(a$|b$))", "xb", 0, 2);
  248.   TEST_SEARCH ("$|(c$|(a$|b$))", "x", 0, 1);
  249.   TEST_SEARCH ("$|(c$|(a$|b$))", "xc", 0, 2);
  250.   TEST_SEARCH ("$|(c$|(a$|b$))", "xa", 0, 2);
  251.   TEST_SEARCH ("$|(c$|(a$|b$))", "xb", 0, 2);
  252.   TEST_SEARCH ("d$|c(a$|$)", "xd", 0, 2);
  253.   TEST_SEARCH ("d$|c(a$|$)", "xc", 0, 2);
  254.   TEST_SEARCH ("d$|c(a$|$)", "xca", 0, 3);
  255.   TEST_SEARCH ("d$|c($|b$)", "xd", 0, 2);
  256.   TEST_SEARCH ("d$|c($|b$)", "xc", 0, 2);
  257.   TEST_SEARCH ("d$|c($|b$)", "xcb", 0, 3);
  258.   TEST_SEARCH ("$|c(a$|b$)", "x", 0, 1);
  259.   TEST_SEARCH ("$|c(a$|b$)", "xca", 0, 3);
  260.   TEST_SEARCH ("$|c(a$|b$)", "xcb", 0, 3);
  261.   TEST_SEARCH ("e(d$|c((a$|$)))", "xed", 0, 3);
  262.   TEST_SEARCH ("e(d$|c((a$|$)))", "xec", 0, 3);
  263.   TEST_SEARCH ("e(d$|c((a$|$)))", "xeca", 0, 3);
  264.   TEST_SEARCH ("e(d$|c(($|b$)))", "xed", 0, 3);
  265.   TEST_SEARCH ("e(d$|c(($|b$)))", "xec", 0, 3);
  266.   TEST_SEARCH ("e(d$|c(($|b$)))", "xecb", 0, 4);
  267.   TEST_SEARCH ("e($|c((a$|b$)))", "xe", 0, 2);
  268.   TEST_SEARCH ("e($|c((a$|b$)))", "xeca", 0, 4);
  269.   TEST_SEARCH ("e($|c((a$|b$)))", "xecb", 0, 4);
  270.   TEST_SEARCH ("ed$|(c((a$|$)))", "xed", 0, 3);
  271.   TEST_SEARCH ("ed$|(c((a$|$)))", "xc", 0, 2);
  272.   TEST_SEARCH ("ed$|(c((a$|$)))", "xca", 0, 3);
  273.   TEST_SEARCH ("ed$|(c(($|b$)))", "xed", 0, 3);
  274.   TEST_SEARCH ("ed$|(c(($|b$)))", "xc", 0, 2);
  275.   TEST_SEARCH ("ed$|(c(($|b$)))", "xcb", 0, 3);
  276.   TEST_SEARCH ("$|(c((a$|b$)))", "x", 0, 1);
  277.   TEST_SEARCH ("$|(c((a$|b$)))", "xca", 0, 3);
  278.   TEST_SEARCH ("$|(c((a$|b$)))", "xcb", 0, 3);
  279.   TEST_SEARCH ("d$|($|(a|b)$)", "x", 0, 1);
  280.   TEST_SEARCH ("d$|($|(a|b)$)", "xa", 0, 2);
  281.   TEST_SEARCH ("d$|($|(a|b)$)", "xb", 0, 2);
  282.   TEST_SEARCH ("$|(c$|(a|b)$)", "x", 0, 1);
  283.   TEST_SEARCH ("$|(c$|(a|b)$)", "xc", 0, 2);
  284.   TEST_SEARCH ("$|(c$|(a|b)$)", "xa", 0, 2);
  285.   TEST_SEARCH ("$|(c$|(a|b)$)", "xb", 0, 2);
  286.  
  287.   re_set_syntax (0);
  288.   test_match ("[^\n]", "a");
  289.   test_match ("[^a]", "\n");
  290.  
  291.   TEST_SEARCH ("^a", "b\na", 0, 3);
  292.   TEST_SEARCH ("b$", "b\na", 0, 3);
  293.  
  294.   test_case_fold ("[!-`]", "A");
  295.   test_case_fold ("[!-`]", "a");
  296.   
  297.   re_set_syntax (RE_CONTEXT_INDEP_OPS | RE_NO_BK_VBAR | RE_NO_BK_PARENS 
  298.                  | RE_NO_BK_BRACES | RE_INTERVALS);
  299.   valid_nonposix_pattern ("()^a");
  300.   valid_nonposix_pattern ("()\\1^a");
  301.  
  302.   /* Per Cederqvist (cedar@lysator.liu.se) bug.  */
  303.  
  304.   re_set_syntax (RE_SYNTAX_EMACS);
  305.  
  306.   /* One `a' before the \n and 638 a's after it.  */
  307.   test_search_return (0, "\\(.*\\)\n\\(\\(.\\|\n\\)*\\)$", "a\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  308.  
  309.   /* No a's before the \n and 639 a's after it.  */
  310.   test_search_return (0, "\\(.*\\)\n\\(\\(.\\|\n\\)*\\)$", "\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  311.  
  312.   /* One `a' before the \n and 639 a's after it.  */
  313.   test_search_return (0, "\\(.*\\)\n\\(\\(.\\|\n\\)*\\)$", "a\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  314.  
  315.   /* No a's before the \n and 640 a's after it.  */
  316.   test_search_return (0, "\\(.*\\)\n\\(\\(.\\|\n\\)*\\)$", "\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  317.  
  318.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS);
  319.   TEST_SEARCH ("^(^a)", "ab", 0, 2);
  320.   TEST_SEARCH ("(a$)$", "ba", 0, 2);
  321.   test_match ("a|$b", "$b");
  322.   
  323.   /* Mike's curiosity item.  */
  324.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS);
  325.   test_all_registers ("(foo|foobar)(foo|bar)*\\1(foo|bar)*",
  326.                 "foobarfoobar", "",
  327.     0, 12,  0, 3,  3, 6,  9, 12,  -1, -1,   -1, -1,   -1, -1,   -1, -1,  
  328.     -1, -1,   -1, -1);
  329.  
  330.   /* Another one from Mike.  */
  331.   test_match ("(foo|foobarfoo)(bar)*", "foobarfoo");
  332.   
  333.   /* And another.  */
  334.   test_match("(foo|foobar)(bar|barfoo)?\\1", "foobarfoobar");
  335.   
  336.   re_set_syntax (RE_NO_BK_PARENS | RE_INTERVALS | RE_NO_BK_VBAR
  337.                  | RE_NO_BK_BRACES);  /* xx get new ones from ext.*/
  338.   test_match ("((a{0,}{0,0}()\\3\\b\\B\\<\\>\\`\\')|b)*", "bb");
  339.   test_all_registers ("((a{0,}{0,0}()\\3\\b\\B\\<\\>\\`\\')|b)*", "", "bb", 
  340.     0, 2, 1, 2, -1, -1,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  341.     -1, -1);
  342.  
  343.   test_match ("((a+?*{0,}{0,0}()\\3\\b\\B\\<\\>\\`\\')|b)", "b");
  344.   test_all_registers ("((a+?*{0,}{0,0}()\\3\\b\\B\\<\\>\\`\\')|b)", "", "b",
  345.     0, 1, 0, 1, -1, -1,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  346.     -1, -1);
  347.  
  348.                         /* Valid anchoring.  */
  349.           /* See generic_test.c and extended_test.c for more search
  350.              tests. xx Not sure all these tests are represented in the
  351.              search tests.  */
  352.           
  353.   re_set_syntax (RE_NO_BK_PARENS | RE_NO_BK_VBAR);
  354.   valid_nonposix_pattern 
  355.     ("(((((((((((((((((((((((((((((((((^a)))))))))))))))))))))))))))))))))");
  356.   valid_nonposix_pattern 
  357.     ("(((((((((((((((((((((((((((((((((a$)))))))))))))))))))))))))))))))))");
  358.   valid_nonposix_pattern ("\\b\\B\\<\\>\\`\\'^a");
  359.   valid_nonposix_pattern ("a$\\b\\B\\<\\>\\`\\'");
  360.   valid_nonposix_pattern ("(^a)");
  361.   valid_nonposix_pattern ("(a$)");
  362.   valid_nonposix_pattern ("(^a)b");
  363.   valid_nonposix_pattern ("b(a$)");
  364.   valid_nonposix_pattern ("(^a|^b)c");
  365.   valid_nonposix_pattern ("c(a$|b$)");
  366.   valid_nonposix_pattern ("(^a|^b)|^c");
  367.   valid_nonposix_pattern ("(a$|b$)|c$");
  368.   valid_nonposix_pattern ("^c|(^a|^b)");
  369.   valid_nonposix_pattern ("c$|(a$|b$)");
  370.   valid_nonposix_pattern ("(^a|^b)c|^d");
  371.   valid_nonposix_pattern ("c(a$|b$)|d$");
  372.   valid_nonposix_pattern ("(((^a|^b))c|^d)e");
  373.   valid_nonposix_pattern ("(c((a|b))|d)e$");
  374.   valid_nonposix_pattern ("^d(c|e((a|b)))");
  375.   valid_nonposix_pattern ("d(c$|e((a$|b$)))");
  376.   valid_nonposix_pattern ("(((^a|^b))c)|^de");
  377.   valid_nonposix_pattern ("(((a|b))c$)|de$");
  378.  
  379.   valid_nonposix_pattern ("((a$)$)$");
  380.   valid_nonposix_pattern ("^(^(^a))");
  381.  
  382.   valid_nonposix_pattern ("^de|^(c((a|b)))");
  383.   valid_nonposix_pattern ("^de|(^c((a|b)))");
  384.   valid_nonposix_pattern ("de$|(c((a|b)$))");
  385.   valid_nonposix_pattern ("de$|(c((a|b))$)");
  386.   valid_nonposix_pattern ("de$|(c((a|b)))$");
  387.  
  388.   valid_nonposix_pattern ("^a(b|c)|^d");
  389.   valid_nonposix_pattern ("a(b$|c$)|d$");
  390.   valid_nonposix_pattern ("^d|^a(b|c)");
  391.   valid_nonposix_pattern ("d$|a(b$|c$)");
  392.   valid_nonposix_pattern ("^d|^(b|c)a");
  393.   valid_nonposix_pattern ("d$|(b|c)a$");
  394.   valid_nonposix_pattern ("^(a)(b|c)|^d");
  395.   valid_nonposix_pattern ("(a)(b|c)$|d$");
  396.   valid_nonposix_pattern ("(^a)(b|c)|^d");
  397.   valid_nonposix_pattern ("(a)(b$|c$)|d$");
  398.   valid_nonposix_pattern ("^d|^(b|c)(a)");
  399.   valid_nonposix_pattern ("d$|(b|c)(a)$");
  400.   valid_nonposix_pattern ("^d|(^b|^c)(a)");
  401.   valid_nonposix_pattern ("d$|(b|c)(a$)");
  402.   valid_nonposix_pattern ("^d|^(a)(b|c)");
  403.   valid_nonposix_pattern ("^d|(^a)(b|c)");
  404.   valid_nonposix_pattern ("d$|(a)(b$|c$)");
  405.   valid_nonposix_pattern ("((^a|^b)|^c)|^d");
  406.   valid_nonposix_pattern ("d$|(c$|(a$|b$))");
  407.  
  408.  
  409.   /* Tests shouldn't match.  */
  410.   test_should_match = false;
  411.  
  412.   /* Test that RE_CONTEXT_INVALID_OPS has precedence over
  413.      RE_CONTEXT_INDEP_OPS.  */
  414.  
  415.   re_set_syntax (RE_CONTEXT_INDEP_OPS | RE_CONTEXT_INVALID_OPS
  416.                  | RE_NO_BK_VBAR | RE_NO_BK_PARENS 
  417.                  | RE_NO_BK_BRACES | RE_INTERVALS);
  418.   INVALID_PATTERN ("*");
  419.   INVALID_PATTERN ("^*");
  420.   INVALID_PATTERN ("a|*");
  421.   INVALID_PATTERN ("(*)");
  422.  
  423.   INVALID_PATTERN ("^+");
  424.   INVALID_PATTERN ("+");
  425.   INVALID_PATTERN ("a|+");
  426.   INVALID_PATTERN ("(+)");
  427.  
  428.   INVALID_PATTERN ("^?");
  429.   INVALID_PATTERN ("?");
  430.   INVALID_PATTERN ("a|?");
  431.   INVALID_PATTERN ("(?)");
  432.  
  433.   INVALID_PATTERN ("^{1}");
  434.   INVALID_PATTERN ("{1}");
  435.   INVALID_PATTERN ("a|{1}");
  436.   INVALID_PATTERN ("({1})");
  437.  
  438. #if 0
  439.   /* No longer have this syntax option -- POSIX says empty alternatives
  440.      are undefined as of draft 11.2.  */
  441.  
  442.   /* You can't have empty alternatives if RE_NO_EMPTY_ALTS is set.  */
  443.   
  444.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS | RE_NO_EMPTY_ALTS);
  445.   
  446.   INVALID_PATTERN ("|");
  447.   INVALID_PATTERN ("^|a");
  448.   INVALID_PATTERN ("a|");
  449.   INVALID_PATTERN ("a||");
  450.   INVALID_PATTERN ("a||b");
  451.   INVALID_PATTERN ("(|a)");
  452.   INVALID_PATTERN ("(a|)");
  453.   INVALID_PATTERN ("(a|)");
  454.  
  455.  
  456.   /* Test above with `\(' and `\)'.  */
  457.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_EMPTY_ALTS);
  458.   INVALID_PATTERN ("\\(|a\\)");
  459.   INVALID_PATTERN ("\\(a|\\)");
  460.  
  461.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS | RE_NO_EMPTY_ALTS);
  462.   INVALID_PATTERN ("(|)()$|d$");
  463. #endif
  464.  
  465.   /* Test grouping.  */
  466.   test_match ("()", "a");            
  467.  
  468.   /* Test backslashed intervals that are CONTEXTly invalid if have
  469.      nothing on which to operate.  */
  470.  
  471.   re_set_syntax (RE_INTERVALS | RE_CONTEXT_INVALID_OPS);
  472.   INVALID_PATTERN ("\\{1\\}");
  473.  
  474.   re_set_syntax (0);
  475.   test_match ("z-a", "a");
  476.  
  477.   re_set_syntax (RE_BK_PLUS_QM);
  478.   INVALID_PATTERN ("a*\\");
  479.   
  480.   re_set_syntax (0);
  481.   INVALID_PATTERN ("a*\\");
  482.   
  483.   re_set_syntax (RE_BACKSLASH_ESCAPE_IN_LISTS);
  484.   INVALID_PATTERN ("[\\");
  485.   
  486. #if 0
  487.   /* Empty groups are always ok now.  (13 Sep 92)  */
  488.   re_set_syntax (RE_NO_BK_VBAR | RE_NO_BK_PARENS | RE_NO_EMPTY_GROUPS);
  489.   INVALID_PATTERN ("(|)()$|d$");
  490. #endif
  491.  
  492.   printf ("\nFinished non-POSIX tests.\n");
  493. }
  494.  
  495.  
  496.  
  497. /*
  498. Local variables:
  499. make-backup-files: t
  500. version-control: t
  501. trim-versions-without-asking: nil
  502. End:
  503. */
  504.