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