diff --git a/rust/tests/lalgebra_vector_test/Cargo.lock b/rust/tests/lalgebra_vector_test/Cargo.lock new file mode 100644 index 00000000..99587775 --- /dev/null +++ b/rust/tests/lalgebra_vector_test/Cargo.lock @@ -0,0 +1,19 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "lalgebra_scalar" +version = "0.1.0" + +[[package]] +name = "lalgebra_vector" +version = "0.1.0" +dependencies = [ + "lalgebra_scalar", +] + +[[package]] +name = "lalgebra_vector_test" +version = "0.1.0" +dependencies = [ + "lalgebra_vector", +] diff --git a/rust/tests/lalgebra_vector_test/Cargo.toml b/rust/tests/lalgebra_vector_test/Cargo.toml new file mode 100644 index 00000000..537e690e --- /dev/null +++ b/rust/tests/lalgebra_vector_test/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "lalgebra_vector_test" +version = "0.1.0" +authors = ["Augusto "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +lalgebra_vector = { path = "../../../../rust-piscine-solutions/lalgebra_vector"} \ No newline at end of file diff --git a/rust/tests/lalgebra_vector_test/src/main.rs b/rust/tests/lalgebra_vector_test/src/main.rs new file mode 100644 index 00000000..99761c75 --- /dev/null +++ b/rust/tests/lalgebra_vector_test/src/main.rs @@ -0,0 +1,41 @@ +// A vector in linear algebra is define as "anything that can be added +// and that can be multiplied by a scalar" +// And the associated function dot that calculates the dot product +// between two vectors +// let vector = Vector(vec![0,3, 4]); +// let vector_1 = Vector(vec![0,3,3]); +// vector.dot(&vector_1) == Some(23); + +// The dot product between two vectors of different length it's not defined + +use lalgebra_vector::Vector; + +fn main() { + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![4, -2, -1]); + println!("{:?}", vector_1.dot(&vector_2)); + println!("{:?}", vector_1 + &vector_2); +} + +#[test] +fn dot_product() { + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![4, -2, -1]); + let expected: i64 = 3; + assert_eq!(vector_1.dot(&vector_2), Some(expected)); + + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![4, -2]); + assert_eq!(vector_1.dot(&vector_2), None); +} + +#[test] +fn addition() { + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![4, -2, -1]); + assert_eq!(vector_1 + &vector_2, Some(Vector(vec![5i64, 1, -6]))); + + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![2, 4, -2, -1]); + assert_eq!(None, vector_1 + &vector_2); +} diff --git a/subjects/lalgebra_vector/README.md b/subjects/lalgebra_vector/README.md new file mode 100644 index 00000000..9c44c4ba --- /dev/null +++ b/subjects/lalgebra_vector/README.md @@ -0,0 +1,51 @@ +## lalgebra_vector + +### Instructions + +A vector in linear algebra is define as "anything that can be added and that can be multiplied by a scalar" + +And the associated function dot that calculates the dot product between two vectors + +The dot product between two vectors of different length it's not defined + +Note: `Vector` must implement Debug, Clone, Eq, PartialEq. + +### Expected Functions and Structure + +```rust +pub struct Vector(pub Vec); + +use std::ops::Add; + +impl Add for Vector { +} + +impl Vector { + pub fn new() -> Self { + } + + pub fn dot(&self, other: &Self) -> Option { +} +``` + +### Usage + +Here is a program to test your function. + +```rust +fn main() { + let vector_1: Vector = Vector(vec![1, 3, -5]); + let vector_2: Vector = Vector(vec![4, -2, -1]); + println!("{:?}", vector_1.dot(&vector_2)); + println!("{:?}", vector_1 + &vector_2); +} +``` + +And its output + +```console +student@ubuntu:~/[[ROOT]]/test$ cargo run +Some(3) +Some(Vector([5, 1, -6])) +tudent@ubuntu:~/[[ROOT]]/test$ +```