Browse Source

Add test and subject for exercise lalgebra_vector

content-update
Augusto 3 years ago
parent
commit
683d6faeb5
  1. 19
      rust/tests/lalgebra_vector_test/Cargo.lock
  2. 10
      rust/tests/lalgebra_vector_test/Cargo.toml
  3. 41
      rust/tests/lalgebra_vector_test/src/main.rs
  4. 51
      subjects/lalgebra_vector/README.md

19
rust/tests/lalgebra_vector_test/Cargo.lock diff.generated

@ -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",
]

10
rust/tests/lalgebra_vector_test/Cargo.toml

@ -0,0 +1,10 @@
[package]
name = "lalgebra_vector_test"
version = "0.1.0"
authors = ["Augusto <aug.ornelas@gmail.com>"]
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"}

41
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<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = Vector(vec![4, -2, -1]);
println!("{:?}", vector_1.dot(&vector_2));
println!("{:?}", vector_1 + &vector_2);
}
#[test]
fn dot_product() {
let vector_1: Vector<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = Vector(vec![4, -2, -1]);
let expected: i64 = 3;
assert_eq!(vector_1.dot(&vector_2), Some(expected));
let vector_1: Vector<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = Vector(vec![4, -2]);
assert_eq!(vector_1.dot(&vector_2), None);
}
#[test]
fn addition() {
let vector_1: Vector<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = Vector(vec![4, -2, -1]);
assert_eq!(vector_1 + &vector_2, Some(Vector(vec![5i64, 1, -6])));
let vector_1: Vector<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = Vector(vec![2, 4, -2, -1]);
assert_eq!(None, vector_1 + &vector_2);
}

51
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<T: Scalar>(pub Vec<T>);
use std::ops::Add;
impl Add for Vector<T> {
}
impl Vector<T> {
pub fn new() -> Self {
}
pub fn dot(&self, other: &Self) -> Option<T> {
}
```
### Usage
Here is a program to test your function.
```rust
fn main() {
let vector_1: Vector<i64> = Vector(vec![1, 3, -5]);
let vector_2: Vector<i64> = 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$
```
Loading…
Cancel
Save