1package txn
2
3import (
4	"sort"
5
6	. "gopkg.in/check.v1"
7)
8
9type DocKeySuite struct{}
10
11var _ = Suite(&DocKeySuite{})
12
13type T struct {
14	A int
15	B string
16}
17
18type T2 struct {
19	A int
20	B string
21}
22
23type T3 struct {
24	A int
25	B string
26}
27
28type T4 struct {
29	A int
30	B string
31}
32
33type T5 struct {
34	F int
35	Q string
36}
37
38type T6 struct {
39	A int
40	B string
41}
42
43type T7 struct {
44	A bool
45	B float64
46}
47
48type T8 struct {
49	A int
50	B string
51}
52
53type T9 struct {
54	A int
55	B string
56	C bool
57}
58
59type T10 struct {
60	C int    `bson:"a"`
61	D string `bson:"b,omitempty"`
62}
63
64type T11 struct {
65	C int
66	D string
67}
68
69type T12 struct {
70	S string
71}
72
73type T13 struct {
74	p, q, r bool
75	S       string
76}
77
78var docKeysTests = [][]docKeys{
79	{{
80		{"c", 1},
81		{"c", 5},
82		{"c", 2},
83	}, {
84		{"c", 1},
85		{"c", 2},
86		{"c", 5},
87	}}, {{
88		{"c", "foo"},
89		{"c", "bar"},
90		{"c", "bob"},
91	}, {
92		{"c", "bar"},
93		{"c", "bob"},
94		{"c", "foo"},
95	}}, {{
96		{"c", 0.2},
97		{"c", 0.07},
98		{"c", 0.9},
99	}, {
100		{"c", 0.07},
101		{"c", 0.2},
102		{"c", 0.9},
103	}}, {{
104		{"c", true},
105		{"c", false},
106		{"c", true},
107	}, {
108		{"c", false},
109		{"c", true},
110		{"c", true},
111	}}, {{
112		{"c", T{1, "b"}},
113		{"c", T{1, "a"}},
114		{"c", T{0, "b"}},
115		{"c", T{0, "a"}},
116	}, {
117		{"c", T{0, "a"}},
118		{"c", T{0, "b"}},
119		{"c", T{1, "a"}},
120		{"c", T{1, "b"}},
121	}}, {{
122		{"c", T{1, "a"}},
123		{"c", T{0, "a"}},
124	}, {
125		{"c", T{0, "a"}},
126		{"c", T{1, "a"}},
127	}}, {{
128		{"c", T3{0, "b"}},
129		{"c", T2{1, "b"}},
130		{"c", T3{1, "a"}},
131		{"c", T2{0, "a"}},
132	}, {
133		{"c", T2{0, "a"}},
134		{"c", T3{0, "b"}},
135		{"c", T3{1, "a"}},
136		{"c", T2{1, "b"}},
137	}}, {{
138		{"c", T5{1, "b"}},
139		{"c", T4{1, "b"}},
140		{"c", T5{0, "a"}},
141		{"c", T4{0, "a"}},
142	}, {
143		{"c", T4{0, "a"}},
144		{"c", T5{0, "a"}},
145		{"c", T4{1, "b"}},
146		{"c", T5{1, "b"}},
147	}}, {{
148		{"c", T6{1, "b"}},
149		{"c", T7{true, 0.2}},
150		{"c", T6{0, "a"}},
151		{"c", T7{false, 0.04}},
152	}, {
153		{"c", T6{0, "a"}},
154		{"c", T6{1, "b"}},
155		{"c", T7{false, 0.04}},
156		{"c", T7{true, 0.2}},
157	}}, {{
158		{"c", T9{1, "b", true}},
159		{"c", T8{1, "b"}},
160		{"c", T9{0, "a", false}},
161		{"c", T8{0, "a"}},
162	}, {
163		{"c", T9{0, "a", false}},
164		{"c", T8{0, "a"}},
165		{"c", T9{1, "b", true}},
166		{"c", T8{1, "b"}},
167	}}, {{
168		{"b", 2},
169		{"a", 5},
170		{"c", 2},
171		{"b", 1},
172	}, {
173		{"a", 5},
174		{"b", 1},
175		{"b", 2},
176		{"c", 2},
177	}}, {{
178		{"c", T11{1, "a"}},
179		{"c", T11{1, "a"}},
180		{"c", T10{1, "a"}},
181	}, {
182		{"c", T10{1, "a"}},
183		{"c", T11{1, "a"}},
184		{"c", T11{1, "a"}},
185	}}, {{
186		{"c", T12{"a"}},
187		{"c", T13{false, true, false, "a"}},
188		{"c", T12{"b"}},
189		{"c", T13{false, true, false, "b"}},
190	}, {
191		{"c", T12{"a"}},
192		{"c", T13{false, true, false, "a"}},
193		{"c", T12{"b"}},
194		{"c", T13{false, true, false, "b"}},
195	}},
196}
197
198func (s *DocKeySuite) TestSort(c *C) {
199	for _, test := range docKeysTests {
200		keys := test[0]
201		expected := test[1]
202		sort.Sort(keys)
203		c.Check(keys, DeepEquals, expected)
204	}
205}
206