Skip to content

Commit e64880c

Browse files
committed
Fixed rounding issue
1 parent 463c2b8 commit e64880c

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

plotters/src/coord/ranged1d/types/datetime.rs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,24 @@ pub trait TimeValue: Eq + Sized {
4848

4949
(f64::from(limit.1 - limit.0) * value_days / total_days) as i32 + limit.0
5050
}
51-
51+
5252
/// Map pixel to coord spec
5353
fn unmap_coord(point: i32, begin: &Self, end: &Self, limit: (i32, i32)) -> Self {
5454
let total_span = end.subtract(begin);
5555
let offset = (point - limit.0) as i64;
56-
56+
5757
// Check if nanoseconds fit in i64
5858
if let Some(total_ns) = total_span.num_nanoseconds() {
59-
if i64::MAX/total_ns < offset.abs() {
60-
let nano_seconds = offset*total_ns/((limit.1-limit.0) as i64);
59+
let factor = total_ns / ((limit.1 - limit.0) as i64);
60+
if i64::MAX / factor > offset.abs() {
61+
let nano_seconds = offset * factor;
6162
return begin.add(&Duration::nanoseconds(nano_seconds));
6263
}
6364
}
64-
65+
6566
// Otherwise, use days
6667
let total_days = total_span.num_days() as f64;
67-
let days = (((offset as f64)*total_days)/((limit.1-limit.0) as f64)) as i64;
68+
let days = (((offset as f64) * total_days) / ((limit.1 - limit.0) as f64)) as i64;
6869
begin.add(&Duration::days(days))
6970
}
7071
}
@@ -1214,47 +1215,47 @@ mod test {
12141215
assert_eq!(coord1.index_of(&coord1.from_index(i).unwrap()).unwrap(), i);
12151216
}
12161217
}
1217-
1218+
12181219
#[test]
12191220
fn test_datetime_with_unmap() {
12201221
let start_time = Utc.ymd(2021, 1, 1).and_hms(8, 0, 0);
1221-
let end_time = Utc.ymd(2023, 1,1,).and_hms(8, 0, 0);
1222+
let end_time = Utc.ymd(2023, 1, 1).and_hms(8, 0, 0);
12221223
let mid = Utc.ymd(2022, 1, 1).and_hms(8, 0, 0);
12231224
let coord: RangedDate<chrono::DateTime<_>> = (start_time..end_time).into();
12241225
let pos = coord.map(&mid, (1000, 2000));
12251226
assert_eq!(pos, 1500);
12261227
let value = coord.unmap(pos, (1000, 2000));
12271228
assert_eq!(value, Some(mid));
12281229
}
1229-
1230+
12301231
#[test]
12311232
fn test_naivedatetime_with_unmap() {
12321233
let start_time = chrono::NaiveDate::from_ymd(2021, 1, 1).and_hms_milli(8, 0, 0, 0);
1233-
let end_time = chrono::NaiveDate::from_ymd(2023, 1,1,).and_hms_milli(8, 0, 0, 0);
1234+
let end_time = chrono::NaiveDate::from_ymd(2023, 1, 1).and_hms_milli(8, 0, 0, 0);
12341235
let mid = chrono::NaiveDate::from_ymd(2022, 1, 1).and_hms_milli(8, 0, 0, 0);
12351236
let coord: RangedDate<chrono::NaiveDateTime> = (start_time..end_time).into();
12361237
let pos = coord.map(&mid, (1000, 2000));
12371238
assert_eq!(pos, 1500);
12381239
let value = coord.unmap(pos, (1000, 2000));
12391240
assert_eq!(value, Some(mid));
12401241
}
1241-
1242+
12421243
#[test]
12431244
fn test_date_with_unmap() {
12441245
let start_date = Utc.ymd(2021, 1, 1);
1245-
let end_date= Utc.ymd(2023, 1,1,);
1246+
let end_date = Utc.ymd(2023, 1, 1);
12461247
let mid = Utc.ymd(2022, 1, 1);
12471248
let coord: RangedDate<chrono::Date<_>> = (start_date..end_date).into();
12481249
let pos = coord.map(&mid, (1000, 2000));
12491250
assert_eq!(pos, 1500);
12501251
let value = coord.unmap(pos, (1000, 2000));
12511252
assert_eq!(value, Some(mid));
12521253
}
1253-
1254+
12541255
#[test]
12551256
fn test_naivedate_with_unmap() {
12561257
let start_date = chrono::NaiveDate::from_ymd(2021, 1, 1);
1257-
let end_date= chrono::NaiveDate::from_ymd(2023, 1,1,);
1258+
let end_date = chrono::NaiveDate::from_ymd(2023, 1, 1);
12581259
let mid = chrono::NaiveDate::from_ymd(2022, 1, 1);
12591260
let coord: RangedDate<chrono::NaiveDate> = (start_date..end_date).into();
12601261
let pos = coord.map(&mid, (1000, 2000));

0 commit comments

Comments
 (0)