factor/basis/prettyprint/prettyprint-tests.factor

486 lines
12 KiB
Factor
Raw Normal View History

USING: accessors arrays classes.intersection classes.maybe
classes.union compiler.units continuations definitions effects
eval generic generic.standard hashtables io io.streams.duplex
io.streams.string kernel listener make math namespaces parser
prettyprint prettyprint.config prettyprint.private
prettyprint.sections see sequences splitting
strings tools.continuations tools.continuations.private
tools.test vectors vocabs.parser words ;
2008-03-01 17:00:45 -05:00
IN: prettyprint.tests
2007-09-20 18:09:08 -04:00
[ "4" ] [ 4 unparse ] unit-test
[ "4096" ] [ 4096 unparse ] unit-test
2011-11-23 21:49:33 -05:00
[ "0b1000000000000" ] [ 2 number-base [ 4096 unparse ] with-variable ] unit-test
[ "0o10000" ] [ 8 number-base [ 4096 unparse ] with-variable ] unit-test
[ "0x1000" ] [ 16 number-base [ 4096 unparse ] with-variable ] unit-test
2007-09-20 18:09:08 -04:00
[ "1.0" ] [ 1.0 unparse ] unit-test
[ "8.0" ] [ 8.0 unparse ] unit-test
[ "8.0" ] [ 2 number-base [ 8.0 unparse ] with-variable ] unit-test
[ "8.0" ] [ 8 number-base [ 8.0 unparse ] with-variable ] unit-test
2011-11-23 21:49:33 -05:00
[ "0x1.0p3" ] [ 16 number-base [ 8.0 unparse ] with-variable ] unit-test
2007-09-20 18:09:08 -04:00
[ "1267650600228229401496703205376" ] [ 1 100 shift unparse ] unit-test
[ "+" ] [ \ + unparse ] unit-test
[ "\\ +" ] [ [ \ + ] first unparse ] unit-test
[ "{ }" ] [ { } unparse ] unit-test
[ "{ 1 2 3 }" ] [ { 1 2 3 } unparse ] unit-test
[ "\"hello\\\\backslash\"" ]
[ "hello\\backslash" unparse ]
unit-test
2008-02-02 16:00:05 -05:00
! [ "\"\\u123456\"" ]
! [ "\u123456" unparse ]
! unit-test
2007-09-20 18:09:08 -04:00
[ "\"\\e\"" ]
[ "\e" unparse ]
unit-test
[ "\"\\x01\"" ]
[ 1 1string unparse ]
unit-test
2007-09-20 18:09:08 -04:00
[ "f" ] [ f unparse ] unit-test
[ "t" ] [ t unparse ] unit-test
[ "SBUF\" hello world\"" ] [ SBUF" hello world" unparse ] unit-test
[ "W{ \\ + }" ] [ [ W{ \ + } ] first unparse ] unit-test
[ ] [ \ fixnum see ] unit-test
[ ] [ \ integer see ] unit-test
2008-01-02 19:36:36 -05:00
[ ] [ \ generic see ] unit-test
2007-09-20 18:09:08 -04:00
[ ] [ \ duplex-stream see ] unit-test
[ "[ \\ + ]" ] [ [ \ + ] unparse ] unit-test
[ "[ \\ [ ]" ] [ [ \ [ ] unparse ] unit-test
[ t ] [
2008-02-21 02:26:44 -05:00
100 \ dup <array> unparse-short
2007-09-20 18:09:08 -04:00
"{" head?
] unit-test
: foo ( a -- b ) dup * ; inline
2008-03-01 17:00:45 -05:00
[ "USING: kernel math ;\nIN: prettyprint.tests\n: foo ( a -- b ) dup * ; inline\n" ]
[ [ \ foo see ] with-string-writer ] unit-test
2007-09-20 18:09:08 -04:00
: bar ( x -- y ) 2 + ;
2008-03-01 17:00:45 -05:00
[ "USING: math ;\nIN: prettyprint.tests\n: bar ( x -- y ) 2 + ;\n" ]
[ [ \ bar see ] with-string-writer ] unit-test
2007-09-20 18:09:08 -04:00
2009-03-23 01:34:02 -04:00
: blah ( a a a a a a a a a a a a a a a a a a a a -- )
2007-09-20 18:09:08 -04:00
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop
drop ;
[ "drop ;" ] [
[ \ blah see ] with-string-writer "\n" ?tail drop 6 tail*
2007-09-20 18:09:08 -04:00
] unit-test
2009-04-17 13:46:04 -04:00
: check-see ( expect name -- ? )
2007-09-20 18:09:08 -04:00
[
[
2007-12-24 19:40:09 -05:00
[ parse-fresh drop ] with-compilation-unit
[
2011-11-06 18:57:24 -05:00
"prettyprint.tests" lookup-word see
2008-05-07 02:38:34 -04:00
] with-string-writer "\n" split but-last
2007-09-20 18:09:08 -04:00
] keep =
] with-interactive-vocabs ;
2007-09-20 18:09:08 -04:00
2009-03-23 01:34:02 -04:00
GENERIC: method-layout ( a -- b )
2008-06-29 22:37:57 -04:00
M: complex method-layout
2009-04-17 13:46:04 -04:00
drop
2008-06-29 22:37:57 -04:00
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
;
M: fixnum method-layout ;
M: integer method-layout ;
M: object method-layout ;
[
2007-09-20 18:09:08 -04:00
{
2009-04-17 13:46:04 -04:00
"USING: kernel math prettyprint.tests ;"
2007-09-20 18:09:08 -04:00
"M: complex method-layout"
2009-04-17 13:46:04 -04:00
" drop"
2007-09-20 18:09:08 -04:00
" \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\""
" ;"
""
2008-03-03 17:44:24 -05:00
"USING: math prettyprint.tests ;"
2007-09-20 18:09:08 -04:00
"M: fixnum method-layout ;"
""
2008-03-03 17:44:24 -05:00
"USING: math prettyprint.tests ;"
2007-09-20 18:09:08 -04:00
"M: integer method-layout ;"
""
2008-03-03 17:44:24 -05:00
"USING: kernel prettyprint.tests ;"
2007-09-20 18:09:08 -04:00
"M: object method-layout ;"
2008-06-29 22:37:57 -04:00
""
}
] [
[ \ method-layout see-methods ] with-string-writer "\n" split
2007-09-20 18:09:08 -04:00
] unit-test
2009-03-23 01:34:02 -04:00
: soft-break-test ( -- str )
2007-09-20 18:09:08 -04:00
{
"USING: kernel math sequences strings ;"
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2008-01-04 21:10:49 -05:00
": soft-break-layout ( x y -- ? )"
2007-09-20 18:09:08 -04:00
" over string? ["
" over hashcode over hashcode number="
" [ sequence= ] [ 2drop f ] if"
" ] [ 2drop f ] if ;"
} ;
[ t ] [
"soft-break-layout" soft-break-test check-see
] unit-test
2008-06-25 05:06:18 -04:00
DEFER: parse-error-file
2009-03-23 01:34:02 -04:00
: another-soft-break-test ( -- str )
2007-09-20 18:09:08 -04:00
{
"USING: make sequences ;"
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2007-09-20 18:09:08 -04:00
": another-soft-break-layout ( node -- quot )"
" parse-error-file"
2008-03-31 21:24:48 -04:00
" [ <reversed> \"hello world foo\" suffix ] [ ] make ;"
2007-09-20 18:09:08 -04:00
} ;
[ t ] [
"another-soft-break-layout" another-soft-break-test
check-see
] unit-test
2009-03-23 01:34:02 -04:00
: string-layout ( -- str )
2007-09-20 18:09:08 -04:00
{
2008-08-30 22:55:29 -04:00
"USING: accessors debugger io kernel ;"
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2008-01-04 21:10:49 -05:00
": string-layout-test ( error -- )"
2008-08-30 22:55:29 -04:00
" \"Expected \" write dup want>> expected>string write"
" \" but got \" write got>> expected>string print ;"
2007-09-20 18:09:08 -04:00
} ;
[ t ] [
"string-layout-test" string-layout check-see
] unit-test
2009-04-17 13:46:04 -04:00
: narrow-test ( -- array )
2007-09-20 18:09:08 -04:00
{
"USING: arrays combinators continuations kernel sequences ;"
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2009-04-17 13:46:04 -04:00
": narrow-layout ( obj1 obj2 -- obj3 )"
2007-09-20 18:09:08 -04:00
" {"
" { [ dup continuation? ] [ append ] }"
" { [ dup not ] [ drop reverse ] }"
2009-10-28 00:25:35 -04:00
" { [ dup pair? ] [ [ remove! drop ] keep ] }"
2007-09-20 18:09:08 -04:00
" } cond ;"
} ;
[ t ] [
"narrow-layout" narrow-test check-see
] unit-test
2009-04-17 13:46:04 -04:00
: another-narrow-test ( -- array )
2007-09-20 18:09:08 -04:00
{
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2008-01-04 21:10:49 -05:00
": another-narrow-layout ( -- obj )"
2007-09-20 18:09:08 -04:00
" H{"
" { 1 2 }"
" { 3 4 }"
" { 5 6 }"
" { 7 8 }"
" { 9 10 }"
" { 11 12 }"
" { 13 14 }"
" } ;"
} ;
[ t ] [
"another-narrow-layout" another-narrow-test check-see
] unit-test
2008-06-29 22:37:57 -04:00
IN: prettyprint.tests
TUPLE: class-see-layout ;
IN: prettyprint.tests
GENERIC: class-see-layout ( x -- y )
USING: prettyprint.tests ;
M: class-see-layout class-see-layout ;
[
2007-12-25 18:11:56 -05:00
{
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2008-01-04 21:10:49 -05:00
"TUPLE: class-see-layout ;"
""
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests"
2008-01-04 21:10:49 -05:00
"GENERIC: class-see-layout ( x -- y )"
2007-12-25 18:11:56 -05:00
""
2008-06-29 22:37:57 -04:00
}
] [
[ \ class-see-layout see ] with-string-writer "\n" split
] unit-test
[
{
2008-03-03 17:44:24 -05:00
"USING: prettyprint.tests ;"
2007-12-25 18:11:56 -05:00
"M: class-see-layout class-see-layout ;"
2008-06-29 22:37:57 -04:00
""
}
] [
[ \ class-see-layout see-methods ] with-string-writer "\n" split
2007-12-25 18:11:56 -05:00
] unit-test
2008-08-29 11:27:31 -04:00
[ ] [ \ in>> synopsis drop ] unit-test
2007-10-05 15:26:40 -04:00
! Regression
[ t ] [
2008-03-01 17:00:45 -05:00
"IN: prettyprint.tests\nGENERIC: generic-decl-test ( a -- b ) flushable\n"
2009-04-17 16:49:21 -04:00
dup eval( -- )
2011-11-06 18:57:24 -05:00
"generic-decl-test" "prettyprint.tests" lookup-word
[ see ] with-string-writer =
] unit-test
2009-04-17 13:46:04 -04:00
[ [ + ] ] [ [ \ + (step-into-execute) ] (remove-breakpoints) ] unit-test
2007-10-05 15:26:40 -04:00
2009-04-17 13:46:04 -04:00
[ [ (step-into-execute) ] ] [ [ (step-into-execute) ] (remove-breakpoints) ] unit-test
2007-10-05 15:26:40 -04:00
[ [ 2 2 + . ] ] [
2008-02-21 03:08:08 -05:00
[ 2 2 \ + (step-into-execute) . ] (remove-breakpoints)
2007-10-05 15:26:40 -04:00
] unit-test
[ [ 2 2 + . ] ] [
2008-02-21 03:08:08 -05:00
[ 2 break 2 \ + (step-into-execute) . ] (remove-breakpoints)
2007-10-09 01:30:28 -04:00
] unit-test
2008-03-18 22:43:29 -04:00
GENERIC: generic-see-test-with-f ( obj -- obj )
M: f generic-see-test-with-f ;
[ "USING: prettyprint.tests ;\nM: f generic-see-test-with-f ;\n" ] [
2009-04-06 04:30:23 -04:00
[ M\ f generic-see-test-with-f see ] with-string-writer
2008-03-18 22:43:29 -04:00
] unit-test
2008-03-26 19:23:19 -04:00
PREDICATE: predicate-see-test < integer even? ;
[ "USING: math ;\nIN: prettyprint.tests\nPREDICATE: predicate-see-test < integer even? ;\n" ] [
[ \ predicate-see-test see ] with-string-writer
] unit-test
2008-04-03 20:08:34 -04:00
2008-05-11 01:41:47 -04:00
INTERSECTION: intersection-see-test sequence number ;
[ "USING: math sequences ;\nIN: prettyprint.tests\nINTERSECTION: intersection-see-test sequence number ;\n" ] [
[ \ intersection-see-test see ] with-string-writer
] unit-test
2008-04-03 20:08:34 -04:00
[ ] [ \ compose see ] unit-test
[ ] [ \ curry see ] unit-test
[ "POSTPONE: [" ] [ \ [ unparse ] unit-test
TUPLE: started-out-hustlin' ;
2009-03-23 01:34:02 -04:00
GENERIC: ended-up-ballin' ( a -- b )
M: started-out-hustlin' ended-up-ballin' ; inline
[ "USING: prettyprint.tests ;\nM: started-out-hustlin' ended-up-ballin' ; inline\n" ] [
2009-04-06 04:30:23 -04:00
[ M\ started-out-hustlin' ended-up-ballin' see ] with-string-writer
] unit-test
TUPLE: tuple-with-declared-slot { x integer } ;
[
{
"USING: math ;"
"IN: prettyprint.tests"
"TUPLE: tuple-with-declared-slot { x integer initial: 0 } ;"
""
}
] [
[ \ tuple-with-declared-slot see ] with-string-writer "\n" split
] unit-test
TUPLE: tuple-with-read-only-slot { x read-only } ;
[
{
"IN: prettyprint.tests"
"TUPLE: tuple-with-read-only-slot { x read-only } ;"
""
}
] [
[ \ tuple-with-read-only-slot see ] with-string-writer "\n" split
] unit-test
TUPLE: tuple-with-initial-slot { x initial: 123 } ;
[
{
"IN: prettyprint.tests"
"TUPLE: tuple-with-initial-slot { x initial: 123 } ;"
""
}
] [
[ \ tuple-with-initial-slot see ] with-string-writer "\n" split
] unit-test
TUPLE: tuple-with-initial-declared-slot { x integer initial: 123 } ;
[
{
"USING: math ;"
"IN: prettyprint.tests"
"TUPLE: tuple-with-initial-declared-slot"
" { x integer initial: 123 } ;"
""
}
] [
[ \ tuple-with-initial-declared-slot see ] with-string-writer "\n" split
] unit-test
2010-02-17 09:01:26 -05:00
TUPLE: final-tuple ; final
[
{
"IN: prettyprint.tests"
"TUPLE: final-tuple ; final"
""
}
] [
[ \ final-tuple see ] with-string-writer "\n" split
] unit-test
[ "H{ { 1 2 } }\n" ] [ [ H{ { 1 2 } } short. ] with-string-writer ] unit-test
[ "H{ { 1 ~array~ } }\n" ] [ [ H{ { 1 { 2 } } } short. ] with-string-writer ] unit-test
[ "{ ~array~ }\n" ] [ [ { { 1 2 } } short. ] with-string-writer ] unit-test
[ "H{ { 1 { 2 3 } } }\n" ] [
f nesting-limit [
[ H{ { 1 { 2 3 } } } . ] with-string-writer
] with-variable
] unit-test
[ "maybe{ integer }\n" ] [ [ maybe{ integer } . ] with-string-writer ] unit-test
TUPLE: bob a b ;
[ "maybe{ bob }\n" ] [ [ maybe{ bob } . ] with-string-writer ] unit-test
[ "maybe{ word }\n" ] [ [ maybe{ word } . ] with-string-writer ] unit-test
TUPLE: har a ;
GENERIC: harhar ( obj -- obj )
M: maybe{ har } harhar ;
M: integer harhar M\ integer harhar drop ;
[
"""USING: prettyprint.tests ;
M: maybe{ har } harhar ;
USING: kernel math prettyprint.tests ;
M: integer harhar M\\ integer harhar drop ;\n"""
] [
[ \ harhar see-methods ] with-string-writer
] unit-test
TUPLE: mo { a union{ float integer } } ;
TUPLE: fo { a intersection{ fixnum integer } } ;
[
"""USING: math ;
IN: prettyprint.tests
TUPLE: mo { a union{ integer float } initial: 0 } ;
"""
] [
[ \ mo see ] with-string-writer
] unit-test
[
"""USING: math ;
IN: prettyprint.tests
TUPLE: fo { a intersection{ integer fixnum } initial: 0 } ;
"""
] [
[ \ fo see ] with-string-writer
] unit-test
[
"""union{ intersection{ string hashtable } union{ integer float } }\n"""
] [ [ union{ union{ float integer } intersection{ string hashtable } } . ] with-string-writer ] unit-test
[
"""intersection{
intersection{ string hashtable }
union{ integer float }
}
"""
] [ [ intersection{ union{ float integer } intersection{ string hashtable } } . ] with-string-writer ] unit-test
[
"""maybe{ union{ integer float } }\n"""
] [
[ maybe{ union{ float integer } } . ] with-string-writer
] unit-test
[
"""maybe{ maybe{ integer } }\n"""
] [
[ maybe{ maybe{ integer } } . ] with-string-writer
] unit-test
{ "{ 0 1 2 3 4 }" } [
[ 5 length-limit [ 5 iota >array pprint ] with-variable ]
with-string-writer
] unit-test
{ "{ 0 1 2 3 ~2 more~ }" } [
[ 5 length-limit [ 6 iota >array pprint ] with-variable ]
with-string-writer
] unit-test
: margin-test ( number-of-'a's -- str )
[
[ CHAR: a <string> text "b" text ] with-pprint
] with-string-writer ;
[
"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b"""
] [ margin get 3 - margin-test ] unit-test
[
"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b"""
] [ margin get 2 - margin-test ] unit-test
[
"""aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
b"""
] [ margin get 1 - margin-test ] unit-test