mirror of https://github.com/01-edu/public.git
Augusto
4 years ago
4 changed files with 232 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||||
|
# This file is automatically @generated by Cargo. |
||||||
|
# It is not intended for manual editing. |
||||||
|
[[package]] |
||||||
|
name = "vehicles" |
||||||
|
version = "0.1.0" |
||||||
|
|
||||||
|
[[package]] |
||||||
|
name = "vehicles_test" |
||||||
|
version = "0.1.0" |
||||||
|
dependencies = [ |
||||||
|
"vehicles", |
||||||
|
] |
@ -0,0 +1,10 @@ |
|||||||
|
[package] |
||||||
|
name = "vehicles_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] |
||||||
|
vehicles = { path = "../../../../rust-piscine-solutions/vehicles"} |
@ -0,0 +1,131 @@ |
|||||||
|
// Create the trait Vehicle with the model and year
|
||||||
|
|
||||||
|
// In a border cross you want to keep a list of all the vehicles that
|
||||||
|
// are waiting to enter the country. You want to keep a waiting list
|
||||||
|
// of the vehicle but the vehicles can be of two types: Car or Truck
|
||||||
|
// With the following structure:
|
||||||
|
|
||||||
|
// create a function that receives a vector of structures that
|
||||||
|
// implement the Vehicle trait
|
||||||
|
|
||||||
|
use vehicles::{all_models, Car, Truck, Vehicle}; |
||||||
|
|
||||||
|
#[allow(dead_code)] |
||||||
|
fn main() { |
||||||
|
let vehicles: Vec<&dyn Vehicle> = vec![ |
||||||
|
&Car { |
||||||
|
plate_nbr: "A3D5C7", |
||||||
|
model: "Model 3", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
}, |
||||||
|
&Truck { |
||||||
|
plate_nbr: "V3D5CT", |
||||||
|
model: "Ranger", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
]; |
||||||
|
println!("{:?}", all_models(vehicles)); |
||||||
|
} |
||||||
|
|
||||||
|
#[allow(dead_code)] |
||||||
|
fn setup_cars<'a>() -> Vec<&'a dyn Vehicle> { |
||||||
|
let cars: Vec<&dyn Vehicle> = vec![ |
||||||
|
&Car { |
||||||
|
plate_nbr: "A3D5C7", |
||||||
|
model: "Model 3", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
}, |
||||||
|
&Car { |
||||||
|
plate_nbr: "A785P7", |
||||||
|
model: "S", |
||||||
|
horse_power: 500, |
||||||
|
year: 1980, |
||||||
|
}, |
||||||
|
&Car { |
||||||
|
plate_nbr: "D325C7", |
||||||
|
model: "300", |
||||||
|
horse_power: 300, |
||||||
|
year: 2000, |
||||||
|
}, |
||||||
|
&Car { |
||||||
|
plate_nbr: "Z3KCH4", |
||||||
|
model: "Montana", |
||||||
|
horse_power: 325, |
||||||
|
year: 2020, |
||||||
|
}, |
||||||
|
]; |
||||||
|
cars |
||||||
|
} |
||||||
|
|
||||||
|
#[allow(dead_code)] |
||||||
|
fn setup_trucks<'a>() -> Vec<&'a dyn Vehicle> { |
||||||
|
let trucks: Vec<&dyn Vehicle> = vec![ |
||||||
|
&Truck { |
||||||
|
plate_nbr: "V3D5CT", |
||||||
|
model: "Ranger", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
&Truck { |
||||||
|
plate_nbr: "V785PT", |
||||||
|
model: "Silverado", |
||||||
|
horse_power: 500, |
||||||
|
year: 1980, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
&Truck { |
||||||
|
plate_nbr: "DE2SC7", |
||||||
|
model: "Sierra", |
||||||
|
horse_power: 300, |
||||||
|
year: 2000, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
&Truck { |
||||||
|
plate_nbr: "3DH432", |
||||||
|
model: "Cybertruck", |
||||||
|
horse_power: 325, |
||||||
|
year: 2020, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
]; |
||||||
|
trucks |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn all_car_models() { |
||||||
|
let cars = setup_cars(); |
||||||
|
assert_eq!(all_models(cars), ["Model 3", "S", "300", "Montana"]); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn all_truck_models() { |
||||||
|
let trucks = setup_trucks(); |
||||||
|
assert_eq!( |
||||||
|
all_models(trucks), |
||||||
|
["Ranger", "Silverado", "Sierra", "Cybertruck"] |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
#[test] |
||||||
|
fn cars_and_trucks_models() { |
||||||
|
let mut vehicles = setup_cars(); |
||||||
|
vehicles.extend(setup_trucks()); |
||||||
|
assert_eq!( |
||||||
|
all_models(vehicles), |
||||||
|
[ |
||||||
|
"Model 3", |
||||||
|
"S", |
||||||
|
"300", |
||||||
|
"Montana", |
||||||
|
"Ranger", |
||||||
|
"Silverado", |
||||||
|
"Sierra", |
||||||
|
"Cybertruck" |
||||||
|
] |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,79 @@ |
|||||||
|
## vehicles |
||||||
|
|
||||||
|
### Instructions |
||||||
|
|
||||||
|
- Create the trait Vehicle with the model and year |
||||||
|
|
||||||
|
- In a border cross you want to keep a list of all the vehicles that are waiting to enter the country. You want to keep a waiting list of the vehicle but the vehicles can be of two types: Car or Truck |
||||||
|
|
||||||
|
- Create a function that receives a vector of structures that implements the Vehicle trait and returns all the models. |
||||||
|
|
||||||
|
With the following structure: |
||||||
|
|
||||||
|
### Expected Functions and Structures |
||||||
|
|
||||||
|
```rust |
||||||
|
#[allow(dead_code)] |
||||||
|
pub struct Car<'a> { |
||||||
|
pub plate_nbr: &'a str, |
||||||
|
pub model: &'a str, |
||||||
|
pub horse_power: u32, |
||||||
|
pub year: u32, |
||||||
|
} |
||||||
|
|
||||||
|
#[allow(dead_code)] |
||||||
|
pub struct Truck<'a> { |
||||||
|
pub plate_nbr: &'a str, |
||||||
|
pub model: &'a str, |
||||||
|
pub horse_power: u32, |
||||||
|
pub year: u32, |
||||||
|
pub load_tons: u32, |
||||||
|
} |
||||||
|
|
||||||
|
pub trait Vehicle { |
||||||
|
fn model(&self) -> &str; |
||||||
|
fn year(&self) -> u32; |
||||||
|
} |
||||||
|
|
||||||
|
impl Vehicle for Truck<'_> { |
||||||
|
} |
||||||
|
|
||||||
|
impl Vehicle for Car<'_> { |
||||||
|
} |
||||||
|
|
||||||
|
fn all_models(list: Vec<&Vehicle>) -> Vec<&str> { |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
### Usage |
||||||
|
|
||||||
|
Here is a program to test your function. |
||||||
|
|
||||||
|
```rust |
||||||
|
fn main() { |
||||||
|
let vehicles: Vec<&dyn Vehicle> = vec![ |
||||||
|
&Car { |
||||||
|
plate_nbr: "A3D5C7", |
||||||
|
model: "Model 3", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
}, |
||||||
|
&Truck { |
||||||
|
plate_nbr: "V3D5CT", |
||||||
|
model: "Ranger", |
||||||
|
horse_power: 325, |
||||||
|
year: 2010, |
||||||
|
load_tons: 40, |
||||||
|
}, |
||||||
|
]; |
||||||
|
println!("{:?}", all_models(vehicles)); |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
And its output |
||||||
|
|
||||||
|
```console |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ cargo run |
||||||
|
["Model 3", "Ranger"] |
||||||
|
student@ubuntu:~/[[ROOT]]/test$ |
||||||
|
``` |
Loading…
Reference in new issue