[librsvg/rustification] marker.rs: Add test for path_to_segments() for open paths



commit 30f6d8f47838edd4a8a60eb0dbfba0eeb1ca5177
Author: Federico Mena Quintero <federico gnome org>
Date:   Tue Oct 25 20:18:26 2016 -0500

    marker.rs: Add test for path_to_segments() for open paths
    
    Turn this into a library.
    
    We export that function and the Segment struct; these may
    not need to be public in the end.

 rust/Cargo.toml    |    6 ++--
 rust/src/lib.rs    |    6 ++++
 rust/src/marker.rs |   71 ++++++++++++++++++++++++++++++----------------------
 3 files changed, 50 insertions(+), 33 deletions(-)
---
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index e308994..54d6779 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -1,10 +1,10 @@
 [package]
-name = "marker"
+name = "rsvg_internals"
 version = "0.0.1"
 authors = ["Federico Mena Quintero <federico gnome org>"]
 
 [dependencies]
 cairo-rs = "^0"
 
-[[bin]]
-name = "marker"
+[lib]
+name = "rsvg_internals"
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
new file mode 100644
index 0000000..e5f3664
--- /dev/null
+++ b/rust/src/lib.rs
@@ -0,0 +1,6 @@
+pub use marker::{
+    Segment,
+    path_to_segments,
+};
+
+mod marker;
diff --git a/rust/src/marker.rs b/rust/src/marker.rs
index 9061105..c0e8bde 100644
--- a/rust/src/marker.rs
+++ b/rust/src/marker.rs
@@ -1,6 +1,6 @@
 extern crate cairo;
 
-struct Segment {
+pub struct Segment {
     is_degenerate: bool, /* If true, only (p1x, p1y) are valid.  If false, all are valid */
     p1x: f64, p1y: f64,
     p2x: f64, p2y: f64,
@@ -36,7 +36,7 @@ fn double_equals (a: f64, b: f64) -> bool {
     (a - b).abs () < EPSILON
 }
 
-fn path_to_segments (path: cairo::Path) -> Vec<Segment> {
+pub fn path_to_segments (path: cairo::Path) -> Vec<Segment> {
     let mut last_x: f64;
     let mut last_y: f64;
     let mut cur_x: f64;
@@ -201,37 +201,48 @@ fn path_to_segments (path: cairo::Path) -> Vec<Segment> {
     segments
 }
 
-//#[cfg(test)]
-//mod tests {
-//    #[test]
-//    fn it_works() {
-fn main () {
-    let surf = cairo::ImageSurface::create (cairo::Format::Rgb24, 256, 256);
+#[cfg(test)]
+mod tests {
+    use super::*;
+    extern crate cairo;
 
-    let cr = cairo::Context::new (&surf);
+    fn setup_open_path () -> cairo::Path {
+        let surf = cairo::ImageSurface::create (cairo::Format::Rgb24, 1, 1);
+        let cr = cairo::Context::new (&surf);
 
-    cr.move_to (10.0, 10.0);
-    cr.curve_to (20.0, 20.0, 30.0, 20.0, 40.0, 20.0);
-    cr.close_path ();
-//    cr.move_to (30.0, 30.0);
+        cr.move_to (10.0, 10.0);
+        cr.line_to (20.0, 10.0);
+        cr.line_to (20.0, 20.0);
 
-    let path = cr.copy_path ();
-
-    let segments = path_to_segments (path);
-
-    let mut i : usize = 0;
+        let path = cr.copy_path ();
+        path
+    }
 
-    for s in segments {
-        println! ("segment {}: is_degenerate={}, ({}, {}) ({}, {}) ({}, {}) ({}, {})",
-                  i,
-                  s.is_degenerate,
-                  s.p1x, s.p1y,
-                  s.p2x, s.p2y,
-                  s.p3x, s.p3y,
-                  s.p4x, s.p4y);
-        i += 1;
+    #[test]
+    fn path_to_segments_handles_open_path () {
+        let path = setup_open_path ();
+        let segments = path_to_segments (path);
+
+        for (index, seg) in segments.iter ().enumerate () {
+            match index {
+                0 => {
+                    assert_eq! (seg.is_degenerate, false);
+                    assert_eq! ((seg.p1x, seg.p1y), (10.0, 10.0));
+                    assert_eq! ((seg.p2x, seg.p2y), (20.0, 10.0));
+                    assert_eq! ((seg.p3x, seg.p3y), (10.0, 10.0));
+                    assert_eq! ((seg.p4x, seg.p4y), (20.0, 10.0));
+                },
+
+                1 => {
+                    assert_eq! (seg.is_degenerate, false);
+                    assert_eq! ((seg.p1x, seg.p1y), (20.0, 10.0));
+                    assert_eq! ((seg.p2x, seg.p2y), (20.0, 20.0));
+                    assert_eq! ((seg.p3x, seg.p3y), (20.0, 10.0));
+                    assert_eq! ((seg.p4x, seg.p4y), (20.0, 20.0));
+                },
+
+                _ => { unreachable! (); }
+            }
+        }
     }
 }
-
-//    }
-//}


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