[librsvg: 1/2] Use float_cmp for floating number comparisons




commit 2d4aed0812564f3d22b3ea6a40032c39f0f4d5f4
Author: Sven Neumann <sven svenfoo org>
Date:   Fri Sep 4 10:02:47 2020 +0200

    Use float_cmp for floating number comparisons

 rsvg_internals/src/angle.rs       |  9 ++++-----
 rsvg_internals/src/drawing_ctx.rs | 10 +++++-----
 2 files changed, 9 insertions(+), 10 deletions(-)
---
diff --git a/rsvg_internals/src/angle.rs b/rsvg_internals/src/angle.rs
index fcd65a5c..182b5b7c 100644
--- a/rsvg_internals/src/angle.rs
+++ b/rsvg_internals/src/angle.rs
@@ -3,6 +3,7 @@
 use std::f64::consts::*;
 
 use cssparser::{Parser, Token};
+use float_cmp::approx_eq;
 
 use crate::error::*;
 use crate::parsers::{finite_f32, Parse};
@@ -46,8 +47,8 @@ impl Angle {
     // Normalizes an angle to [0.0, 2*PI)
     fn normalize(rad: f64) -> f64 {
         let res = rad % (PI * 2.0);
-        if res.abs() < std::f64::EPSILON {
-            res.abs()
+        if approx_eq!(f64, res, 0.0) {
+            0.0
         } else if res < 0.0 {
             res + PI * 2.0
         } else {
@@ -100,8 +101,6 @@ impl Parse for Angle {
 #[cfg(test)]
 mod tests {
     use super::*;
-    use float_cmp::ApproxEq;
-    use std::f64;
 
     #[test]
     fn parses_angle() {
@@ -129,7 +128,7 @@ mod tests {
         let i = Angle::from_vector(incoming_vx, incoming_vy);
         let o = Angle::from_vector(outgoing_vx, outgoing_vy);
         let bisected = i.bisect(o);
-        assert!(expected.approx_eq(bisected.radians(), (2.0 * PI * f64::EPSILON, 1)));
+        assert!(approx_eq!(f64, expected, bisected.radians()));
     }
 
     #[test]
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index ead30f4b..b77efb72 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -926,14 +926,14 @@ impl DrawingCtx {
         let scaled_width = pattern_rect.width() * bbwscale;
         let scaled_height = pattern_rect.height() * bbhscale;
 
+        if approx_eq!(f64, scaled_width, 0.0) || approx_eq!(f64, scaled_height, 0.0) {
+            return Ok(false);
+        }
+
         let pw: i32 = (scaled_width * scwscale) as i32;
         let ph: i32 = (scaled_height * schscale) as i32;
 
-        if scaled_width.abs() < f64::EPSILON
-            || scaled_height.abs() < f64::EPSILON
-            || pw < 1
-            || ph < 1
-        {
+        if pw < 1 || ph < 1 {
             return Ok(false);
         }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]