2005-03-28 23:45:13 -05:00
|
|
|
IN: temporary
|
2005-09-11 20:46:55 -04:00
|
|
|
USING: arrays generic inference kernel lists math math-internals
|
2005-04-03 19:02:50 -04:00
|
|
|
namespaces parser sequences test vectors ;
|
2004-11-03 23:35:36 -05:00
|
|
|
|
2005-09-04 19:24:24 -04:00
|
|
|
[
|
|
|
|
<< shuffle f { "a" } { } { "a" } { "a" } >>
|
|
|
|
] [
|
|
|
|
<< shuffle f { "a" } { } { "a" "a" } { } >>
|
|
|
|
<< shuffle f { "b" } { } { } { "b" } >>
|
|
|
|
compose-shuffle
|
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[
|
|
|
|
<< shuffle f { "b" "a" } { } { "b" "b" } { } >>
|
|
|
|
] [
|
|
|
|
<< shuffle f { "a" } { } { } { } >>
|
|
|
|
<< shuffle f { "b" } { } { "b" "b" } { } >>
|
|
|
|
compose-shuffle
|
|
|
|
] unit-test
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
: simple-effect first2 >r length r> length 2array ;
|
2004-12-30 02:40:14 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 0 2 }@ ] [ [ 2 "Hello" ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 2 }@ ] [ [ dup ] infer simple-effect ] unit-test
|
2004-11-03 23:35:36 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 2 }@ ] [ [ [ dup ] call ] infer simple-effect ] unit-test
|
2005-08-21 23:35:50 -04:00
|
|
|
[ [ call ] infer simple-effect ] unit-test-fails
|
2004-11-03 23:35:36 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 2 4 }@ ] [ [ 2dup ] infer simple-effect ] unit-test
|
2004-11-03 23:35:36 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 0 }@ ] [ [ [ ] [ ] ifte ] infer simple-effect ] unit-test
|
2005-08-21 23:35:50 -04:00
|
|
|
[ [ ifte ] infer simple-effect ] unit-test-fails
|
|
|
|
[ [ [ ] ifte ] infer simple-effect ] unit-test-fails
|
|
|
|
[ [ [ 2 ] [ ] ifte ] infer simple-effect ] unit-test-fails
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 4 3 }@ ] [ [ [ rot ] [ -rot ] ifte ] infer simple-effect ] unit-test
|
2005-08-21 23:35:50 -04:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 4 3 }@ ] [
|
2004-11-03 23:35:36 -05:00
|
|
|
[
|
|
|
|
[
|
|
|
|
[ swap 3 ] [ nip 5 5 ] ifte
|
|
|
|
] [
|
|
|
|
-rot
|
|
|
|
] ifte
|
2005-08-21 23:35:50 -04:00
|
|
|
] infer simple-effect
|
2004-11-03 23:35:36 -05:00
|
|
|
] unit-test
|
2004-11-04 21:36:33 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ dup [ ] when ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ dup [ dup fixnum* ] when ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ [ dup fixnum* ] when ] infer simple-effect ] unit-test
|
2004-11-04 21:36:33 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 0 }@ ] [ [ [ drop ] when* ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ [ { { [ ] } } ] unless* ] infer simple-effect ] unit-test
|
2004-11-05 17:41:54 -05:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 0 1 }@ ] [
|
2005-08-21 23:35:50 -04:00
|
|
|
[ [ 2 2 fixnum+ ] dup [ ] when call ] infer simple-effect
|
2004-11-05 17:41:54 -05:00
|
|
|
] unit-test
|
|
|
|
|
|
|
|
[
|
|
|
|
[ [ 2 2 fixnum+ ] ] [ [ 2 2 fixnum* ] ] ifte call
|
|
|
|
] unit-test-fails
|
2004-11-06 21:03:35 -05:00
|
|
|
|
|
|
|
: infinite-loop infinite-loop ;
|
|
|
|
|
|
|
|
: simple-recursion-1
|
|
|
|
dup [ simple-recursion-1 ] [ ] ifte ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ simple-recursion-1 ] infer simple-effect ] unit-test
|
2004-11-06 21:03:35 -05:00
|
|
|
|
|
|
|
: simple-recursion-2
|
|
|
|
dup [ ] [ simple-recursion-2 ] ifte ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ simple-recursion-2 ] infer simple-effect ] unit-test
|
2004-11-06 21:20:05 -05:00
|
|
|
|
|
|
|
: bad-recursion-2
|
|
|
|
dup [ uncons bad-recursion-2 ] [ ] ifte ;
|
|
|
|
|
2005-08-21 23:35:50 -04:00
|
|
|
[ [ bad-recursion-2 ] infer simple-effect ] unit-test-fails
|
2004-11-06 21:20:05 -05:00
|
|
|
|
2004-12-27 15:27:18 -05:00
|
|
|
! Not sure how to fix this one
|
|
|
|
|
2004-12-30 02:40:14 -05:00
|
|
|
: funny-recursion
|
|
|
|
dup [ funny-recursion 1 ] [ 2 ] ifte drop ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ funny-recursion ] infer simple-effect ] unit-test
|
2004-12-27 15:27:18 -05:00
|
|
|
|
2004-11-17 17:11:09 -05:00
|
|
|
! Simple combinators
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 2 }@ ] [ [ [ car ] keep cdr ] infer simple-effect ] unit-test
|
2004-11-17 20:59:28 -05:00
|
|
|
|
|
|
|
! Mutual recursion
|
|
|
|
DEFER: foe
|
|
|
|
|
|
|
|
: fie ( element obj -- ? )
|
|
|
|
dup cons? [ foe ] [ eq? ] ifte ;
|
|
|
|
|
|
|
|
: foe ( element tree -- ? )
|
|
|
|
dup [
|
|
|
|
2dup car fie [
|
|
|
|
nip
|
|
|
|
] [
|
|
|
|
cdr dup cons? [
|
|
|
|
foe
|
|
|
|
] [
|
|
|
|
fie
|
|
|
|
] ifte
|
|
|
|
] ifte
|
|
|
|
] [
|
|
|
|
2drop f
|
|
|
|
] ifte ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 2 1 }@ ] [ [ fie ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ foe ] infer simple-effect ] unit-test
|
2004-11-21 19:27:18 -05:00
|
|
|
|
2004-11-26 22:23:57 -05:00
|
|
|
: nested-when ( -- )
|
|
|
|
t [
|
|
|
|
t [
|
|
|
|
5 drop
|
|
|
|
] when
|
|
|
|
] when ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 0 0 }@ ] [ [ nested-when ] infer simple-effect ] unit-test
|
2004-11-26 22:23:57 -05:00
|
|
|
|
|
|
|
: nested-when* ( -- )
|
|
|
|
[
|
|
|
|
[
|
|
|
|
drop
|
|
|
|
] when*
|
|
|
|
] when* ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 0 }@ ] [ [ nested-when* ] infer simple-effect ] unit-test
|
2004-11-26 22:23:57 -05:00
|
|
|
|
2004-11-27 00:33:17 -05:00
|
|
|
SYMBOL: sym-test
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 0 1 }@ ] [ [ sym-test ] infer simple-effect ] unit-test
|
2005-01-13 19:49:47 -05:00
|
|
|
|
2004-12-25 20:06:08 -05:00
|
|
|
: terminator-branch
|
|
|
|
dup [
|
|
|
|
car
|
|
|
|
] [
|
|
|
|
not-a-number
|
|
|
|
] ifte ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ terminator-branch ] infer simple-effect ] unit-test
|
2005-07-27 20:13:11 -04:00
|
|
|
|
|
|
|
: recursive-terminator
|
|
|
|
dup [
|
|
|
|
recursive-terminator
|
|
|
|
] [
|
|
|
|
not-a-number
|
|
|
|
] ifte ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 1 }@ ] [ [ recursive-terminator ] infer simple-effect ] unit-test
|
2005-07-27 20:13:11 -04:00
|
|
|
|
|
|
|
GENERIC: potential-hang
|
|
|
|
M: fixnum potential-hang dup [ potential-hang ] when ;
|
|
|
|
|
|
|
|
[ ] [ [ 5 potential-hang ] infer drop ] unit-test
|
|
|
|
|
|
|
|
TUPLE: funny-cons car cdr ;
|
|
|
|
GENERIC: iterate
|
|
|
|
M: funny-cons iterate funny-cons-cdr iterate ;
|
|
|
|
M: f iterate drop ;
|
|
|
|
M: real iterate drop ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 1 0 }@ ] [ [ iterate ] infer simple-effect ] unit-test
|
2005-07-27 20:13:11 -04:00
|
|
|
|
2005-08-21 23:35:50 -04:00
|
|
|
[ [ callstack ] infer simple-effect ] unit-test-fails
|
2005-07-27 20:13:11 -04:00
|
|
|
|
2005-08-22 02:06:32 -04:00
|
|
|
DEFER: agent
|
|
|
|
: smith 1 + agent ; inline
|
2005-08-29 21:00:39 -04:00
|
|
|
: agent dup 0 = [ [ swap call ] 2keep smith ] when ; inline
|
2005-08-22 02:06:32 -04:00
|
|
|
[ [ [ ] [ object object ] ] ]
|
|
|
|
[ [ [ drop ] 0 agent ] infer ] unit-test
|
|
|
|
|
2005-09-01 02:15:29 -04:00
|
|
|
! : no-base-case-1 dup [ no-base-case-1 ] [ no-base-case-1 ] ifte ;
|
|
|
|
! [ [ no-base-case-1 ] infer ] unit-test-fails
|
2005-08-30 18:12:21 -04:00
|
|
|
|
|
|
|
: no-base-case-2 no-base-case-2 ;
|
|
|
|
[ [ no-base-case-2 ] infer ] unit-test-fails
|
2005-08-21 23:35:50 -04:00
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 2 1 }@ ] [ [ swons ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 2 }@ ] [ [ uncons ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ unit ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 2 }@ ] [ [ unswons ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ last ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ list? ] infer simple-effect ] unit-test
|
|
|
|
|
|
|
|
[ @{ 1 0 }@ ] [ [ >n ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 0 1 }@ ] [ [ n> ] infer simple-effect ] unit-test
|
|
|
|
|
|
|
|
[ @{ 2 1 }@ ] [ [ bitor ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ bitand ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ bitxor ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ mod ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ /i ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ /f ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 2 }@ ] [ [ /mod ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ + ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ - ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ * ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ / ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ < ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ <= ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ > ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ >= ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ number= ] infer simple-effect ] unit-test
|
|
|
|
|
|
|
|
[ @{ 1 1 }@ ] [ [ string>number ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ = ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ get ] infer simple-effect ] unit-test
|
|
|
|
|
|
|
|
[ @{ 2 0 }@ ] [ [ push ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 0 }@ ] [ [ set-length ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ append ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ peek ] infer simple-effect ] unit-test
|
|
|
|
|
|
|
|
[ @{ 1 1 }@ ] [ [ length ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ reverse ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ member? ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 2 1 }@ ] [ [ remove ] infer simple-effect ] unit-test
|
|
|
|
[ @{ 1 1 }@ ] [ [ prune ] infer simple-effect ] unit-test
|
2004-12-25 20:06:08 -05:00
|
|
|
|
2005-07-31 23:38:33 -04:00
|
|
|
: bad-code "1234" car ;
|
|
|
|
|
2005-09-11 20:46:55 -04:00
|
|
|
[ @{ 0 1 }@ ] [ [ bad-code ] infer simple-effect ] unit-test
|
2005-07-31 23:38:33 -04:00
|
|
|
|
2005-07-27 20:13:11 -04:00
|
|
|
! This form should not have a stack effect
|
|
|
|
! : bad-bin 5 [ 5 bad-bin bad-bin 5 ] [ 2drop ] ifte ;
|
2005-08-21 23:35:50 -04:00
|
|
|
! [ [ bad-bin ] infer simple-effect ] unit-test-fails
|
2005-06-15 23:27:28 -04:00
|
|
|
|
2005-08-21 23:35:50 -04:00
|
|
|
! [ [ infinite-loop ] infer simple-effect ] unit-test-fails
|
2005-06-12 03:38:57 -04:00
|
|
|
|
2005-07-27 20:13:11 -04:00
|
|
|
! : bad-recursion-1
|
|
|
|
! dup [ drop bad-recursion-1 5 ] [ ] ifte ;
|
|
|
|
!
|
2005-08-21 23:35:50 -04:00
|
|
|
! [ [ bad-recursion-1 ] infer simple-effect ] unit-test-fails
|
2005-08-22 02:06:32 -04:00
|
|
|
|
|
|
|
! This hangs
|
|
|
|
|
|
|
|
! [ ] [ [ [ dup call ] dup call ] infer ] unit-test-fails
|