2007-09-28 04:02:33 -04:00
|
|
|
! Black box testing of templating optimization
|
2008-06-30 04:57:00 -04:00
|
|
|
USING: accessors arrays compiler kernel kernel.private math
|
2007-10-14 21:13:42 -04:00
|
|
|
hashtables.private math.private namespaces sequences
|
|
|
|
sequences.private tools.test namespaces.private slots.private
|
2008-02-11 02:19:53 -05:00
|
|
|
sequences.private byte-arrays alien alien.accessors layouts
|
2008-04-17 04:03:22 -04:00
|
|
|
words definitions compiler.units io combinators vectors ;
|
2008-03-01 17:00:45 -05:00
|
|
|
IN: compiler.tests
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
! Oops!
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 5000 ] [ [ 5000 ] compile-call ] unit-test
|
|
|
|
[ "hi" ] [ [ "hi" ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 1 2 3 4 ] [ [ 1 2 3 4 ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 1 1 ] [ 1 [ dup ] compile-call ] unit-test
|
|
|
|
[ 0 ] [ 3 [ tag ] compile-call ] unit-test
|
|
|
|
[ 0 3 ] [ 3 [ [ tag ] keep ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 2 3 ] [ 3 [ 2 swap ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 2 1 3 4 ] [ 1 2 [ swap 3 4 ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 2 3 4 ] [ 3 [ 2 swap 4 ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ { 1 2 3 } { 1 4 3 } 3 3 ]
|
2007-12-24 21:54:45 -05:00
|
|
|
[ { 1 2 3 } { 1 4 3 } [ over tag over tag ] compile-call ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
! Test literals in either side of a shuffle
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 4 1 ] [ 1 [ [ 3 fixnum+ ] keep ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 2 ] [ 1 2 [ swap fixnum/i ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-08 16:32:55 -04:00
|
|
|
: foo ( -- ) ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2007-10-14 21:13:42 -04:00
|
|
|
[ 5 5 ]
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 1.2 [ tag [ foo ] keep ] compile-call ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
[ 1 2 2 ]
|
2007-12-24 21:54:45 -05:00
|
|
|
[ { 1 2 } [ dup 2 slot swap 3 slot [ foo ] keep ] compile-call ]
|
2007-09-20 18:09:08 -04:00
|
|
|
unit-test
|
|
|
|
|
|
|
|
[ 3 ]
|
|
|
|
[
|
|
|
|
global [ 3 \ foo set ] bind
|
2007-12-24 21:54:45 -05:00
|
|
|
\ foo [ global >n get ndrop ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
: blech drop ;
|
|
|
|
|
|
|
|
[ 3 ]
|
|
|
|
[
|
|
|
|
global [ 3 \ foo set ] bind
|
2007-12-24 21:54:45 -05:00
|
|
|
\ foo [ global [ get ] swap blech call ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 3 ]
|
|
|
|
[
|
|
|
|
global [ 3 \ foo set ] bind
|
2007-12-24 21:54:45 -05:00
|
|
|
\ foo [ global [ get ] swap >n call ndrop ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 3 ]
|
|
|
|
[
|
|
|
|
global [ 3 \ foo set ] bind
|
2007-12-24 21:54:45 -05:00
|
|
|
\ foo [ global [ get ] bind ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 12 13 ] [
|
2008-03-29 21:36:58 -04:00
|
|
|
-12 -13 [ [ 0 swap fixnum-fast ] bi@ ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ -1 2 ] [ 1 2 [ >r 0 swap fixnum- r> ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ 12 13 ] [
|
2008-03-29 21:36:58 -04:00
|
|
|
-12 -13 [ [ 0 swap fixnum- ] bi@ ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
2008-03-27 06:13:52 -04:00
|
|
|
[ 1 ] [
|
|
|
|
SBUF" " [ 1 slot 1 [ slot ] keep ] compile-call nip
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Test slow shuffles
|
|
|
|
[ 3 1 2 3 4 5 6 7 8 9 ] [
|
|
|
|
1 2 3 4 5 6 7 8 9
|
|
|
|
[ >r >r >r >r >r >r >r >r >r 3 r> r> r> r> r> r> r> r> r> ]
|
2007-12-24 21:54:45 -05:00
|
|
|
compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 2 2 2 2 2 2 2 2 2 2 1 ] [
|
|
|
|
1 2
|
2007-12-24 21:54:45 -05:00
|
|
|
[ swap >r dup dup dup dup dup dup dup dup dup r> ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ ] [ [ 9 [ ] times ] compile-call ] unit-test
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
[
|
|
|
|
[ 200 dup [ 200 3array ] curry map drop ] times
|
2007-12-27 17:26:39 -05:00
|
|
|
] [ define-temp ] with-compilation-unit drop
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Test how dispatch handles the end of a basic block
|
2008-06-08 16:32:55 -04:00
|
|
|
: try-breaking-dispatch ( n a b -- a b str )
|
2007-09-20 18:09:08 -04:00
|
|
|
float+ swap { [ "hey" ] [ "bye" ] } dispatch ;
|
|
|
|
|
2008-06-08 16:32:55 -04:00
|
|
|
: try-breaking-dispatch-2 ( -- ? )
|
2007-09-20 18:09:08 -04:00
|
|
|
1 1.0 2.5 try-breaking-dispatch "bye" = >r 3.5 = r> and ;
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
10000000 [ drop try-breaking-dispatch-2 ] all?
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Regression
|
|
|
|
: (broken) ( x -- y ) ;
|
|
|
|
|
|
|
|
[ 2.0 { 2.0 0.0 } ] [
|
|
|
|
2.0 1.0
|
2007-12-24 21:54:45 -05:00
|
|
|
[ float/f 0.0 [ drop (broken) ] 2keep 2array ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Regression
|
|
|
|
: hellish-bug-1 2drop ;
|
|
|
|
|
|
|
|
: hellish-bug-2 ( i array x -- x )
|
|
|
|
2dup 1 slot eq? [ 2drop ] [
|
|
|
|
2dup array-nth tombstone? [
|
|
|
|
[
|
|
|
|
[ array-nth ] 2keep >r 1 fixnum+fast r> array-nth
|
|
|
|
pick 2dup hellish-bug-1 3drop
|
|
|
|
] 2keep
|
|
|
|
] unless >r 2 fixnum+fast r> hellish-bug-2
|
|
|
|
] if ; inline
|
|
|
|
|
|
|
|
: hellish-bug-3 ( hash array -- )
|
|
|
|
0 swap hellish-bug-2 drop ;
|
|
|
|
|
|
|
|
[ ] [
|
2008-06-30 04:57:00 -04:00
|
|
|
H{ { 1 2 } { 3 4 } } dup array>>
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 0 swap hellish-bug-2 drop ] compile-call
|
2007-09-20 18:09:08 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
! Regression
|
2008-06-08 16:32:55 -04:00
|
|
|
: foox ( obj -- obj )
|
2007-09-20 18:09:08 -04:00
|
|
|
dup not
|
|
|
|
[ drop 3 ] [ dup tuple? [ drop 4 ] [ drop 5 ] if ] if ;
|
|
|
|
|
|
|
|
[ 3 ] [ f foox ] unit-test
|
|
|
|
|
|
|
|
TUPLE: my-tuple ;
|
|
|
|
|
|
|
|
[ 4 ] [ T{ my-tuple } foox ] unit-test
|
|
|
|
|
|
|
|
[ 5 ] [ "hi" foox ] unit-test
|
2007-09-28 04:02:33 -04:00
|
|
|
|
|
|
|
! Making sure we don't needlessly unbox/rebox
|
2007-12-24 21:54:45 -05:00
|
|
|
[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ >r eq? r> ] compile-call ] unit-test
|
2007-09-28 04:02:33 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ t 3.0 ] [ 1.0 dup [ dup 2.0 float+ ] compile-call >r eq? r> ] unit-test
|
2007-09-28 04:02:33 -04:00
|
|
|
|
2007-12-24 21:54:45 -05:00
|
|
|
[ t ] [ 1.0 dup [ [ 2.0 float+ ] keep ] compile-call nip eq? ] unit-test
|
2007-09-28 04:02:33 -04:00
|
|
|
|
|
|
|
[ 1 B{ 1 2 3 4 } ] [
|
|
|
|
B{ 1 2 3 4 } [
|
|
|
|
{ byte-array } declare
|
|
|
|
[ 0 alien-unsigned-1 ] keep
|
2007-12-24 21:54:45 -05:00
|
|
|
] compile-call
|
2007-09-28 04:02:33 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ 1 t ] [
|
|
|
|
B{ 1 2 3 4 } [
|
2007-10-01 04:20:47 -04:00
|
|
|
{ c-ptr } declare
|
2008-04-03 01:22:10 -04:00
|
|
|
[ 0 alien-unsigned-1 ] keep hi-tag
|
2007-12-24 21:54:45 -05:00
|
|
|
] compile-call byte-array type-number =
|
2007-09-28 04:02:33 -04:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[ t ] [
|
|
|
|
B{ 1 2 3 4 } [
|
2007-10-01 04:20:47 -04:00
|
|
|
{ c-ptr } declare
|
2008-04-03 01:22:10 -04:00
|
|
|
0 alien-cell hi-tag
|
2007-12-24 21:54:45 -05:00
|
|
|
] compile-call alien type-number =
|
2007-09-28 04:02:33 -04:00
|
|
|
] unit-test
|
2007-10-01 06:56:45 -04:00
|
|
|
|
|
|
|
[ 2 1 ] [
|
|
|
|
2 1
|
2007-12-24 21:54:45 -05:00
|
|
|
[ 2dup fixnum< [ >r die r> ] when ] compile-call
|
2007-10-01 06:56:45 -04:00
|
|
|
] unit-test
|
2008-02-14 18:46:04 -05:00
|
|
|
|
|
|
|
! Regression
|
2008-10-19 04:34:42 -04:00
|
|
|
: a-dummy ( a -- ) drop "hi" print ;
|
2008-02-14 18:46:04 -05:00
|
|
|
|
|
|
|
[ ] [
|
|
|
|
1 [
|
|
|
|
dup 0 2 3dup pick >= [ >= ] [ 2drop f ] if [
|
|
|
|
drop - >fixnum {
|
|
|
|
[ a-dummy ]
|
|
|
|
[ a-dummy ]
|
|
|
|
[ a-dummy ]
|
|
|
|
} dispatch
|
|
|
|
] [ 2drop no-case ] if
|
|
|
|
] compile-call
|
|
|
|
] unit-test
|
2008-04-04 04:46:30 -04:00
|
|
|
|
2008-06-08 16:32:55 -04:00
|
|
|
: float-spill-bug ( a -- b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b )
|
2008-04-04 04:46:30 -04:00
|
|
|
{
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ dup float+ ]
|
|
|
|
} cleave ;
|
|
|
|
|
2008-10-19 04:34:42 -04:00
|
|
|
[ 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 ]
|
|
|
|
[ 1.0 float-spill-bug ] unit-test
|
|
|
|
|
2008-06-28 03:36:20 -04:00
|
|
|
[ t ] [ \ float-spill-bug compiled>> ] unit-test
|
2008-04-17 04:03:22 -04:00
|
|
|
|
2008-10-19 04:34:42 -04:00
|
|
|
: float-fixnum-spill-bug ( object -- object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object object )
|
|
|
|
{
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
[ dup float+ ]
|
|
|
|
[ float>fixnum dup fixnum+fast ]
|
|
|
|
} cleave ;
|
|
|
|
|
|
|
|
[ 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 2.0 2 ]
|
|
|
|
[ 1.0 float-fixnum-spill-bug ] unit-test
|
|
|
|
|
|
|
|
[ t ] [ \ float-fixnum-spill-bug compiled>> ] unit-test
|
|
|
|
|
2008-04-17 04:03:22 -04:00
|
|
|
! Regression
|
|
|
|
: dispatch-alignment-regression ( -- c )
|
|
|
|
{ tuple vector } 3 slot { word } declare
|
|
|
|
dup 1 slot 0 fixnum-bitand { [ ] } dispatch ;
|
|
|
|
|
2008-06-28 03:36:20 -04:00
|
|
|
[ t ] [ \ dispatch-alignment-regression compiled>> ] unit-test
|
2008-04-17 04:03:22 -04:00
|
|
|
|
|
|
|
[ vector ] [ dispatch-alignment-regression ] unit-test
|