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
7 TUPLE: sort-test a b c tuple2 ;
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 } }
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
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 } }
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
50 T{ sort-test { a 1 } { b 1 } { c 10 } }
51 T{ sort-test { a 1 } { b 1 } { c 11 } }
53 { T{ sort-test { a 1 } { b 3 } { c 9 } } }
55 T{ sort-test { a 2 } { b 5 } { c 3 } }
56 T{ sort-test { a 2 } { b 5 } { c 2 } }
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 }
67 { { a>> human<=> } { b>> <=> } } [ sort-by-slots ] keep
68 [ but-last-slice ] map split-by-slots [ >array ] map
71 : split-test ( seq -- seq' )
72 { { a>> } { b>> } } split-by-slots ;
74 [ split-test ] must-infer
77 [ { } { { a>> <=> } { b>> >=< } { c>> <=> } } sort-by-slots ] unit-test
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 } } } }
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
104 { tuple2 T{ tuple2 { d 1 } } }
110 { tuple2 T{ tuple2 { d 2 } } }
116 { tuple2 T{ tuple2 { d 3 } } }
122 { tuple2 T{ tuple2 { d 3 } } }
126 { tuple2 T{ tuple2 { d 3 } } }
132 { tuple2 T{ tuple2 { d 4 } } }
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