mirror of https://github.com/01-edu/public.git
Augusto
4 years ago
4 changed files with 182 additions and 0 deletions
@ -0,0 +1,12 @@
|
||||
# This file is automatically @generated by Cargo. |
||||
# It is not intended for manual editing. |
||||
[[package]] |
||||
name = "traits" |
||||
version = "0.1.0" |
||||
|
||||
[[package]] |
||||
name = "traits_test" |
||||
version = "0.1.0" |
||||
dependencies = [ |
||||
"traits", |
||||
] |
@ -0,0 +1,10 @@
|
||||
[package] |
||||
name = "traits_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] |
||||
traits = { path = "../../../../rust-piscine-solutions/traits"} |
@ -0,0 +1,67 @@
|
||||
// Imagine you are designing a new video game and you have to create
|
||||
// food that they players can take to gain strength there are two
|
||||
// types of food for now fruits and meet: fruits increases the
|
||||
// strengths by 1 unit and meat increases it by 3 unit.
|
||||
|
||||
// Define both structures fruits and meat
|
||||
// Define the std::fmt::Display trait of the Player structure so using
|
||||
// the template {} inside a println! macro will print in the first
|
||||
// line the name of the player
|
||||
// in the second line the strength, score and the money
|
||||
// and in the third line the weapons
|
||||
use traits::{Food, Fruit, Meat, Player}; |
||||
|
||||
fn main() { |
||||
let apple = Fruit { weight_in_kg: 1.0 }; |
||||
assert_eq!(apple.gives(), 4); |
||||
let steak = Meat { |
||||
weight_in_kg: 1.0, |
||||
fat_content: 1.0, |
||||
}; |
||||
|
||||
let mut player1 = Player { |
||||
name: String::from("player1"), |
||||
strength: 1, |
||||
score: 0, |
||||
money: 0, |
||||
weapons: vec![String::from("knife")], |
||||
}; |
||||
println!("Before eating {:?}", player1); |
||||
player1.eat(apple); |
||||
println!("After eating an apple\n{:?}", player1); |
||||
player1.eat(steak); |
||||
println!("After eating a steak\n{:?}", player1); |
||||
} |
||||
|
||||
#[test] |
||||
fn test_gives() { |
||||
let apple = Fruit { weight_in_kg: 1.0 }; |
||||
assert_eq!(apple.gives(), 4); |
||||
let steak = Meat { |
||||
weight_in_kg: 1.0, |
||||
fat_content: 1.0, |
||||
}; |
||||
assert_eq!(steak.gives(), 9); |
||||
} |
||||
|
||||
#[test] |
||||
fn test_eat() { |
||||
let apple = Fruit { weight_in_kg: 1.0 }; |
||||
assert_eq!(apple.gives(), 4); |
||||
let steak = Meat { |
||||
weight_in_kg: 1.0, |
||||
fat_content: 1.0, |
||||
}; |
||||
|
||||
let mut player1 = Player { |
||||
name: String::from("player1"), |
||||
strength: 1, |
||||
score: 0, |
||||
money: 0, |
||||
weapons: vec![String::from("knife")], |
||||
}; |
||||
player1.eat(apple); |
||||
assert_eq!(player1.strength, 5); |
||||
player1.eat(steak); |
||||
assert_eq!(player1.strength, 14); |
||||
} |
@ -0,0 +1,93 @@
|
||||
## traits |
||||
|
||||
### Instructions |
||||
|
||||
Imagine you are designing a new video game and you have to create food that they players can take to gain strength. |
||||
|
||||
There are two types of food for now fruits and meet: fruits increases the strengths by 1 unit and meat increases it by 3 unit. |
||||
|
||||
- Define both structures fruits and meat: |
||||
|
||||
Define the std::fmt::Display trait of the Player structure so using the template {} inside a println! macro will print: |
||||
|
||||
- In the first line the name of the player |
||||
- In the second line the strength, score and the money |
||||
- In the third line the weapons |
||||
|
||||
### Expected Functions and Structures |
||||
|
||||
```rust |
||||
#[derive(Debug)] |
||||
pub struct Player { |
||||
pub name: String, |
||||
pub strength: u32, |
||||
pub score: i32, |
||||
pub money: i32, |
||||
pub weapons: Vec<String>, |
||||
} |
||||
|
||||
pub struct Fruit { |
||||
pub weight_in_kg: f64, |
||||
} |
||||
|
||||
pub struct Meat { |
||||
pub weight_in_kg: f64, |
||||
pub fat_content: f64, |
||||
} |
||||
|
||||
impl Player { |
||||
fn eat(&mut self, food: T) { |
||||
self.strength += food.gives(); |
||||
} |
||||
} |
||||
|
||||
pub trait Food { |
||||
fn gives(&self) -> u32; |
||||
} |
||||
|
||||
impl Food for Fruit { |
||||
} |
||||
|
||||
impl Food for Meat { |
||||
} |
||||
``` |
||||
|
||||
### Usage |
||||
|
||||
Here is a program to test your function. |
||||
|
||||
```rust |
||||
fn main() { |
||||
let apple = Fruit { weight_in_kg: 1.0 }; |
||||
assert_eq!(apple.gives(), 4); |
||||
let steak = Meat { |
||||
weight_in_kg: 1.0, |
||||
fat_content: 1.0, |
||||
}; |
||||
|
||||
let mut player1 = Player { |
||||
name: String::from("player1"), |
||||
strength: 1, |
||||
score: 0, |
||||
money: 0, |
||||
weapons: vec![String::from("knife")], |
||||
}; |
||||
println!("Before eating {:?}", player1); |
||||
player1.eat(apple); |
||||
println!("After eating an apple\n{:?}", player1); |
||||
player1.eat(steak); |
||||
println!("After eating a steak\n{:?}", player1); |
||||
} |
||||
``` |
||||
|
||||
And its output |
||||
|
||||
```console |
||||
student@ubuntu:~/[[ROOT]]/test$ cargo run |
||||
Before eating Player { name: "player1", strength: 1, score: 0, money: 0, weapons: ["knife"] } |
||||
After eating an apple |
||||
Player { name: "player1", strength: 5, score: 0, money: 0, weapons: ["knife"] } |
||||
After eating a steak |
||||
Player { name: "player1", strength: 14, score: 0, money: 0, weapons: ["knife"] } |
||||
student@ubuntu:~/[[ROOT]]/test$ |
||||
``` |
Loading…
Reference in new issue