]> gitweb.factorcode.org Git - factor.git/blob - basis/sorting/slots/slots-tests.factor
Merge branch 'master' into experimental
[factor.git] / basis / sorting / slots / slots-tests.factor
1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors math.order sorting.slots tools.test
4 sorting.human arrays sequences kernel assocs multiline ;
5 IN: sorting.literals.tests
6
7 TUPLE: sort-test a b c tuple2 ;
8
9 TUPLE: tuple2 d ;
10
11 [
12     {
13         T{ sort-test { a 1 } { b 3 } { c 9 } }
14         T{ sort-test { a 1 } { b 1 } { c 10 } }
15         T{ sort-test { a 1 } { b 1 } { c 11 } }
16         T{ sort-test { a 2 } { b 5 } { c 2 } }
17         T{ sort-test { a 2 } { b 5 } { c 3 } }
18     }
19 ] [
20     {
21         T{ sort-test f 1 3 9 }
22         T{ sort-test f 1 1 10 }
23         T{ sort-test f 1 1 11 }
24         T{ sort-test f 2 5 3 }
25         T{ sort-test f 2 5 2 }
26     } { { a>> <=> } { b>> >=< } { c>> <=> } } sort-by-slots
27 ] unit-test
28
29 [
30     {
31         T{ sort-test { a 1 } { b 3 } { c 9 } }
32         T{ sort-test { a 1 } { b 1 } { c 10 } }
33         T{ sort-test { a 1 } { b 1 } { c 11 } }
34         T{ sort-test { a 2 } { b 5 } { c 2 } }
35         T{ sort-test { a 2 } { b 5 } { c 3 } }
36     }
37 ] [
38     {
39         T{ sort-test f 1 3 9 }
40         T{ sort-test f 1 1 10 }
41         T{ sort-test f 1 1 11 }
42         T{ sort-test f 2 5 3 }
43         T{ sort-test f 2 5 2 }
44     } { { a>> human<=> } { b>> human>=< } { c>> <=> } } sort-by-slots
45 ] unit-test
46
47 [
48     {
49         {
50             T{ sort-test { a 1 } { b 1 } { c 10 } }
51             T{ sort-test { a 1 } { b 1 } { c 11 } }
52         }
53         { T{ sort-test { a 1 } { b 3 } { c 9 } } }
54         {
55             T{ sort-test { a 2 } { b 5 } { c 3 } }
56             T{ sort-test { a 2 } { b 5 } { c 2 } }
57         }
58     }
59 ] [
60     {
61         T{ sort-test f 1 3 9 }
62         T{ sort-test f 1 1 10 }
63         T{ sort-test f 1 1 11 }
64         T{ sort-test f 2 5 3 }
65         T{ sort-test f 2 5 2 }
66     }
67     { { a>> human<=> } { b>> <=> } } [ sort-by-slots ] keep
68     [ but-last-slice ] map split-by-slots [ >array ] map
69 ] unit-test
70
71 : split-test ( seq -- seq' )
72     { { a>> } { b>> } } split-by-slots ;
73
74 [ split-test ] must-infer
75
76 [ { } ]
77 [ { } { { a>> <=> } { b>> >=< } { c>> <=> } } sort-by-slots ] unit-test
78
79 [
80     {
81         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 1 } } } }
82         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 2 } } } }
83         T{ sort-test { a 5 } { tuple2 T{ tuple2 { d 3 } } } }
84         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 3 } } } }
85         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 3 } } } }
86         T{ sort-test { a 5 } { tuple2 T{ tuple2 { d 4 } } } }
87     }
88 ] [
89     {
90         T{ sort-test f 6 f f T{ tuple2 f 1 } }
91         T{ sort-test f 5 f f T{ tuple2 f 4 } }
92         T{ sort-test f 6 f f T{ tuple2 f 3 } }
93         T{ sort-test f 6 f f T{ tuple2 f 3 } }
94         T{ sort-test f 5 f f T{ tuple2 f 3 } }
95         T{ sort-test f 6 f f T{ tuple2 f 2 } }
96     } { { tuple2>> d>> <=> } { a>> <=> } } sort-by-slots
97 ] unit-test
98
99 [
100     {
101         {
102             T{ sort-test
103                 { a 6 }
104                 { tuple2 T{ tuple2 { d 1 } } }
105             }
106         }
107         {
108             T{ sort-test
109                 { a 6 }
110                 { tuple2 T{ tuple2 { d 2 } } }
111             }
112         }
113         {
114             T{ sort-test
115                 { a 5 }
116                 { tuple2 T{ tuple2 { d 3 } } }
117             }
118         }
119         {
120             T{ sort-test
121                 { a 6 }
122                 { tuple2 T{ tuple2 { d 3 } } }
123             }
124             T{ sort-test
125                 { a 6 }
126                 { tuple2 T{ tuple2 { d 3 } } }
127             }
128         }
129         {
130             T{ sort-test
131                 { a 5 }
132                 { tuple2 T{ tuple2 { d 4 } } }
133             }
134         }
135     }
136 ] [
137     {
138         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 1 } } } }
139         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 2 } } } }
140         T{ sort-test { a 5 } { tuple2 T{ tuple2 { d 3 } } } }
141         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 3 } } } }
142         T{ sort-test { a 6 } { tuple2 T{ tuple2 { d 3 } } } }
143         T{ sort-test { a 5 } { tuple2 T{ tuple2 { d 4 } } } }
144     } { { tuple2>> d>> } { a>> } } split-by-slots [ >array ] map
145 ] unit-test