Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,5 @@ opt-level = 2
serde = { version = "1", features = ["derive"] }
serde_json = "1.0.120"
usvg = "0.45.0"
insta = "1.42.2"
rstest = { version = "0.25.0", default-features = false }
4 changes: 4 additions & 0 deletions seance/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ log = "0.4"
lyon_algorithms = "1.0.4"
serde = { version = "1", features = ["derive"] }
usvg.workspace = true

[dev-dependencies]
insta.workspace = true
rstest.workspace = true
30 changes: 30 additions & 0 deletions seance/src/hpgl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,33 @@ fn trace_path(path: &ResolvedPath) -> String {

hpgl
}

#[cfg(test)]
mod tests {
use super::*;
use rstest::rstest;

#[rstest]
#[case(3, "SP4;")]
#[case(0, "SP1;")]
fn test_pen_change(#[case] idx: usize, #[case] expected: &str) {
assert_eq!(&pen_change(idx), expected);
// TODO: what is the desired behaviour for usize::MAX ?
}

#[test]
fn test_generate_hpgl_failures() {
let mut passes = crate::default_passes::default_passes();

assert_eq!(
generate_hpgl(&HashMap::new(), &passes),
"No tool passes enabled".to_string()
);

passes[0].set_enabled(true);
assert_eq!(
generate_hpgl(&HashMap::new(), &passes[0..5]),
"Exactly 16 tool passes are required".to_string()
)
}
}
66 changes: 66 additions & 0 deletions seance/src/laser_passes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,69 @@ impl ToolPass {
self.enabled = new_state;
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_tool_pass_new() {
assert_eq!(
ToolPass::new("non-restricted pass".to_string(), 0, 0, 0, 500, 100, true),
ToolPass {
name: "non-restricted pass".to_string(),
colour: [0, 0, 0],
power: 500,
speed: 100,
enabled: true
}
);

assert_eq!(
ToolPass::new(
"truncated power & speed pass".to_string(),
0,
0,
0,
10_000,
u64::MAX,
true
),
ToolPass {
name: "truncated power & speed pass".to_string(),
colour: [0, 0, 0],
power: 1000,
speed: 1000,
enabled: true
}
);
}

#[test]
fn test_tool_pass_set_speed() {
let mut pass = ToolPass::new("".to_string(), 0, 0, 0, 100, 100, false);
assert_eq!(pass.speed, 100);

// should not truncate
pass.set_speed(500);
assert_eq!(pass.speed, 500);

// should truncate
pass.set_speed(1_000_000);
assert_eq!(pass.speed, 1000);
}

#[test]
fn test_tool_pass_set_power() {
let mut pass = ToolPass::new("".to_string(), 0, 0, 0, 100, 100, false);
assert_eq!(pass.power, 100);

// should not truncate
pass.set_power(10);
assert_eq!(pass.power, 10);

// should truncate
pass.set_power(1001);
assert_eq!(pass.power, 1000);
}
}
6 changes: 3 additions & 3 deletions seance/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
//! A utility for talking to devices that speak HPGL.

pub mod default_passes;
mod hpgl;
pub mod hpgl;
mod laser_passes;
mod paths;
mod pcl;
pub mod paths;
pub mod pcl;
pub mod svg;

use std::{fs, path::PathBuf};
Expand Down
Loading