From a97bd9a4fd982a889c8d723a918ac871c63d3d33 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Fri, 5 Sep 2025 20:21:20 -0400 Subject: [PATCH 1/4] Package renamed --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b07dbbb..4c7c2e6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,5 +3,5 @@ version = 4 [[package]] -name = "algorithm-exercises-rust" +name = "exercises" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 151d411..1d8221d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "algorithm-exercises-rust" +name = "exercises" version = "0.1.0" edition = "2024" From 4658760b280ec6cf8f18a2cf01d2226b8134a14f Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sat, 6 Sep 2025 01:27:24 -0400 Subject: [PATCH 2/4] [CONFIG] [Makefile] better "clean" actions --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 6c493cf..65a37c8 100644 --- a/Makefile +++ b/Makefile @@ -91,6 +91,7 @@ update: dependencies outdated upgrade: clean: + $(PACKAGE_MANAGER) clean rm -vf lcov.info rm -vf my-clippy-report.json rm -vf sonar-issues.json From 0208dc7b99c12ab9794d3549bde9dd1b224f2b7a Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sat, 6 Sep 2025 01:25:28 -0400 Subject: [PATCH 3/4] New utility function to load JSON --- Cargo.lock | 96 +++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 3 ++ tests/common/mod.rs | 1 + tests/common/utils.rs | 10 +++++ 4 files changed, 110 insertions(+) create mode 100644 tests/common/mod.rs create mode 100644 tests/common/utils.rs diff --git a/Cargo.lock b/Cargo.lock index 4c7c2e6..3cbd6e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,3 +5,99 @@ version = 4 [[package]] name = "exercises" version = "0.1.0" +dependencies = [ + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.143" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" diff --git a/Cargo.toml b/Cargo.toml index 1d8221d..b3487a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,6 @@ name = "exercises" crate-type = ["rlib", "cdylib"] [dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +once_cell = "1.21.3" diff --git a/tests/common/mod.rs b/tests/common/mod.rs new file mode 100644 index 0000000..b5614dd --- /dev/null +++ b/tests/common/mod.rs @@ -0,0 +1 @@ +pub mod utils; diff --git a/tests/common/utils.rs b/tests/common/utils.rs new file mode 100644 index 0000000..70baceb --- /dev/null +++ b/tests/common/utils.rs @@ -0,0 +1,10 @@ +use serde::de::DeserializeOwned; +use std::fs; + +/// Carga un archivo JSON en un `Vec`. +pub fn load_json(path: &str) -> Vec { + let contents = fs::read_to_string(path) + .unwrap_or_else(|_| panic!("No se pudo leer el archivo: {}", path)); + serde_json::from_str(&contents) + .unwrap_or_else(|_| panic!("JSON inválido en {}", path)) +} From 237ec2bdcb91aa16d309fac50df6a190dd4dbb56 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sat, 6 Sep 2025 01:28:06 -0400 Subject: [PATCH 4/4] Sample function and test re-organized. Source code and Unit Test file splitted. https://doc.rust-lang.org/book/ch11-03-test-organization.html --- src/add.rs | 3 +++ src/lib.rs | 15 +-------------- tests/add.json | 8 ++++++++ tests/add.rs | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 src/add.rs create mode 100644 tests/add.json create mode 100644 tests/add.rs diff --git a/src/add.rs b/src/add.rs new file mode 100644 index 0000000..97f1788 --- /dev/null +++ b/src/add.rs @@ -0,0 +1,3 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} diff --git a/src/lib.rs b/src/lib.rs index b93cf3f..cced7b4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,14 +1 @@ -pub fn add(left: u64, right: u64) -> u64 { - left + right -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} +pub mod add; diff --git a/tests/add.json b/tests/add.json new file mode 100644 index 0000000..fa17ca7 --- /dev/null +++ b/tests/add.json @@ -0,0 +1,8 @@ +[ + { + "title": "Example", + "a": 2, + "b": 2, + "result": 4 + } +] diff --git a/tests/add.rs b/tests/add.rs new file mode 100644 index 0000000..d19828a --- /dev/null +++ b/tests/add.rs @@ -0,0 +1,32 @@ +use exercises::add::add; +use once_cell::sync::Lazy; +use serde::Deserialize; + +mod common; +use common::utils::load_json; + +#[derive(Debug, Deserialize)] +struct AdderTestCase { + title: String, + a: u64, + b: u64, + result: u64 +} + +static TEST_DATA: Lazy> = + Lazy::new(|| load_json("tests/add.json")); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_adder() { + for test_case in TEST_DATA.iter() { + println!("Probando AdderTestCase : {:?}", test_case.title); + + let result = add(test_case.a, test_case.b); + assert_eq!(result, test_case.result); + } + } +}