File:  [gforth] / gforth / test / other.fs
Revision 1.22: download - view: text, annotated - select for diffs
Sun Mar 9 15:17:07 2003 UTC (18 years, 7 months ago) by anton
Branches: MAIN
CVS tags: v0-6-2, v0-6-1, v0-6-0, HEAD
updated copyright years

    1: \ various tests, especially for bugs that have been fixed
    2: 
    3: \ Copyright (C) 1997,1998,2000,2003 Free Software Foundation, Inc.
    4: 
    5: \ This file is part of Gforth.
    6: 
    7: \ Gforth is free software; you can redistribute it and/or
    8: \ modify it under the terms of the GNU General Public License
    9: \ as published by the Free Software Foundation; either version 2
   10: \ of the License, or (at your option) any later version.
   11: 
   12: \ This program is distributed in the hope that it will be useful,
   13: \ but WITHOUT ANY WARRANTY; without even the implied warranty of
   14: \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15: \ GNU General Public License for more details.
   16: 
   17: \ You should have received a copy of the GNU General Public License
   18: \ along with this program; if not, write to the Free Software
   19: \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   20: 
   21: \ combination of marker and locals
   22: marker foo1
   23: marker foo2
   24: foo2
   25: 
   26: : bar { xxx yyy } ;
   27: 
   28: foo1
   29: 
   30: \ locals in an if structure
   31: : locals-test1
   32:     lp@ swap
   33:     if
   34: 	{ a } a
   35:     else
   36:     endif
   37:     lp@ <> abort" locals in if error 1" ;
   38: 
   39: 0 locals-test1
   40: 1 locals-test1
   41: 
   42: 
   43: \ recurse and locals
   44: 
   45: : fac { n -- n! }
   46:     n 0>
   47:     if
   48: 	n 1- recurse n *
   49:     else
   50: 	1
   51:     endif ;
   52: 
   53: 5 fac 120 <> throw
   54: 
   55: \ TO and locals
   56: 
   57: : locals-test2 ( -- )
   58:     true dup dup dup { addr1 u1 addr2 u2 -- n }
   59:     false TO addr1
   60:     addr1 false <> abort" TO does not work on locals" ;
   61: locals-test2
   62: 
   63: : locals-test3 ( -- )
   64:     \ this should compile, but gives "invalid name argument" on gforth-0.3.0
   65:     0 { a b } 0 to a ;
   66: 
   67: \ multiple reveals (recursive)
   68: 
   69: 0
   70: : xxx recursive ;
   71: throw \ if the TOS is not 0, throw an error
   72: 
   73: \ look for primitives
   74: 
   75: ' + xt>threaded threaded>name dup 0= throw ( nt )
   76: s" +" find-name <> throw
   77: 
   78: \ represent
   79: 
   80: 1e pad 5 represent -1 <> swap 0 <> or swap 1 <> or throw
   81: 
   82: \ -trailing
   83: 
   84: s" a     " 2 /string -trailing throw drop
   85: 
   86: \ convert (has to skip first char)
   87: 
   88: 0. s" 123  " drop convert drop 23. d<> throw
   89: 
   90: \ search
   91: 
   92: name abc 2dup name xyza search throw d<> throw
   93: name b 2dup name abc search throw d<> throw
   94: 
   95: \ only
   96: 
   97: : test-only ( -- )
   98:     get-order get-current
   99:     0 set-current
  100:     only
  101:     get-current >r
  102:     set-current set-order
  103:     r> abort" ONLY sets current" ;
  104: test-only
  105: 
  106: \ create-interpret/compile
  107: 
  108: : my-constant ( n "name" -- )
  109:     create-interpret/compile
  110:     ,
  111: interpretation>
  112:     @
  113: <interpretation
  114: compilation>
  115:     @ postpone literal
  116: <compilation ;
  117: 
  118: 5 my-constant five
  119: five 5 <> throw
  120: : five' five ;
  121: five' 5 <> throw
  122: 
  123: \ structs and alignment
  124: 
  125: struct
  126:   char% field field1
  127:   float% field field2
  128: end-struct my-struct%
  129: 
  130: 0 field2 float% %alignment <> throw
  131: 
  132: \ filenames with "//"
  133: 
  134: s" //jkfklfggfld/fjsjfk/hjfdjs" open-fpath-file 2drop
  135: 
  136: \ allotting negative space
  137: 
  138: 1 allot
  139: -1 allot
  140: 
  141: \ unaligned input for head?
  142: 
  143: here 1+ head? throw
  144: 
  145: \ [compile] exit = exit
  146: 
  147: : foo [compile] exit abort" '[compile] exit' broken" ;
  148: foo
  149: 
  150: \ restore-input
  151: 
  152: : test-restore-input[ ( -- )
  153:     refill 0= abort" refill failed"
  154:     bl word drop
  155:     save-input
  156:     refill 0= abort" refill failed"
  157:     -1 ;
  158: 
  159: : ]test-restore-input ( -- )
  160:     drop restore-input abort" restore-input failed" 0 ;
  161: 
  162: \ First input is skipped until the "]test-restore-input", then it is
  163: \ reset to just before "0 [if]"
  164: test-restore-input[ abort \ these aborts are skipped
  165: abort 0 [if]
  166:     s" oops" 2drop ]test-restore-input abort
  167: [then]
  168: ( 0 ) throw
  169: 
  170: \ the same test with CRLF newlines
  171: test-restore-input[ abort \ these aborts are skipped
  172: abort 0 [if]
  173:     s" oops" 2drop ]test-restore-input abort
  174: [then]
  175: ( 0 ) throw
  176: 
  177: \ comments across several lines
  178: 
  179: ( fjklfjlas;d
  180: abort" ( does not work across lines"
  181: )
  182: 
  183: s" ( testing ( without being delimited by newline in non-files" evaluate
  184: 
  185: \ last test!
  186: \ testing '(' without ')' at end-of-file
  187: ." expect ``warning: ')' missing''" cr
  188: (

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