Skip to content

Commit f9a076d

Browse files
committed
Optimise tick generation to jump straight to range
Fixes #42
1 parent b6048b1 commit f9a076d

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44
### Fixed
55
- Set default axis bounds for case where all values are equal (Issue #36)
6+
- Optimise tick generation to jump straight to range (Issue #42)
67

78
## 0.5.0 - 2020-03-14
89
### Added

src/axis.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,8 @@ fn generate_ticks(min: f64, max: f64, step_size: f64) -> Vec<f64> {
173173
} else {
174174
// entirely negative axis
175175
ticks.extend(
176-
(1..)
177-
.map(|n| -1.0 * fix(f64::from(n) * step_size))
178-
.skip_while(|&v| v > max)
176+
(0..)
177+
.map(|n| -1.0 * fix((f64::from(n) * step_size) - max))
179178
.take_while(|&v| v >= min)
180179
.collect::<Vec<f64>>()
181180
.iter()
@@ -185,9 +184,8 @@ fn generate_ticks(min: f64, max: f64, step_size: f64) -> Vec<f64> {
185184
} else {
186185
// entirely positive axis
187186
ticks.extend(
188-
(1..)
189-
.map(|n| fix(f64::from(n) * step_size))
190-
.skip_while(|&v| v < min)
187+
(0..)
188+
.map(|n| fix((f64::from(n) * step_size) + min))
191189
.take_while(|&v| v <= max),
192190
);
193191
}
@@ -254,7 +252,7 @@ mod tests {
254252
assert_eq!(number_of_ticks(-7.93, 15.58, 5.0), 5);
255253
assert_eq!(number_of_ticks(0.0, 15.0, 4.0), 4);
256254
assert_eq!(number_of_ticks(0.0, 15.0, 5.0), 4);
257-
assert_eq!(number_of_ticks(5.0, 21.0, 4.0), 4);
255+
assert_eq!(number_of_ticks(5.0, 21.0, 4.0), 5);
258256
assert_eq!(number_of_ticks(5.0, 21.0, 5.0), 4);
259257
assert_eq!(number_of_ticks(-8.0, 15.58, 4.0), 6);
260258
assert_eq!(number_of_ticks(-8.0, 15.58, 5.0), 5);
@@ -388,7 +386,7 @@ mod tests {
388386
[0.0, 1000.0, 2000.0, 3000.0]
389387
);
390388

391-
assert_eq!(calculate_ticks(-10.0, -3.0, 6), [-10.0, -8.0, -6.0, -4.0]);
389+
assert_eq!(calculate_ticks(-11.0, -4.0, 6), [-10.0, -8.0, -6.0, -4.0]);
392390

393391
// test rounding
394392
assert_eq!(calculate_ticks(1.0, 1.5, 6), [1.0, 1.1, 1.2, 1.3, 1.4, 1.5]);

0 commit comments

Comments
 (0)