]> gitweb.factorcode.org Git - factor.git/blob - extra/variants/variants-tests.factor
6de3de26058c527fcca04564998c7c07a4a78677
[factor.git] / extra / variants / variants-tests.factor
1 ! (c)2009 Joe Groff bsd license
2 USING: kernel math tools.test variants slots ;
3 IN: variants.tests
4
5 VARIANT: list
6     nil
7     cons: { { first object } { rest list } }
8     ;
9
10 { t } [ nil list? ] unit-test
11 { t } [ 1 nil <cons> list? ] unit-test
12 { f } [ 1 list? ] unit-test
13
14 : list-length ( list -- length )
15     {
16         { nil  [ 0 ] }
17         { cons [ nip list-length 1 + ] }
18     } match ;
19
20 { 4 }
21 [ 5 6 7 8 nil <cons> <cons> <cons> <cons> list-length ] unit-test
22
23 { nil t } [ list initial-value ] unit-test
24
25 VARIANT: list2 ;
26 VARIANT-MEMBER: list2 nil2 ;
27 VARIANT-MEMBER: list2 cons2: { { first object } { rest list2 } } ;
28
29 { t } [ nil2 list2? ] unit-test
30 { t } [ 1 nil2 <cons2> list2? ] unit-test
31 { f } [ 1 list2? ] unit-test
32
33 : list2-length ( list2 -- length )
34     {
35         { nil2  [ 0 ] }
36         { cons2 [ nip list2-length 1 + ] }
37     } match ;
38
39 { 4 }
40 [ 5 6 7 8 nil2 <cons2> <cons2> <cons2> <cons2> list2-length ] unit-test