Skip to content
Merged
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
98 changes: 97 additions & 1 deletion Cargo.lock

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

5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "algorithm-exercises-rust"
name = "exercises"
version = "0.1.0"
edition = "2024"

Expand All @@ -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"
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions src/add.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
15 changes: 1 addition & 14 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -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;
8 changes: 8 additions & 0 deletions tests/add.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{
"title": "Example",
"a": 2,
"b": 2,
"result": 4
}
]
32 changes: 32 additions & 0 deletions tests/add.rs
Original file line number Diff line number Diff line change
@@ -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<Vec<AdderTestCase>> =
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);
}
}
}
1 change: 1 addition & 0 deletions tests/common/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod utils;
10 changes: 10 additions & 0 deletions tests/common/utils.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
use serde::de::DeserializeOwned;
use std::fs;

/// Carga un archivo JSON en un `Vec<T>`.
pub fn load_json<T: DeserializeOwned>(path: &str) -> Vec<T> {
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))
}
Loading