2005-01-13 17:06:21 +00:00
/*
*
* Copyright ( c ) 2004
2005-01-21 17:28:42 +00:00
* John Maddock
2005-01-13 17:06:21 +00:00
*
* Use , modification and distribution are subject to the
* Boost Software License , Version 1.0 . ( See accompanying file
* LICENSE_1_0 . txt or copy at http : //www.boost.org/LICENSE_1_0.txt)
*
*/
# include "test.hpp"
# ifdef BOOST_MSVC
# pragma warning(disable:4127)
# endif
2005-09-14 12:20:41 +00:00
void test_emacs2 ( ) ;
2005-01-13 17:06:21 +00:00
void test_emacs ( )
{
using namespace boost : : regex_constants ;
// now try operator + :
TEST_REGEX_SEARCH ( " ab+ " , emacs , " a " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab+ " , emacs , " ab " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab+ " , emacs , " sssabbbbbbsss " , match_default , make_array ( 3 , 10 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab+c+ " , emacs , " abbb " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab+c+ " , emacs , " accc " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab+c+ " , emacs , " abbcc " , match_default , make_array ( 0 , 5 , - 2 , - 2 ) ) ;
TEST_INVALID_REGEX ( " \\ <+ " , emacs ) ;
TEST_INVALID_REGEX ( " \\ >+ " , emacs ) ;
TEST_REGEX_SEARCH ( " \n + " , emacs , " \n \n " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ + " , emacs , " + " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ + " , emacs , " ++ " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ ++ " , emacs , " ++ " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
// now try operator ?
TEST_REGEX_SEARCH ( " a? " , emacs , " b " , match_default , make_array ( 0 , 0 , - 2 , 1 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab? " , emacs , " a " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab? " , emacs , " ab " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab? " , emacs , " sssabbbbbbsss " , match_default , make_array ( 3 , 5 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab?c? " , emacs , " a " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab?c? " , emacs , " abbb " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab?c? " , emacs , " accc " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ab?c? " , emacs , " abcc " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_INVALID_REGEX ( " \\ <? " , emacs ) ;
TEST_INVALID_REGEX ( " \\ >? " , emacs ) ;
TEST_REGEX_SEARCH ( " \n ? " , emacs , " \n \n " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , 2 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ ? " , emacs , " ? " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ ? " , emacs , " ? " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ ?? " , emacs , " ?? " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , 2 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a*? " , emacs , " aa " , match_default , make_array ( 0 , 0 , - 2 , 0 , 1 , - 2 , 1 , 1 , - 2 , 1 , 2 , - 2 , 2 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ^a*?$ " , emacs , " aa " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ^.*?$ " , emacs , " aa " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ^ \\ (a \\ )*?$ " , emacs , " aa " , match_default , make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " ^[ab]*?$ " , emacs , " aa " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a?? " , emacs , " aa " , match_default , make_array ( 0 , 0 , - 2 , 0 , 1 , - 2 , 1 , 1 , - 2 , 1 , 2 , - 2 , 2 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a+? " , emacs , " aa " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ {1,3 \\ }? " , emacs , " aaa " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , 2 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ w+?w " , emacs , " ...ccccccwcccccw " , match_default , make_array ( 3 , 10 , - 2 , 10 , 16 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ W+ \\ w+?w " , emacs , " ...ccccccwcccccw " , match_default , make_array ( 0 , 10 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ | \\ w+? " , emacs , " abd " , match_default , make_array ( 0 , 1 , - 2 , 1 , 2 , - 2 , 2 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ | \\ w+? " , emacs , " abcd " , match_default , make_array ( 0 , 3 , - 2 , 3 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " < \\ ss*tag[^>]*> \\ (.*? \\ )< \\ ss*/tag \\ ss*> " , emacs , " <tag>here is some text</tag> <tag></tag> " , match_default , make_array ( 1 , 29 , 6 , 23 , - 2 , 30 , 41 , 35 , 35 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " < \\ ss*tag[^>]*> \\ (.*? \\ )< \\ ss*/tag \\ ss*> " , emacs , " < tag attr= \" something \" >here is some text< /tag > <tag></tag> " , match_default , make_array ( 1 , 49 , 24 , 41 , - 2 , 50 , 61 , 55 , 55 , - 2 , - 2 ) ) ;
TEST_INVALID_REGEX ( " a \\ {1,3 \\ } \\ {1 \\ } " , emacs ) ;
TEST_INVALID_REGEX ( " a** " , emacs ) ;
TEST_INVALID_REGEX ( " a++ " , emacs ) ;
TEST_REGEX_SEARCH ( " \\ <abcd " , emacs , " abcd " , match_default , make_array ( 2 , 6 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ <ab " , emacs , " cab " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ <ab " , emacs , " \n ab " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ <tag " , emacs , " ::tag " , match_default , make_array ( 2 , 5 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ <abcd " , emacs , " abcd " , match_default | match_not_bow , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ <abcd " , emacs , " abcd " , match_default | match_not_bow , make_array ( 2 , 6 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ < " , emacs , " ab " , match_default | match_not_bow , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " . \\ <. " , emacs , " ab " , match_default | match_not_bow , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " . \\ <. " , emacs , " b " , match_default | match_not_bow , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
// word end:
TEST_REGEX_SEARCH ( " abc \\ > " , emacs , " abc " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ > " , emacs , " abcd " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ > " , emacs , " abc \n " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ > " , emacs , " abc:: " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ (?: \\ >.. \\ |$ \\ ) " , emacs , " abc:: " , match_default , make_array ( 0 , 5 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ > " , emacs , " " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " . \\ >. " , emacs , " " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ > " , emacs , " abc " , match_default | match_not_eow , make_array ( - 2 , - 2 ) ) ;
// word boundary:
TEST_REGEX_SEARCH ( " \\ babcd " , emacs , " abcd " , match_default , make_array ( 2 , 6 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ bab " , emacs , " cab " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ bab " , emacs , " \n ab " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ btag " , emacs , " ::tag " , match_default , make_array ( 2 , 5 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ b " , emacs , " abc " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ b " , emacs , " abcd " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ b " , emacs , " abc \n " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ b " , emacs , " abc:: " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ babcd " , emacs , " abcd " , match_default | match_not_bow , make_array ( - 2 , - 2 ) ) ;
// within word:
TEST_REGEX_SEARCH ( " \\ B " , emacs , " ab " , match_default , make_array ( 1 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ Bb " , emacs , " ab " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ B " , emacs , " ab " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ B " , emacs , " a " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ B " , emacs , " a " , match_default , make_array ( - 2 , - 2 ) ) ;
// buffer operators:
TEST_REGEX_SEARCH ( " \\ `abc " , emacs , " abc " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ `abc " , emacs , " \n abc " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ `abc " , emacs , " abc " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ ' " , emacs , " abc " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ ' " , emacs , " abc \n " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " abc \\ ' " , emacs , " abc " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ |b " , emacs , " a " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ |b " , emacs , " b " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ |b \\ |c " , emacs , " c " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ | \\ (b \\ ) \\ |. " , emacs , " b " , match_default , make_array ( 0 , 1 , 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a \\ ) \\ |b \\ |. " , emacs , " a " , match_default , make_array ( 0 , 1 , 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ (b \\ |c \\ ) " , emacs , " ab " , match_default , make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ (b \\ |c \\ ) " , emacs , " ac " , match_default , make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a \\ (b \\ |c \\ ) " , emacs , " ad " , match_default , make_array ( - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a \\ |b \\ |c \\ ) " , emacs , " c " , match_default , make_array ( 0 , 1 , 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a \\ | \\ (b \\ ) \\ |. \\ ) " , emacs , " b " , match_default , make_array ( 0 , 1 , 0 , 1 , 0 , 1 , - 2 , - 2 ) ) ;
TEST_INVALID_REGEX ( " \\ |c " , emacs ) ;
TEST_INVALID_REGEX ( " c \\ | " , emacs ) ;
TEST_INVALID_REGEX ( " \\ ( \\ | \\ ) " , emacs ) ;
TEST_INVALID_REGEX ( " \\ (a \\ | \\ ) " , emacs ) ;
TEST_INVALID_REGEX ( " \\ ( \\ |a \\ ) " , emacs ) ;
TEST_REGEX_SEARCH ( " \\ (?:abc \\ )+ " , emacs , " xxabcabcxx " , match_default , make_array ( 2 , 8 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (?:a+ \\ ) \\ (b+ \\ ) " , emacs , " xaaabbbx " , match_default , make_array ( 1 , 7 , 4 , 7 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a+ \\ ) \\ (?:b+ \\ ) " , emacs , " xaaabbba " , match_default , make_array ( 1 , 7 , 1 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (?: \\ (a+ \\ )b+ \\ ) " , emacs , " xaaabbba " , match_default , make_array ( 1 , 7 , 1 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (?:a+ \\ (b+ \\ ) \\ ) " , emacs , " xaaabbba " , match_default , make_array ( 1 , 7 , 4 , 7 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " a+ \\ (?#b+ \\ )b+ " , emacs , " xaaabbba " , match_default , make_array ( 1 , 7 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a \\ ) \\ (?:b \\ |$ \\ ) " , emacs , " ab " , match_default , make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ (a \\ ) \\ (?:b \\ |$ \\ ) " , emacs , " a " , match_default , make_array ( 0 , 1 , 0 , 1 , - 2 , - 2 ) ) ;
2005-09-14 12:20:41 +00:00
test_emacs2 ( ) ;
}
void test_emacs2 ( )
{
using namespace boost : : regex_constants ;
2005-01-13 17:06:21 +00:00
TEST_REGEX_SEARCH ( " \\ ss+ " , emacs , " a b " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ Ss+ " , emacs , " ab " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ sw+ " , emacs , " ab " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ Sw+ " , emacs , " a b " , match_default , make_array ( 1 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s_+ " , emacs , " $&*+-_<> " , match_default , make_array ( 1 , 9 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S_+ " , emacs , " $&*+-_<>b " , match_default , make_array ( 8 , 9 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s.+ " , emacs , " .,;!? " , match_default , make_array ( 1 , 6 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S.+ " , emacs , " .,;!?b " , match_default , make_array ( 5 , 6 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s(+ " , emacs , " ([{ " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S(+ " , emacs , " ([{ " , match_default , make_array ( 3 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s)+ " , emacs , " )]} " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S)+ " , emacs , " )]} " , match_default , make_array ( 3 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s \" + " , emacs , " \" '` " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S \" + " , emacs , " \" '` " , match_default , make_array ( 3 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s'+ " , emacs , " ',# " , match_default , make_array ( 0 , 3 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S'+ " , emacs , " ',# " , match_default , make_array ( 3 , 4 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s<+ " , emacs , " ; " , match_default , make_array ( 0 , 1 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S<+ " , emacs , " ; " , match_default , make_array ( 1 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ s>+ " , emacs , " \n \f " , match_default , make_array ( 0 , 2 , - 2 , - 2 ) ) ;
TEST_REGEX_SEARCH ( " \\ S>+ " , emacs , " \n \f " , match_default , make_array ( 2 , 3 , - 2 , - 2 ) ) ;
}