2007-09-20 18:09:08 -04:00
|
|
|
USING: arrays math parser tools.test kernel generic words
|
|
|
|
io.streams.string namespaces classes effects source-files
|
|
|
|
assocs sequences strings io.files definitions continuations
|
2008-01-09 19:13:26 -05:00
|
|
|
sorting tuples compiler.units ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: temporary
|
|
|
|
|
|
|
|
[
|
2007-12-21 21:18:24 -05:00
|
|
|
[ 1 [ 2 [ 3 ] 4 ] 5 ]
|
|
|
|
[ "1\n[\n2\n[\n3\n]\n4\n]\n5" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ t t f f ]
|
|
|
|
[ "t t f f" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ "hello world" ]
|
|
|
|
[ "\"hello world\"" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ "\n\r\t\\" ]
|
|
|
|
[ "\"\\n\\r\\t\\\\\"" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
[ "hello world" ]
|
|
|
|
[
|
|
|
|
"IN: temporary : hello \"hello world\" ;"
|
2007-12-21 21:18:24 -05:00
|
|
|
eval "USE: temporary hello" eval
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ]
|
2007-12-21 21:18:24 -05:00
|
|
|
[ "! This is a comment, people." eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
! Test escapes
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ " " ]
|
2008-02-01 16:00:02 -05:00
|
|
|
[ "\"\\u000020\"" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ "'" ]
|
2008-02-01 16:00:02 -05:00
|
|
|
[ "\"\\u000027\"" eval ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
! Test EOL comments in multiline strings.
|
2007-12-21 21:18:24 -05:00
|
|
|
[ "Hello" ] [ "#! This calls until-eol.\n\"Hello\"" eval ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ word ] [ \ f class ] unit-test
|
|
|
|
|
|
|
|
! Test stack effect parsing
|
|
|
|
|
|
|
|
: effect-parsing-test ( a b -- c ) + ;
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"effect-parsing-test" "temporary" lookup
|
|
|
|
\ effect-parsing-test eq?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ T{ effect f { "a" "b" } { "c" } f } ]
|
|
|
|
[ \ effect-parsing-test "declared-effect" word-prop ] unit-test
|
|
|
|
|
|
|
|
: baz ( a b -- * ) 2array throw ;
|
|
|
|
|
|
|
|
[ t ]
|
|
|
|
[ \ baz "declared-effect" word-prop effect-terminated? ]
|
|
|
|
unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ ] [ "IN: temporary USE: math : effect-parsing-test ( a b -- d ) - ;" eval ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"effect-parsing-test" "temporary" lookup
|
|
|
|
\ effect-parsing-test eq?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ T{ effect f { "a" "b" } { "d" } f } ]
|
|
|
|
[ \ effect-parsing-test "declared-effect" word-prop ] unit-test
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ ] [ "IN: temporary : effect-parsing-test ;" eval ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ f ] [ \ effect-parsing-test "declared-effect" word-prop ] unit-test
|
|
|
|
|
|
|
|
! Funny bug
|
|
|
|
[ 2 ] [ "IN: temporary : \0. 2 ; \0." eval ] unit-test
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[ "IN: temporary : missing-- ( a b ) ;" eval ] must-fail
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! These should throw errors
|
2008-02-06 14:47:19 -05:00
|
|
|
[ "HEX: zzz" eval ] must-fail
|
|
|
|
[ "OCT: 999" eval ] must-fail
|
|
|
|
[ "BIN: --0" eval ] must-fail
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Another funny bug
|
|
|
|
[ t ] [
|
|
|
|
[
|
|
|
|
"scratchpad" in set
|
|
|
|
{ "scratchpad" "arrays" } set-use
|
|
|
|
[
|
|
|
|
! This shouldn't modify in/use in the outer scope!
|
2007-12-28 21:45:16 -05:00
|
|
|
] with-file-vocabs
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
use get { "scratchpad" "arrays" } set-use use get =
|
|
|
|
] with-scope
|
|
|
|
] unit-test
|
|
|
|
DEFER: foo
|
|
|
|
|
|
|
|
"IN: temporary USING: math prettyprint ; : foo 2 2 + . ; parsing" eval
|
|
|
|
|
2007-12-21 21:18:24 -05:00
|
|
|
[ ] [ "USE: temporary foo" eval ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
"IN: temporary USING: math prettyprint ; : foo 2 2 + . ;" eval
|
|
|
|
|
|
|
|
[ t ] [
|
2007-12-21 21:18:24 -05:00
|
|
|
"USE: temporary \\ foo" eval
|
|
|
|
"foo" "temporary" lookup eq?
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Test smudging
|
|
|
|
|
|
|
|
[ 1 ] [
|
|
|
|
"IN: temporary : smudge-me ;" <string-reader> "foo"
|
|
|
|
parse-stream drop
|
|
|
|
|
2007-12-24 17:18:26 -05:00
|
|
|
"foo" source-file source-file-definitions first assoc-size
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "smudge-me" "temporary" lookup >boolean ] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary : smudge-me-more ;" <string-reader> "foo"
|
|
|
|
parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "smudge-me-more" "temporary" lookup >boolean ] unit-test
|
|
|
|
[ f ] [ "smudge-me" "temporary" lookup >boolean ] unit-test
|
|
|
|
|
|
|
|
[ 3 ] [
|
|
|
|
"IN: temporary USING: math strings ; GENERIC: smudge-me M: integer smudge-me ; M: string smudge-me ;" <string-reader> "foo"
|
|
|
|
parse-stream drop
|
|
|
|
|
2007-12-24 17:18:26 -05:00
|
|
|
"foo" source-file source-file-definitions first assoc-size
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 1 ] [
|
|
|
|
"IN: temporary USING: arrays ; M: array smudge-me ;" <string-reader> "bar"
|
|
|
|
parse-stream drop
|
|
|
|
|
2007-12-24 17:18:26 -05:00
|
|
|
"bar" source-file source-file-definitions first assoc-size
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 2 ] [
|
|
|
|
"IN: temporary USING: math strings ; GENERIC: smudge-me M: integer smudge-me ;" <string-reader> "foo"
|
|
|
|
parse-stream drop
|
|
|
|
|
2007-12-24 17:18:26 -05:00
|
|
|
"foo" source-file source-file-definitions first assoc-size
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
array "smudge-me" "temporary" lookup order memq?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
integer "smudge-me" "temporary" lookup order memq?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [
|
|
|
|
string "smudge-me" "temporary" lookup order memq?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary USE: math 2 2 +" <string-reader> "a"
|
|
|
|
parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"a" <pathname> \ + usage member?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary USE: math 2 2 -" <string-reader> "a"
|
|
|
|
parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [
|
|
|
|
"a" <pathname> \ + usage member?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"a" source-files get delete-at
|
|
|
|
2 [
|
|
|
|
"IN: temporary DEFER: x : y x ; : x y ;"
|
|
|
|
<string-reader> "a" parse-stream drop
|
|
|
|
] times
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
"a" source-files get delete-at
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary : x ; : y 3 throw ; this is an error"
|
|
|
|
<string-reader> "a" parse-stream
|
|
|
|
] [ parse-error? ] must-fail-with
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"y" "temporary" lookup >boolean
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [
|
|
|
|
"IN: temporary : x ;"
|
|
|
|
<string-reader> "a" parse-stream drop
|
|
|
|
|
|
|
|
"y" "temporary" lookup
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Test new forward definition logic
|
|
|
|
[ ] [
|
|
|
|
"IN: axx : axx ;"
|
|
|
|
<string-reader> "axx" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"USE: axx IN: bxx : bxx ; : cxx axx bxx ;"
|
|
|
|
<string-reader> "bxx" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! So we move the bxx word to axx...
|
|
|
|
[ ] [
|
|
|
|
"IN: axx : axx ; : bxx ;"
|
|
|
|
<string-reader> "axx" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "bxx" "axx" lookup >boolean ] unit-test
|
|
|
|
|
|
|
|
! And reload the file that uses it...
|
|
|
|
[ ] [
|
|
|
|
"USE: axx IN: bxx : cxx axx bxx ;"
|
|
|
|
<string-reader> "bxx" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! And hope not to get a forward-error!
|
|
|
|
|
|
|
|
! Turning a generic into a non-generic could cause all
|
|
|
|
! kinds of funnyness
|
|
|
|
[ ] [
|
|
|
|
"IN: ayy USE: kernel GENERIC: ayy M: object ayy ;"
|
|
|
|
<string-reader> "ayy" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: ayy USE: kernel : ayy ;"
|
|
|
|
<string-reader> "ayy" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: azz TUPLE: my-class ; GENERIC: a-generic"
|
|
|
|
<string-reader> "azz" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"USE: azz M: my-class a-generic ;"
|
|
|
|
<string-reader> "azz-2" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: azz GENERIC: a-generic"
|
|
|
|
<string-reader> "azz" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"USE: azz USE: math M: integer a-generic ;"
|
|
|
|
<string-reader> "azz-2" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary : <bogus-error> ; : bogus <bogus-error> ;"
|
|
|
|
<string-reader> "bogus-error" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: bogus-error ; C: <bogus-error> bogus-error : bogus <bogus-error> ;"
|
|
|
|
<string-reader> "bogus-error" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Problems with class predicates -vs- ordinary words
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: killer ;"
|
|
|
|
<string-reader> "removing-the-predicate" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
2008-01-12 18:00:41 -05:00
|
|
|
"IN: temporary GENERIC: killer? ( a -- b )"
|
2007-09-20 18:09:08 -04:00
|
|
|
<string-reader> "removing-the-predicate" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"killer?" "temporary" lookup >boolean
|
|
|
|
] unit-test
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary TUPLE: another-pred-test ; GENERIC: another-pred-test?"
|
|
|
|
<string-reader> "removing-the-predicate" parse-stream
|
|
|
|
] [ [ redefine-error? ] is? ] must-fail-with
|
2007-12-21 21:18:24 -05:00
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary TUPLE: class-redef-test ; TUPLE: class-redef-test ;"
|
|
|
|
<string-reader> "redefining-a-class-1" parse-stream
|
|
|
|
] [ [ redefine-error? ] is? ] must-fail-with
|
2007-12-21 21:18:24 -05:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: class-redef-test ; SYMBOL: class-redef-test"
|
|
|
|
<string-reader> "redefining-a-class-2" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary TUPLE: class-redef-test ; SYMBOL: class-redef-test : class-redef-test ;"
|
|
|
|
<string-reader> "redefining-a-class-3" parse-stream drop
|
|
|
|
] [ [ redefine-error? ] is? ] must-fail-with
|
2007-12-21 21:18:24 -05:00
|
|
|
|
2007-12-22 15:47:10 -05:00
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: class-fwd-test ;"
|
|
|
|
<string-reader> "redefining-a-class-3" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary \\ class-fwd-test"
|
|
|
|
<string-reader> "redefining-a-class-3" parse-stream drop
|
|
|
|
] [ [ no-word? ] is? ] must-fail-with
|
2007-12-21 21:18:24 -05:00
|
|
|
|
2007-12-22 15:47:10 -05:00
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: class-fwd-test ; SYMBOL: class-fwd-test"
|
|
|
|
<string-reader> "redefining-a-class-3" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary \\ class-fwd-test"
|
|
|
|
<string-reader> "redefining-a-class-3" parse-stream drop
|
|
|
|
] [ [ no-word? ] is? ] must-fail-with
|
2007-12-25 18:10:05 -05:00
|
|
|
|
2008-02-06 14:47:19 -05:00
|
|
|
[
|
|
|
|
"IN: temporary : foo ; TUPLE: foo ;"
|
|
|
|
<string-reader> "redefining-a-class-4" parse-stream drop
|
|
|
|
] [ [ redefine-error? ] is? ] must-fail-with
|
2008-02-06 20:23:39 -05:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary : foo ( x y -- z ) 1 2 ; : bar ( a -- b ) ;" eval
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[
|
|
|
|
"IN: temporary : foo ( x y -- z) 1 2 ; : bar ( a -- b ) ;" eval
|
|
|
|
] must-fail
|
2007-12-28 21:45:16 -05:00
|
|
|
] with-file-vocabs
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[
|
2007-12-21 21:18:24 -05:00
|
|
|
<< file get parsed >> file set
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: ~a ;
|
2008-02-23 23:29:29 -05:00
|
|
|
|
|
|
|
DEFER: ~b
|
|
|
|
|
|
|
|
"IN: temporary : ~b ~a ;" <string-reader>
|
|
|
|
"smudgy" parse-stream drop
|
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
: ~c ;
|
|
|
|
: ~d ;
|
|
|
|
|
2008-02-23 23:29:29 -05:00
|
|
|
{ H{ { ~a ~a } { ~b ~b } { ~c ~c } { ~d ~d } } H{ } } old-definitions set
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-02-23 23:29:29 -05:00
|
|
|
{ H{ { ~b ~b } { ~d ~d } } H{ } } new-definitions set
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ V{ ~b } { ~a } { ~a ~c } ] [
|
|
|
|
smudged-usage
|
|
|
|
natural-sort
|
|
|
|
] unit-test
|
|
|
|
] with-scope
|
2007-12-24 19:40:09 -05:00
|
|
|
|
2008-02-23 23:29:29 -05:00
|
|
|
[
|
|
|
|
<< file get parsed >> file set
|
|
|
|
|
|
|
|
GENERIC: ~e
|
|
|
|
|
|
|
|
: ~f ~e ;
|
|
|
|
|
|
|
|
: ~g ;
|
|
|
|
|
|
|
|
{ H{ { ~e ~e } { ~f ~f } { ~g ~g } } H{ } } old-definitions set
|
|
|
|
|
|
|
|
{ H{ { ~g ~g } } H{ } } new-definitions set
|
|
|
|
|
|
|
|
[ V{ } { } { ~e ~f } ]
|
|
|
|
[ smudged-usage natural-sort ]
|
|
|
|
unit-test
|
|
|
|
] with-scope
|
|
|
|
|
2007-12-24 19:40:09 -05:00
|
|
|
[ ] [
|
|
|
|
"IN: temporary USE: kernel PREDICATE: object foo ( x -- y ) ;" eval
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
"foo?" "temporary" lookup word eq?
|
|
|
|
] unit-test
|
2008-02-24 01:26:54 -05:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: foo ; GENERIC: foo"
|
|
|
|
<string-reader> "redefining-a-class-5" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary M: f foo ;"
|
|
|
|
<string-reader> "redefining-a-class-6" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [ f "foo" "temporary" lookup execute ] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: foo ; GENERIC: foo"
|
|
|
|
<string-reader> "redefining-a-class-5" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ f ] [ f "foo" "temporary" lookup execute ] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: foo ; GENERIC: foo"
|
|
|
|
<string-reader> "redefining-a-class-7" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ ] [
|
|
|
|
"IN: temporary TUPLE: foo ;"
|
|
|
|
<string-reader> "redefining-a-class-7" parse-stream drop
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [ "foo" "temporary" lookup symbol? ] unit-test
|