41 lines
921 B
Factor
41 lines
921 B
Factor
! (c)2009 Joe Groff bsd license
|
|
USING: kernel math tools.test variants slots ;
|
|
IN: variants.tests
|
|
|
|
VARIANT: list
|
|
nil
|
|
cons: { { first object } { rest list } }
|
|
;
|
|
|
|
[ t ] [ nil list? ] unit-test
|
|
[ t ] [ 1 nil <cons> list? ] unit-test
|
|
[ f ] [ 1 list? ] unit-test
|
|
|
|
: list-length ( list -- length )
|
|
{
|
|
{ nil [ 0 ] }
|
|
{ cons [ nip list-length 1 + ] }
|
|
} match ;
|
|
|
|
[ 4 ]
|
|
[ 5 6 7 8 nil <cons> <cons> <cons> <cons> list-length ] unit-test
|
|
|
|
[ nil t ] [ list initial-value ] unit-test
|
|
|
|
VARIANT: list2 ;
|
|
VARIANT-MEMBER: list2 nil2
|
|
VARIANT-MEMBER: list2 cons2: { { first object } { rest list2 } }
|
|
|
|
[ t ] [ nil2 list2? ] unit-test
|
|
[ t ] [ 1 nil2 <cons2> list2? ] unit-test
|
|
[ f ] [ 1 list2? ] unit-test
|
|
|
|
: list2-length ( list2 -- length )
|
|
{
|
|
{ nil2 [ 0 ] }
|
|
{ cons2 [ nip list2-length 1 + ] }
|
|
} match ;
|
|
|
|
[ 4 ]
|
|
[ 5 6 7 8 nil2 <cons2> <cons2> <cons2> <cons2> list2-length ] unit-test
|