[librsvg/rustification] marker.rs: Add test for path_to_segments() for open paths
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/rustification] marker.rs: Add test for path_to_segments() for open paths
- Date: Wed, 26 Oct 2016 01:30:23 +0000 (UTC)
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]