diff --git a/crates/svg-filters/src/lib.rs b/crates/svg-filters/src/lib.rs
index cc443d8..c3ddedc 100644
--- a/crates/svg-filters/src/lib.rs
+++ b/crates/svg-filters/src/lib.rs
@@ -5,4 +5,4 @@ pub mod types;
pub use types::nodes::Node;
#[cfg(test)]
-mod tests {}
+mod tests;
diff --git a/crates/svg-filters/src/tests.rs b/crates/svg-filters/src/tests.rs
new file mode 100644
index 0000000..c09a957
--- /dev/null
+++ b/crates/svg-filters/src/tests.rs
@@ -0,0 +1,19 @@
+mod color_matrix;
+
+mod complex;
+mod gaussian_blur;
+mod offset;
+
+mod blend {}
+mod component_transfer {}
+mod composite {}
+mod convolve_matrix {}
+mod diffuse_lighting {}
+mod displacement_map {}
+mod flood {}
+mod image {}
+mod merge {}
+mod morphology {}
+mod specular_lighting {}
+mod tile {}
+mod turbulence {}
diff --git a/crates/svg-filters/src/tests/color_matrix.rs b/crates/svg-filters/src/tests/color_matrix.rs
new file mode 100644
index 0000000..e32d507
--- /dev/null
+++ b/crates/svg-filters/src/tests/color_matrix.rs
@@ -0,0 +1,25 @@
+use crate::{
+ codegen::SvgDocument,
+ types::nodes::{primitives::color_matrix::ColorMatrixType, standard_input::StandardInput},
+};
+
+#[test]
+fn test_greyscale_channel_extraction() {
+ let mut doc = SvgDocument::new();
+ let greyscale = doc.create_filter("greyscale");
+
+ greyscale.color_matrix(
+ StandardInput::SourceGraphic,
+ ColorMatrixType::Matrix(Box::new([
+ 1., 0., 0., 0., 0., //
+ 1., 0., 0., 0., 0., //
+ 1., 0., 0., 0., 0., //
+ 0., 0., 0., 1., 0.,
+ ])),
+ );
+
+ assert_eq!(
+ doc.generate_svg(),
+ r#""#
+ );
+}
diff --git a/crates/svg-filters/src/tests/complex.rs b/crates/svg-filters/src/tests/complex.rs
new file mode 100644
index 0000000..9b28304
--- /dev/null
+++ b/crates/svg-filters/src/tests/complex.rs
@@ -0,0 +1,42 @@
+use crate::{
+ codegen::SvgDocument,
+ types::nodes::{primitives::color_matrix::ColorMatrixType, standard_input::StandardInput},
+};
+
+#[test]
+fn test_chrom_abb() {
+ let mut doc = SvgDocument::new();
+ let chromabb = doc.create_filter("chromabb_gen");
+
+ let chan_r = chromabb.color_matrix(
+ StandardInput::SourceGraphic,
+ ColorMatrixType::Matrix(Box::new([
+ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ ])),
+ );
+ let offset_r = chromabb.offset(chan_r, 25., 0.);
+ let blur_r = chromabb.gaussian_blur_xy(offset_r, 5, 0);
+
+ let chan_b = chromabb.color_matrix(
+ StandardInput::SourceGraphic,
+ ColorMatrixType::Matrix(Box::new([
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0.,
+ ])),
+ );
+ let offset_b = chromabb.offset(chan_b, -25., 0.);
+ let blur_b = chromabb.gaussian_blur_xy(offset_b, 5, 0);
+
+ let composite_rb = chromabb.composite_arithmetic(blur_r, blur_b, 0., 1., 1., 0.);
+
+ let chan_g = chromabb.color_matrix(
+ StandardInput::SourceGraphic,
+ ColorMatrixType::Matrix(Box::new([
+ 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.,
+ ])),
+ );
+ chromabb.composite_arithmetic(composite_rb, chan_g, 0., 1., 1., 0.);
+ assert_eq!(
+ doc.generate_svg(),
+ r#""#
+ );
+}
diff --git a/crates/svg-filters/src/tests/gaussian_blur.rs b/crates/svg-filters/src/tests/gaussian_blur.rs
new file mode 100644
index 0000000..5739794
--- /dev/null
+++ b/crates/svg-filters/src/tests/gaussian_blur.rs
@@ -0,0 +1,13 @@
+use crate::{codegen::SvgDocument, types::nodes::standard_input::StandardInput};
+
+#[test]
+fn test_simple_blur() {
+ let mut doc = SvgDocument::new();
+ let blur = doc.create_filter("blur");
+
+ blur.gaussian_blur_xy(StandardInput::SourceGraphic, 30, 30);
+ assert_eq!(
+ doc.generate_svg(),
+ r#""#
+ )
+}
diff --git a/crates/svg-filters/src/tests/offset.rs b/crates/svg-filters/src/tests/offset.rs
new file mode 100644
index 0000000..4d7319e
--- /dev/null
+++ b/crates/svg-filters/src/tests/offset.rs
@@ -0,0 +1,14 @@
+use crate::{codegen::SvgDocument, types::nodes::standard_input::StandardInput};
+
+#[test]
+fn test_offset_simple() {
+ let mut doc = SvgDocument::new();
+ let mut offset = doc.create_filter("offset");
+
+ offset.offset(StandardInput::SourceGraphic, 25., -25.);
+
+ assert_eq!(
+ doc.generate_svg(),
+ r#""#
+ )
+}