Mercurial > hg > svcore
comparison base/test/TestScaleTickIntervals.h @ 1450:a12fd0456f0c streaming-csv-writer
Merge from default branch
author | Chris Cannam |
---|---|
date | Tue, 17 Apr 2018 10:35:42 +0100 |
parents | 48e9f538e6e9 |
children | 3a128665fa6f |
comparison
equal
deleted
inserted
replaced
1449:deabf9fd3d28 | 1450:a12fd0456f0c |
---|---|
28 class TestScaleTickIntervals : public QObject | 28 class TestScaleTickIntervals : public QObject |
29 { | 29 { |
30 Q_OBJECT | 30 Q_OBJECT |
31 | 31 |
32 void printDiff(vector<ScaleTickIntervals::Tick> ticks, | 32 void printDiff(vector<ScaleTickIntervals::Tick> ticks, |
33 vector<ScaleTickIntervals::Tick> expected) { | 33 vector<ScaleTickIntervals::Tick> expected) { |
34 | 34 |
35 cerr << "Have " << ticks.size() << " ticks, expected " | 35 SVCERR << "Have " << ticks.size() << " ticks, expected " |
36 << expected.size() << endl; | 36 << expected.size() << endl; |
37 for (int i = 0; i < int(ticks.size()); ++i) { | 37 for (int i = 0; i < int(ticks.size()); ++i) { |
38 cerr << i << ": have " << ticks[i].value << " \"" | 38 SVCERR << i << ": have " << ticks[i].value << " \"" |
39 << ticks[i].label << "\", expected "; | 39 << ticks[i].label << "\", expected "; |
40 if (i < int(expected.size())) { | 40 if (i < int(expected.size())) { |
41 cerr << expected[i].value << " \"" << expected[i].label | 41 SVCERR << expected[i].value << " \"" << expected[i].label |
42 << "\"" << endl; | 42 << "\"" << endl; |
43 } else { | 43 } else { |
44 cerr << "(n/a)" << endl; | 44 SVCERR << "(n/a)" << endl; |
45 } | 45 } |
46 } | 46 } |
47 } | 47 } |
48 | 48 |
49 void compareTicks(ScaleTickIntervals::Ticks ticks, | 49 void compareTicks(ScaleTickIntervals::Ticks ticks, |
50 ScaleTickIntervals::Ticks expected, | 50 ScaleTickIntervals::Ticks expected, |
51 bool fuzzier = false) | 51 bool fuzzier = false) |
52 { | 52 { |
53 double eps = 1e-7; | 53 double eps = 1e-7; |
54 for (int i = 0; i < int(expected.size()); ++i) { | 54 for (int i = 0; i < int(expected.size()); ++i) { |
55 if (i < int(ticks.size())) { | 55 if (i < int(ticks.size())) { |
56 bool pass = true; | 56 bool pass = true; |
57 if (ticks[i].label != expected[i].label) { | 57 if (ticks[i].label != expected[i].label) { |
58 pass = false; | 58 pass = false; |
59 } else if (!fuzzier) { | 59 } else if (!fuzzier) { |
60 if (fabs(ticks[i].value - expected[i].value) > eps) { | 60 if (fabs(ticks[i].value - expected[i].value) > eps) { |
61 pass = false; | 61 pass = false; |
62 } | 62 } |
63 } else { | 63 } else { |
64 if (fabs(ticks[i].value - expected[i].value) > | 64 if (fabs(ticks[i].value - expected[i].value) > |
65 fabs(ticks[i].value) * 1e-5) { | 65 fabs(ticks[i].value) * 1e-5) { |
66 pass = false; | 66 pass = false; |
67 } | 67 } |
68 } | 68 } |
69 if (!pass) { | 69 if (!pass) { |
70 printDiff(ticks, expected); | 70 printDiff(ticks, expected); |
71 QCOMPARE(ticks[i].label, expected[i].label); | 71 QCOMPARE(ticks[i].label, expected[i].label); |
72 QCOMPARE(ticks[i].value, expected[i].value); | 72 QCOMPARE(ticks[i].value, expected[i].value); |
73 } | 73 } |
74 } | 74 } |
75 } | 75 } |
76 if (ticks.size() != expected.size()) { | 76 if (ticks.size() != expected.size()) { |
77 printDiff(ticks, expected); | 77 printDiff(ticks, expected); |
78 } | 78 } |
79 QCOMPARE(ticks.size(), expected.size()); | 79 QCOMPARE(ticks.size(), expected.size()); |
80 } | 80 } |
81 | 81 |
82 private slots: | 82 private slots: |
83 void linear_0_1_10() | 83 void linear_0_1_10() |
84 { | 84 { |
85 auto ticks = ScaleTickIntervals::linear({ 0, 1, 10 }); | 85 auto ticks = ScaleTickIntervals::linear({ 0, 1, 10 }); |
86 ScaleTickIntervals::Ticks expected { | 86 ScaleTickIntervals::Ticks expected { |
87 { 0.0, "0.0" }, | 87 { 0.0, "0.0" }, |
88 { 0.1, "0.1" }, | 88 { 0.1, "0.1" }, |
89 { 0.2, "0.2" }, | 89 { 0.2, "0.2" }, |
90 { 0.3, "0.3" }, | 90 { 0.3, "0.3" }, |
91 { 0.4, "0.4" }, | 91 { 0.4, "0.4" }, |
92 { 0.5, "0.5" }, | 92 { 0.5, "0.5" }, |
93 { 0.6, "0.6" }, | 93 { 0.6, "0.6" }, |
94 { 0.7, "0.7" }, | 94 { 0.7, "0.7" }, |
95 { 0.8, "0.8" }, | 95 { 0.8, "0.8" }, |
96 { 0.9, "0.9" }, | 96 { 0.9, "0.9" }, |
97 { 1.0, "1.0" } | 97 { 1.0, "1.0" } |
98 }; | 98 }; |
99 compareTicks(ticks, expected); | 99 compareTicks(ticks, expected); |
100 } | 100 } |
101 | 101 |
102 void linear_0_5_5() | 102 void linear_0_5_5() |
103 { | 103 { |
104 auto ticks = ScaleTickIntervals::linear({ 0, 5, 5 }); | 104 auto ticks = ScaleTickIntervals::linear({ 0, 5, 5 }); |
105 ScaleTickIntervals::Ticks expected { | 105 ScaleTickIntervals::Ticks expected { |
106 { 0, "0" }, | 106 { 0, "0" }, |
107 { 1, "1" }, | 107 { 1, "1" }, |
108 { 2, "2" }, | 108 { 2, "2" }, |
109 { 3, "3" }, | 109 { 3, "3" }, |
110 { 4, "4" }, | 110 { 4, "4" }, |
111 { 5, "5" }, | 111 { 5, "5" }, |
112 }; | 112 }; |
113 compareTicks(ticks, expected); | 113 compareTicks(ticks, expected); |
114 } | 114 } |
115 | 115 |
116 void linear_0_10_5() | 116 void linear_0_10_5() |
117 { | 117 { |
118 auto ticks = ScaleTickIntervals::linear({ 0, 10, 5 }); | 118 auto ticks = ScaleTickIntervals::linear({ 0, 10, 5 }); |
119 ScaleTickIntervals::Ticks expected { | 119 ScaleTickIntervals::Ticks expected { |
120 { 0, "0" }, | 120 { 0, "0" }, |
121 { 2, "2" }, | 121 { 2, "2" }, |
122 { 4, "4" }, | 122 { 4, "4" }, |
123 { 6, "6" }, | 123 { 6, "6" }, |
124 { 8, "8" }, | 124 { 8, "8" }, |
125 { 10, "10" } | 125 { 10, "10" } |
126 }; | 126 }; |
127 compareTicks(ticks, expected); | 127 compareTicks(ticks, expected); |
128 } | 128 } |
129 | 129 |
130 void linear_10_0_5() | 130 void linear_10_0_5() |
131 { | 131 { |
132 auto ticks = ScaleTickIntervals::linear({ 10, 0, 5 }); | 132 auto ticks = ScaleTickIntervals::linear({ 10, 0, 5 }); |
133 ScaleTickIntervals::Ticks expected { | 133 ScaleTickIntervals::Ticks expected { |
134 { 0, "0" }, | 134 { 0, "0" }, |
135 { 2, "2" }, | 135 { 2, "2" }, |
136 { 4, "4" }, | 136 { 4, "4" }, |
137 { 6, "6" }, | 137 { 6, "6" }, |
138 { 8, "8" }, | 138 { 8, "8" }, |
139 { 10, "10" } | 139 { 10, "10" } |
140 }; | 140 }; |
141 compareTicks(ticks, expected); | 141 compareTicks(ticks, expected); |
142 } | 142 } |
143 | 143 |
144 void linear_m10_0_5() | 144 void linear_m10_0_5() |
145 { | 145 { |
146 auto ticks = ScaleTickIntervals::linear({ -10, 0, 5 }); | 146 auto ticks = ScaleTickIntervals::linear({ -10, 0, 5 }); |
147 ScaleTickIntervals::Ticks expected { | 147 ScaleTickIntervals::Ticks expected { |
148 { -10, "-10" }, | 148 { -10, "-10" }, |
149 { -8, "-8" }, | 149 { -8, "-8" }, |
150 { -6, "-6" }, | 150 { -6, "-6" }, |
151 { -4, "-4" }, | 151 { -4, "-4" }, |
152 { -2, "-2" }, | 152 { -2, "-2" }, |
153 { 0, "0" } | 153 { 0, "0" } |
154 }; | 154 }; |
155 compareTicks(ticks, expected); | 155 compareTicks(ticks, expected); |
156 } | 156 } |
157 | 157 |
158 void linear_0_m10_5() | 158 void linear_0_m10_5() |
159 { | 159 { |
160 auto ticks = ScaleTickIntervals::linear({ 0, -10, 5 }); | 160 auto ticks = ScaleTickIntervals::linear({ 0, -10, 5 }); |
161 ScaleTickIntervals::Ticks expected { | 161 ScaleTickIntervals::Ticks expected { |
162 { -10, "-10" }, | 162 { -10, "-10" }, |
163 { -8, "-8" }, | 163 { -8, "-8" }, |
164 { -6, "-6" }, | 164 { -6, "-6" }, |
165 { -4, "-4" }, | 165 { -4, "-4" }, |
166 { -2, "-2" }, | 166 { -2, "-2" }, |
167 { 0, "0" } | 167 { 0, "0" } |
168 }; | 168 }; |
169 compareTicks(ticks, expected); | 169 compareTicks(ticks, expected); |
170 } | 170 } |
171 | 171 |
172 void linear_0_0p1_5() | 172 void linear_0_0p1_5() |
173 { | 173 { |
174 auto ticks = ScaleTickIntervals::linear({ 0, 0.1, 5 }); | 174 auto ticks = ScaleTickIntervals::linear({ 0, 0.1, 5 }); |
175 ScaleTickIntervals::Ticks expected { | 175 ScaleTickIntervals::Ticks expected { |
176 { 0.00, "0.00" }, | 176 { 0.00, "0.00" }, |
177 { 0.02, "0.02" }, | 177 { 0.02, "0.02" }, |
178 { 0.04, "0.04" }, | 178 { 0.04, "0.04" }, |
179 { 0.06, "0.06" }, | 179 { 0.06, "0.06" }, |
180 { 0.08, "0.08" }, | 180 { 0.08, "0.08" }, |
181 { 0.10, "0.10" } | 181 { 0.10, "0.10" } |
182 }; | 182 }; |
183 compareTicks(ticks, expected); | 183 compareTicks(ticks, expected); |
184 } | 184 } |
185 | 185 |
186 void linear_0_0p01_5() | 186 void linear_0_0p01_5() |
187 { | 187 { |
188 auto ticks = ScaleTickIntervals::linear({ 0, 0.01, 5 }); | 188 auto ticks = ScaleTickIntervals::linear({ 0, 0.01, 5 }); |
189 ScaleTickIntervals::Ticks expected { | 189 ScaleTickIntervals::Ticks expected { |
190 { 0.000, "0.000" }, | 190 { 0.000, "0.000" }, |
191 { 0.002, "0.002" }, | 191 { 0.002, "0.002" }, |
192 { 0.004, "0.004" }, | 192 { 0.004, "0.004" }, |
193 { 0.006, "0.006" }, | 193 { 0.006, "0.006" }, |
194 { 0.008, "0.008" }, | 194 { 0.008, "0.008" }, |
195 { 0.010, "0.010" } | 195 { 0.010, "0.010" } |
196 }; | 196 }; |
197 compareTicks(ticks, expected); | 197 compareTicks(ticks, expected); |
198 } | 198 } |
199 | 199 |
200 void linear_0_0p005_5() | 200 void linear_0_0p005_5() |
201 { | 201 { |
202 auto ticks = ScaleTickIntervals::linear({ 0, 0.005, 5 }); | 202 auto ticks = ScaleTickIntervals::linear({ 0, 0.005, 5 }); |
203 ScaleTickIntervals::Ticks expected { | 203 ScaleTickIntervals::Ticks expected { |
204 { 0.000, "0.000" }, | 204 { 0.000, "0.000" }, |
205 { 0.001, "0.001" }, | 205 { 0.001, "0.001" }, |
206 { 0.002, "0.002" }, | 206 { 0.002, "0.002" }, |
207 { 0.003, "0.003" }, | 207 { 0.003, "0.003" }, |
208 { 0.004, "0.004" }, | 208 { 0.004, "0.004" }, |
209 { 0.005, "0.005" } | 209 { 0.005, "0.005" } |
210 }; | 210 }; |
211 compareTicks(ticks, expected); | 211 compareTicks(ticks, expected); |
212 } | 212 } |
213 | 213 |
214 void linear_0_0p001_5() | 214 void linear_0_0p001_5() |
215 { | 215 { |
216 auto ticks = ScaleTickIntervals::linear({ 0, 0.001, 5 }); | 216 auto ticks = ScaleTickIntervals::linear({ 0, 0.001, 5 }); |
217 ScaleTickIntervals::Ticks expected { | 217 ScaleTickIntervals::Ticks expected { |
218 { 0.0000, "0.0e+00" }, | 218 { 0.0000, "0.0e+00" }, |
219 { 0.0002, "2.0e-04" }, | 219 { 0.0002, "2.0e-04" }, |
220 { 0.0004, "4.0e-04" }, | 220 { 0.0004, "4.0e-04" }, |
221 { 0.0006, "6.0e-04" }, | 221 { 0.0006, "6.0e-04" }, |
222 { 0.0008, "8.0e-04" }, | 222 { 0.0008, "8.0e-04" }, |
223 { 0.0010, "1.0e-03" } | 223 { 0.0010, "1.0e-03" } |
224 }; | 224 }; |
225 compareTicks(ticks, expected); | 225 compareTicks(ticks, expected); |
226 } | 226 } |
227 | 227 |
228 void linear_1_1p001_5() | 228 void linear_1_1p001_5() |
229 { | 229 { |
230 auto ticks = ScaleTickIntervals::linear({ 1, 1.001, 5 }); | 230 auto ticks = ScaleTickIntervals::linear({ 1, 1.001, 5 }); |
231 ScaleTickIntervals::Ticks expected { | 231 ScaleTickIntervals::Ticks expected { |
232 { 1.0000, "1.0000" }, | 232 { 1.0000, "1.0000" }, |
233 { 1.0002, "1.0002" }, | 233 { 1.0002, "1.0002" }, |
234 { 1.0004, "1.0004" }, | 234 { 1.0004, "1.0004" }, |
235 { 1.0006, "1.0006" }, | 235 { 1.0006, "1.0006" }, |
236 { 1.0008, "1.0008" }, | 236 { 1.0008, "1.0008" }, |
237 { 1.0010, "1.0010" } | 237 { 1.0010, "1.0010" } |
238 }; | 238 }; |
239 compareTicks(ticks, expected); | 239 compareTicks(ticks, expected); |
240 } | 240 } |
241 | 241 |
242 void linear_0p001_1_5() | 242 void linear_0p001_1_5() |
243 { | 243 { |
244 auto ticks = ScaleTickIntervals::linear({ 0.001, 1, 5 }); | 244 auto ticks = ScaleTickIntervals::linear({ 0.001, 1, 5 }); |
245 ScaleTickIntervals::Ticks expected { | 245 ScaleTickIntervals::Ticks expected { |
246 { 0.1, "0.1" }, | 246 { 0.1, "0.1" }, |
247 { 0.3, "0.3" }, | 247 { 0.3, "0.3" }, |
248 { 0.5, "0.5" }, | 248 { 0.5, "0.5" }, |
249 { 0.7, "0.7" }, | 249 { 0.7, "0.7" }, |
250 { 0.9, "0.9" }, | 250 { 0.9, "0.9" }, |
251 }; | 251 }; |
252 compareTicks(ticks, expected); | 252 compareTicks(ticks, expected); |
253 } | 253 } |
254 | 254 |
255 void linear_10000_10010_5() | 255 void linear_10000_10010_5() |
256 { | 256 { |
257 auto ticks = ScaleTickIntervals::linear({ 10000, 10010, 5 }); | 257 auto ticks = ScaleTickIntervals::linear({ 10000, 10010, 5 }); |
258 ScaleTickIntervals::Ticks expected { | 258 ScaleTickIntervals::Ticks expected { |
259 { 10000, "10000" }, | 259 { 10000, "10000" }, |
260 { 10002, "10002" }, | 260 { 10002, "10002" }, |
261 { 10004, "10004" }, | 261 { 10004, "10004" }, |
262 { 10006, "10006" }, | 262 { 10006, "10006" }, |
263 { 10008, "10008" }, | 263 { 10008, "10008" }, |
264 { 10010, "10010" }, | 264 { 10010, "10010" }, |
265 }; | 265 }; |
266 compareTicks(ticks, expected); | 266 compareTicks(ticks, expected); |
267 } | 267 } |
268 | 268 |
269 void linear_10000_20000_5() | 269 void linear_10000_20000_5() |
270 { | 270 { |
271 auto ticks = ScaleTickIntervals::linear({ 10000, 20000, 5 }); | 271 auto ticks = ScaleTickIntervals::linear({ 10000, 20000, 5 }); |
272 ScaleTickIntervals::Ticks expected { | 272 ScaleTickIntervals::Ticks expected { |
273 { 10000, "10000" }, | 273 { 10000, "10000" }, |
274 { 12000, "12000" }, | 274 { 12000, "12000" }, |
275 { 14000, "14000" }, | 275 { 14000, "14000" }, |
276 { 16000, "16000" }, | 276 { 16000, "16000" }, |
277 { 18000, "18000" }, | 277 { 18000, "18000" }, |
278 { 20000, "20000" }, | 278 { 20000, "20000" }, |
279 }; | 279 }; |
280 compareTicks(ticks, expected); | 280 compareTicks(ticks, expected); |
281 } | 281 } |
282 | 282 |
283 void linear_m1_1_10() | 283 void linear_m1_1_10() |
284 { | 284 { |
285 auto ticks = ScaleTickIntervals::linear({ -1, 1, 10 }); | 285 auto ticks = ScaleTickIntervals::linear({ -1, 1, 10 }); |
286 ScaleTickIntervals::Ticks expected { | 286 ScaleTickIntervals::Ticks expected { |
287 { -1.0, "-1.0" }, | 287 { -1.0, "-1.0" }, |
288 { -0.8, "-0.8" }, | 288 { -0.8, "-0.8" }, |
289 { -0.6, "-0.6" }, | 289 { -0.6, "-0.6" }, |
290 { -0.4, "-0.4" }, | 290 { -0.4, "-0.4" }, |
291 { -0.2, "-0.2" }, | 291 { -0.2, "-0.2" }, |
292 { 0.0, "0.0" }, | 292 { 0.0, "0.0" }, |
293 { 0.2, "0.2" }, | 293 { 0.2, "0.2" }, |
294 { 0.4, "0.4" }, | 294 { 0.4, "0.4" }, |
295 { 0.6, "0.6" }, | 295 { 0.6, "0.6" }, |
296 { 0.8, "0.8" }, | 296 { 0.8, "0.8" }, |
297 { 1.0, "1.0" } | 297 { 1.0, "1.0" } |
298 }; | 298 }; |
299 compareTicks(ticks, expected); | 299 compareTicks(ticks, expected); |
300 } | 300 } |
301 | 301 |
302 void linear_221p23_623p7_57p4() | 302 void linear_221p23_623p7_57p4() |
303 { | 303 { |
304 auto ticks = ScaleTickIntervals::linear({ 221.23, 623.7, 4 }); | 304 auto ticks = ScaleTickIntervals::linear({ 221.23, 623.7, 4 }); |
305 // only 4 ticks, not 5, because none of the rounded tick | 305 // only 4 ticks, not 5, because none of the rounded tick |
306 // values lies on an end value | 306 // values lies on an end value |
307 ScaleTickIntervals::Ticks expected { | 307 ScaleTickIntervals::Ticks expected { |
308 { 300, "300" }, | 308 { 300, "300" }, |
309 { 400, "400" }, | 309 { 400, "400" }, |
310 { 500, "500" }, | 310 { 500, "500" }, |
311 { 600, "600" }, | 311 { 600, "600" }, |
312 }; | 312 }; |
313 compareTicks(ticks, expected); | 313 compareTicks(ticks, expected); |
314 } | 314 } |
315 | 315 |
316 void linear_sqrt2_pi_7() | 316 void linear_sqrt2_pi_7() |
317 { | 317 { |
318 auto ticks = ScaleTickIntervals::linear({ sqrt(2.0), M_PI, 7 }); | 318 auto ticks = ScaleTickIntervals::linear({ sqrt(2.0), M_PI, 7 }); |
319 // This would be better in steps of 0.25, but we only round to | 319 // This would be better in steps of 0.25, but we only round to |
320 // integral powers of ten | 320 // integral powers of ten |
321 ScaleTickIntervals::Ticks expected { | 321 ScaleTickIntervals::Ticks expected { |
322 { 1.5, "1.5" }, | 322 { 1.5, "1.5" }, |
323 { 1.7, "1.7" }, | 323 { 1.7, "1.7" }, |
324 { 1.9, "1.9" }, | 324 { 1.9, "1.9" }, |
325 { 2.1, "2.1" }, | 325 { 2.1, "2.1" }, |
326 { 2.3, "2.3" }, | 326 { 2.3, "2.3" }, |
327 { 2.5, "2.5" }, | 327 { 2.5, "2.5" }, |
328 { 2.7, "2.7" }, | 328 { 2.7, "2.7" }, |
329 { 2.9, "2.9" }, | 329 { 2.9, "2.9" }, |
330 { 3.1, "3.1" }, | 330 { 3.1, "3.1" }, |
331 }; | 331 }; |
332 compareTicks(ticks, expected); | 332 compareTicks(ticks, expected); |
333 } | 333 } |
334 | 334 |
335 void linear_pi_avogadro_7() | 335 void linear_pi_avogadro_7() |
336 { | 336 { |
337 auto ticks = ScaleTickIntervals::linear({ M_PI, 6.022140857e23, 7 }); | 337 auto ticks = ScaleTickIntervals::linear({ M_PI, 6.022140857e23, 7 }); |
338 ScaleTickIntervals::Ticks expected { | 338 ScaleTickIntervals::Ticks expected { |
339 // not perfect, but ok-ish | 339 // not perfect, but ok-ish |
340 { 0, "0.0e+00" }, | 340 { 0, "0.0e+00" }, |
341 { 9e+22, "9.0e+22" }, | 341 { 9e+22, "9.0e+22" }, |
342 { 1.8e+23, "1.8e+23" }, | 342 { 1.8e+23, "1.8e+23" }, |
343 { 2.7e+23, "2.7e+23" }, | 343 { 2.7e+23, "2.7e+23" }, |
344 { 3.6e+23, "3.6e+23" }, | 344 { 3.6e+23, "3.6e+23" }, |
345 { 4.5e+23, "4.5e+23" }, | 345 { 4.5e+23, "4.5e+23" }, |
346 { 5.4e+23, "5.4e+23" }, | 346 { 5.4e+23, "5.4e+23" }, |
347 }; | 347 }; |
348 compareTicks(ticks, expected); | 348 compareTicks(ticks, expected); |
349 } | 349 } |
350 | 350 |
351 void linear_2_3_1() | 351 void linear_2_3_1() |
352 { | 352 { |
353 auto ticks = ScaleTickIntervals::linear({ 2, 3, 1 }); | 353 auto ticks = ScaleTickIntervals::linear({ 2, 3, 1 }); |
354 ScaleTickIntervals::Ticks expected { | 354 ScaleTickIntervals::Ticks expected { |
355 { 2.0, "2" }, | 355 { 2.0, "2" }, |
356 { 3.0, "3" } | 356 { 3.0, "3" } |
357 }; | 357 }; |
358 compareTicks(ticks, expected); | 358 compareTicks(ticks, expected); |
359 } | 359 } |
360 | 360 |
361 void linear_2_3_2() | 361 void linear_2_3_2() |
362 { | 362 { |
363 auto ticks = ScaleTickIntervals::linear({ 2, 3, 2 }); | 363 auto ticks = ScaleTickIntervals::linear({ 2, 3, 2 }); |
364 ScaleTickIntervals::Ticks expected { | 364 ScaleTickIntervals::Ticks expected { |
365 { 2.0, "2.0" }, | 365 { 2.0, "2.0" }, |
366 { 2.5, "2.5" }, | 366 { 2.5, "2.5" }, |
367 { 3.0, "3.0" } | 367 { 3.0, "3.0" } |
368 }; | 368 }; |
369 compareTicks(ticks, expected); | 369 compareTicks(ticks, expected); |
370 } | 370 } |
371 | 371 |
372 void linear_2_3_3() | 372 void linear_2_3_3() |
373 { | 373 { |
374 auto ticks = ScaleTickIntervals::linear({ 2, 3, 3 }); | 374 auto ticks = ScaleTickIntervals::linear({ 2, 3, 3 }); |
375 ScaleTickIntervals::Ticks expected { | 375 ScaleTickIntervals::Ticks expected { |
376 { 2.0, "2.0" }, | 376 { 2.0, "2.0" }, |
377 { 2.3, "2.3" }, | 377 { 2.3, "2.3" }, |
378 { 2.6, "2.6" }, | 378 { 2.6, "2.6" }, |
379 { 2.9, "2.9" } | 379 { 2.9, "2.9" } |
380 }; | 380 }; |
381 compareTicks(ticks, expected); | 381 compareTicks(ticks, expected); |
382 } | 382 } |
383 | 383 |
384 void linear_2_3_4() | 384 void linear_2_3_4() |
385 { | 385 { |
386 auto ticks = ScaleTickIntervals::linear({ 2, 3, 4 }); | 386 auto ticks = ScaleTickIntervals::linear({ 2, 3, 4 }); |
387 // This would be better in steps of 0.25, but we only round to | 387 // This would be better in steps of 0.25, but we only round to |
388 // integral powers of ten | 388 // integral powers of ten |
389 ScaleTickIntervals::Ticks expected { | 389 ScaleTickIntervals::Ticks expected { |
390 { 2.0, "2.0" }, | 390 { 2.0, "2.0" }, |
391 { 2.3, "2.3" }, | 391 { 2.3, "2.3" }, |
392 { 2.6, "2.6" }, | 392 { 2.6, "2.6" }, |
393 { 2.9, "2.9" } | 393 { 2.9, "2.9" } |
394 }; | 394 }; |
395 compareTicks(ticks, expected); | 395 compareTicks(ticks, expected); |
396 } | 396 } |
397 | 397 |
398 void linear_2_3_5() | 398 void linear_2_3_5() |
399 { | 399 { |
400 auto ticks = ScaleTickIntervals::linear({ 2, 3, 5 }); | 400 auto ticks = ScaleTickIntervals::linear({ 2, 3, 5 }); |
401 ScaleTickIntervals::Ticks expected { | 401 ScaleTickIntervals::Ticks expected { |
402 { 2.0, "2.0" }, | 402 { 2.0, "2.0" }, |
403 { 2.2, "2.2" }, | 403 { 2.2, "2.2" }, |
404 { 2.4, "2.4" }, | 404 { 2.4, "2.4" }, |
405 { 2.6, "2.6" }, | 405 { 2.6, "2.6" }, |
406 { 2.8, "2.8" }, | 406 { 2.8, "2.8" }, |
407 { 3.0, "3.0" } | 407 { 3.0, "3.0" } |
408 }; | 408 }; |
409 compareTicks(ticks, expected); | 409 compareTicks(ticks, expected); |
410 } | 410 } |
411 | 411 |
412 void linear_2_3_6() | 412 void linear_2_3_6() |
413 { | 413 { |
414 auto ticks = ScaleTickIntervals::linear({ 2, 3, 6 }); | 414 auto ticks = ScaleTickIntervals::linear({ 2, 3, 6 }); |
415 ScaleTickIntervals::Ticks expected { | 415 ScaleTickIntervals::Ticks expected { |
416 { 2.0, "2.0" }, | 416 { 2.0, "2.0" }, |
417 { 2.2, "2.2" }, | 417 { 2.2, "2.2" }, |
418 { 2.4, "2.4" }, | 418 { 2.4, "2.4" }, |
419 { 2.6, "2.6" }, | 419 { 2.6, "2.6" }, |
420 { 2.8, "2.8" }, | 420 { 2.8, "2.8" }, |
421 { 3.0, "3.0" } | 421 { 3.0, "3.0" } |
422 }; | 422 }; |
423 compareTicks(ticks, expected); | 423 compareTicks(ticks, expected); |
424 } | 424 } |
425 | 425 |
426 void linear_1_1_10() | 426 void linear_1_1_10() |
427 { | 427 { |
428 // pathological range | 428 // pathological range |
429 auto ticks = ScaleTickIntervals::linear({ 1, 1, 10 }); | 429 auto ticks = ScaleTickIntervals::linear({ 1, 1, 10 }); |
430 ScaleTickIntervals::Ticks expected { | 430 ScaleTickIntervals::Ticks expected { |
431 { 1.0, "1" } | 431 { 1.0, "1" } |
432 }; | 432 }; |
433 compareTicks(ticks, expected); | 433 compareTicks(ticks, expected); |
434 } | 434 } |
435 | 435 |
436 void linear_0_0_10() | 436 void linear_0_0_10() |
437 { | 437 { |
438 // pathological range | 438 // pathological range |
439 auto ticks = ScaleTickIntervals::linear({ 0, 0, 10 }); | 439 auto ticks = ScaleTickIntervals::linear({ 0, 0, 10 }); |
440 ScaleTickIntervals::Ticks expected { | 440 ScaleTickIntervals::Ticks expected { |
441 { 0.0, "0" } | 441 { 0.0, "0" } |
442 }; | 442 }; |
443 compareTicks(ticks, expected); | 443 compareTicks(ticks, expected); |
444 } | 444 } |
445 | 445 |
446 void linear_0_1_1() | 446 void linear_0_1_1() |
447 { | 447 { |
448 auto ticks = ScaleTickIntervals::linear({ 0, 1, 1 }); | 448 auto ticks = ScaleTickIntervals::linear({ 0, 1, 1 }); |
449 ScaleTickIntervals::Ticks expected { | 449 ScaleTickIntervals::Ticks expected { |
450 { 0.0, "0" }, | 450 { 0.0, "0" }, |
451 { 1.0, "1" } | 451 { 1.0, "1" } |
452 }; | 452 }; |
453 compareTicks(ticks, expected); | 453 compareTicks(ticks, expected); |
454 } | 454 } |
455 | 455 |
456 void linear_0_1_0() | 456 void linear_0_1_0() |
457 { | 457 { |
458 // senseless input | 458 // senseless input |
459 auto ticks = ScaleTickIntervals::linear({ 0, 1, 0 }); | 459 auto ticks = ScaleTickIntervals::linear({ 0, 1, 0 }); |
460 ScaleTickIntervals::Ticks expected { | 460 ScaleTickIntervals::Ticks expected { |
461 { 0.0, "0" }, | 461 { 0.0, "0" }, |
462 }; | 462 }; |
463 compareTicks(ticks, expected); | 463 compareTicks(ticks, expected); |
464 } | 464 } |
465 | 465 |
466 void linear_0_1_m1() | 466 void linear_0_1_m1() |
467 { | 467 { |
468 // senseless input | 468 // senseless input |
469 auto ticks = ScaleTickIntervals::linear({ 0, 1, -1 }); | 469 auto ticks = ScaleTickIntervals::linear({ 0, 1, -1 }); |
470 ScaleTickIntervals::Ticks expected { | 470 ScaleTickIntervals::Ticks expected { |
471 { 0.0, "0" }, | 471 { 0.0, "0" }, |
472 }; | 472 }; |
473 compareTicks(ticks, expected); | 473 compareTicks(ticks, expected); |
474 } | 474 } |
475 | 475 |
476 void linear_0p465_778_10() | 476 void linear_0p465_778_10() |
477 { | 477 { |
478 // a case that gave unsatisfactory results in real life | 478 // a case that gave unsatisfactory results in real life |
494 } | 494 } |
495 | 495 |
496 void log_1_10_2() | 496 void log_1_10_2() |
497 { | 497 { |
498 auto ticks = ScaleTickIntervals::logarithmic({ 1, 10, 2 }); | 498 auto ticks = ScaleTickIntervals::logarithmic({ 1, 10, 2 }); |
499 ScaleTickIntervals::Ticks expected { | 499 ScaleTickIntervals::Ticks expected { |
500 { 1.0, "1.0" }, | 500 { 1.0, "1.0" }, |
501 { pow(10.0, 0.5), "3.2" }, | 501 { pow(10.0, 0.5), "3.2" }, |
502 { 10.0, "10.0" }, | 502 { 10.0, "10.0" }, |
503 }; | 503 }; |
504 compareTicks(ticks, expected); | 504 compareTicks(ticks, expected); |
505 } | 505 } |
506 | 506 |
507 void log_0_10_2() | 507 void log_0_10_2() |
508 { | 508 { |
509 auto ticks = ScaleTickIntervals::logarithmic({ 0, 10, 2 }); | 509 auto ticks = ScaleTickIntervals::logarithmic({ 0, 10, 2 }); |
510 ScaleTickIntervals::Ticks expected { | 510 ScaleTickIntervals::Ticks expected { |
511 { 1e-6, "1e-06" }, | 511 { 1e-6, "1e-06" }, |
512 { 1, "1" }, | 512 { 1, "1" }, |
513 }; | 513 }; |
514 compareTicks(ticks, expected); | 514 compareTicks(ticks, expected); |
515 } | 515 } |
516 | 516 |
517 void log_pi_avogadro_7() | 517 void log_pi_avogadro_7() |
518 { | 518 { |
519 auto ticks = ScaleTickIntervals::logarithmic({ M_PI, 6.022140857e23, 7 }); | 519 auto ticks = ScaleTickIntervals::logarithmic({ M_PI, 6.022140857e23, 7 }); |
520 ScaleTickIntervals::Ticks expected { | 520 ScaleTickIntervals::Ticks expected { |
521 { 1000, "1e+03" }, | 521 { 1000, "1e+03" }, |
522 { 1e+06, "1e+06" }, | 522 { 1e+06, "1e+06" }, |
523 { 1e+09, "1e+09" }, | 523 { 1e+09, "1e+09" }, |
524 { 1e+12, "1e+12" }, | 524 { 1e+12, "1e+12" }, |
525 { 1e+15, "1e+15" }, | 525 { 1e+15, "1e+15" }, |
526 { 1e+18, "1e+18" }, | 526 { 1e+18, "1e+18" }, |
527 { 1e+21, "1e+21" }, | 527 { 1e+21, "1e+21" }, |
528 }; | 528 }; |
529 compareTicks(ticks, expected, true); | 529 compareTicks(ticks, expected, true); |
530 } | 530 } |
531 | 531 |
532 void log_0p465_778_10() | 532 void log_0p465_778_10() |
533 { | 533 { |
534 auto ticks = ScaleTickIntervals::logarithmic({ 0.465, 778.08, 10 }); | 534 auto ticks = ScaleTickIntervals::logarithmic({ 0.465, 778.08, 10 }); |