Diff for /gforth/regexp-test.fs between versions 1.14 and 1.23

version 1.14, 2010/09/05 22:18:54 version 1.23, 2010/12/31 18:09:02
Line 1 Line 1
 \ regexp test  \ regexp test
   
 \ Copyright (C) 2005,2007,2009 Free Software Foundation, Inc.  \ Copyright (C) 2005,2007,2009,2010 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 17 Line 17
 \ You should have received a copy of the GNU General Public License  \ You should have received a copy of the GNU General Public License
 \ along with this program. If not, see http://www.gnu.org/licenses/.  \ along with this program. If not, see http://www.gnu.org/licenses/.
   
   : ?depth  depth IF  ." unbalanced: " .s clearstack cr  THEN ;
   
 charclass [bl-]   blanks +class '-' +char  charclass [bl-]   blanks +class '-' +char
 charclass [0-9(]  '(' +char '0' '9' ..char  charclass [0-9(]  '(' +char '0' '9' ..char
   
Line 29  charclass [0-9(]  '(' +char '0' '9' ..ch Line 31  charclass [0-9(]  '(' +char '0' '9' ..ch
     IF  '(' emit \1 type ." ) " \2 type '-' emit \3 type ."  succeeded"      IF  '(' emit \1 type ." ) " \2 type '-' emit \3 type ."  succeeded"
     ELSE \0 type ."  failed " THEN ;      ELSE \0 type ."  failed " THEN ;
   
 : ?tel-s ( addr u -- ) ?tel ."  should succeed" space depth . cr ;  : ?tel-s ( addr u -- ) ?tel ."  should succeed" space cr ?depth ;
 : ?tel-f ( addr u -- ) ?tel ."  should fail" space depth . cr ;  : ?tel-f ( addr u -- ) ?tel ."  should fail" space cr ?depth ;
   
 ." --- Telephone number match ---" cr  ." --- Telephone number match ---" cr
 s" (123) 456-7890" ?tel-s  s" (123) 456-7890" ?tel-s
Line 48  s" 123 456-78909" ?tel-f Line 50  s" 123 456-78909" ?tel-f
   
 : ?tel2 ( addr u -- ) telnum2  : ?tel2 ( addr u -- ) telnum2
     IF   '(' emit \1 type ." ) " \2 type '-' emit \3 type ."  succeeded"      IF   '(' emit \1 type ." ) " \2 type '-' emit \3 type ."  succeeded"
     ELSE \0 type ."  failed " THEN  cr ;      ELSE \0 type ."  failed " THEN  cr ?depth ;
 ." --- Telephone number search ---" cr  ." --- Telephone number search ---" cr
 s" blabla (123) 456-7890" ?tel2  s" blabla (123) 456-7890" ?tel2
 s" blabla (123) 456-7890 " ?tel2  s" blabla (123) 456-7890 " ?tel2
Line 69  charclass [0-9,./:]  '0' '9' ..char ',' Line 71  charclass [0-9,./:]  '0' '9' ..char ','
   
 : ?num  : ?num
     (( // \( {++ [0-9,./:] c? ++} \) ))      (( // \( {++ [0-9,./:] c? ++} \) ))
     IF  \1 type  ELSE  \0 type ."  failed"  THEN   cr ;      IF  \1 type  ELSE  \0 type ."  failed"  THEN   cr ?depth ;
   
 s" 1234" ?num  s" 1234" ?num
 s" 12,345abc" ?num  s" 12,345abc" ?num
Line 90  s" Hier kommt nichts vor" ?string Line 92  s" Hier kommt nichts vor" ?string
   
 : ?foos  : ?foos
     (( \( {** =" foo" **} \) ))      (( \( {** =" foo" **} \) ))
     IF  \1 type  ELSE  \0 type ."  failed"  THEN  cr ;      IF  \1 type  ELSE  \0 type ."  failed"  THEN  cr ?depth ;
   
 : ?foobars  : ?foobars
     (( // \( {** =" foo" **} \) \( {++ =" bar" ++} \) ))      (( // \( {** =" foo" **} \) \( {++ =" bar" ++} \) ))
     IF  \1 type ',' emit \2 type  ELSE  \0 type ."  failed"  THEN  cr ;      IF  \1 type ',' emit \2 type  ELSE  \0 type ."  failed"  THEN  cr ?depth ;
   
 : ?foos1  : ?foos1
     (( // \( {+ =" foo" +} \) \( {++ =" bar" ++} \) ))      (( // \( {+ =" foo" +} \) \( {++ =" bar" ++} \) ))
     IF  \1 type ',' emit \2 type  ELSE  \0 type ."  failed"  THEN  cr ;      IF  \1 type ',' emit \2 type  ELSE  \0 type ."  failed"  THEN  cr ?depth ;
   
 s" foobar" ?foos  s" foobar" ?foos
 s" foofoofoobar" ?foos  s" foofoofoobar" ?foos
Line 132  s" aab" ?aab 0= [IF] .( aab failed!) cr Line 134  s" aab" ?aab 0= [IF] .( aab failed!) cr
     (( // \( =" abcdefghi" \) ))      (( // \( =" abcdefghi" \) ))
     IF  \1 type  cr THEN ;      IF  \1 type  cr THEN ;
   
 here 4096 allocate throw 4096 + 8 - constant test-string  4096 allocate throw 4096 + 8 - constant test-string
  s" abcdefgh" test-string swap cmove>   s" abcdefgh" test-string swap cmove>
  .( provoking overflow [i.e. see valgrind output]) cr   .( provoking overflow [i.e. see valgrind output]) cr
  test-string . cr   test-string . cr
  test-string 8 ?long-string   test-string 8 ?long-string
 .( done) cr  .( done) cr ?depth
   
 \ simple replacement test  \ simple replacement test
     
Line 147  here 4096 allocate throw 4096 + 8 - cons Line 149  here 4096 allocate throw 4096 + 8 - cons
 : test-delnum  ( addr u addr' u' -- )  : test-delnum  ( addr u addr' u' -- )
    2swap delnum 2over 2over str= 0= IF     2swap delnum 2over 2over str= 0= IF
       ." test-delnum: got '" type ." ', expected '" type ." '"        ." test-delnum: got '" type ." ', expected '" type ." '"
    ELSE  2drop 2drop ." passed" cr  THEN ;     ELSE  2drop 2drop ." test-delnum passed" cr  THEN  ?depth ;
 s" 0"  s" " test-delnum  s" 0"  s" " test-delnum
 s" 00"  s" " test-delnum  s" 00"  s" " test-delnum
 s" 0a"  s" a" test-delnum  s" 0a"  s" a" test-delnum
Line 158  s" aa"  s" aa" test-delnum Line 160  s" aa"  s" aa" test-delnum
 s" hello # test " delcomment type cr  s" hello # test " delcomment type cr
 : delparents  ( addr u -- addr' u' )  s// ` ( {* .? *} ` ) >> s" ()" //g ;  : delparents  ( addr u -- addr' u' )  s// ` ( {* .? *} ` ) >> s" ()" //g ;
 s" delete (test) and (another test) " delparents type cr  s" delete (test) and (another test) " delparents type cr
   ?depth
   
 \ replacement tests  \ replacement tests
   
Line 170  s" delete (test) and (another test) " de Line 173  s" delete (test) and (another test) " de
   \3 s>number drop + 0 <# 's' hold #s #> //g ;    \3 s>number drop + 0 <# 's' hold #s #> //g ;
   
 s" bla 12:34:56 fasel 00:01:57 blubber" 2dup type hms>s  s" bla 12:34:56 fasel 00:01:57 blubber" 2dup type hms>s
 ."  replaced by " 2dup type  ."  -> " 2dup type
 s" bla 45296s fasel 117s blubber" str= [IF] .(  ok) [ELSE] .(  failed) [THEN] cr  s" bla 45296s fasel 117s blubber" str= [IF] .(  ok) [ELSE] .(  failed) [THEN] cr
   ?depth
   
 : hms>s,del() ( addr u -- addr' u' )  : hms>s,del() ( addr u -- addr' u' )
   s// {{ \( \d \d \) ` : \( \d \d \) ` : \( \d \d \)    s// {{ ` ( // ` ) >> <<" ()"
         || \( \d \d \) ` : \( \d \d \) ` : \( \d \d \)
          >> \1 s>number drop 60 *           >> \1 s>number drop 60 *
             \2 s>number drop + 60 *              \2 s>number drop + 60 *
             \3 s>number drop + 0 <# 's' hold #s #> <<              \3 s>number drop + 0 <# 's' hold #s #> <<
          || ` ( // ` ) >> <<" "  
       }} LEAVE //s ;        }} LEAVE //s ;
   
 \ doesn't work yet  s" (bla) 12:34:56 (fasel) 00:01:57 (blubber)" 2dup type hms>s,del() ."  -> " type cr
 \ s" (bla) 12:34:56 (fasel) 00:01:57 (blubber)" 2dup type hms>s,del() space type cr  
   \ more tests from David K├╝hling
   
   require test/ttester.fs
   
   : underflow1  ( c-addr u -- flag )
      (( {{
            {{ ` - || }} \d
            || \d
         }} )) ;
   T{ s" -1dummy" underflow1 -> true }T
   
   : underflow2  ( -- )
      (( \( {{ \s {** \s **} 
            || =" /*" // =" */"
            || =" //" {** \d **} }} \) )) ;
   T{ s" /*10203030203030404*/   " underflow2 -> true }T
   T{ pad 0 underflow2 -> false }T
   
   charclass [*] '* +char
   charclass [*/] '* +char '/ +char
   
   : underflow3  ( -- )
      ((
         =" /*"
         \( {** {{ [*] -c? || ` * [*/] -c? }} **} \)
         {++ ` * ++} ` /
      )) ;
   
   \ this still seems to be too complicated
   T{ s" /*10203030203030404*/   " underflow3 .s -> true }T
   \1 type cr
   
   : underflow4  ( -- )
      (( \( {{ {** \d **} || {** \d **} }} \d \) )) ;
   
   T{ s" 0  " underflow4 -> true }T
   
 script? [IF] bye [THEN]  script? [IF] bye [THEN]

Removed from v.1.14  
changed lines
  Added in v.1.23


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>