lifetimes, tests and traits

This commit is contained in:
gbrochar 2020-12-06 11:44:17 +01:00
parent 674b406c43
commit d24959d005
9 changed files with 202 additions and 0 deletions

9
lifetimes/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "lifetimes"
version = "0.1.0"
authors = ["gbrochar <gaetanbrochard@protonmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

15
lifetimes/src/main.rs Normal file
View File

@ -0,0 +1,15 @@
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
println!("The longest string is {}", result);
}

9
minigrep/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "minigrep"
version = "0.1.0"
authors = ["gbrochar <gaetanbrochard@protonmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

6
minigrep/src/main.rs Normal file
View File

@ -0,0 +1,6 @@
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:?}", args);
}

9
tests/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "tests"
version = "0.1.0"
authors = ["gbrochar <gaetanbrochard@protonmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

116
tests/src/lib.rs Normal file
View File

@ -0,0 +1,116 @@
#[cfg(test)]
mod tests {
#[test]
fn it_works() -> Result<(), String> {
if 2 + 2 == 4 {
Ok(())
} else {
Err(String::from("two plus two does not equal four"))
}
}
#[test]
fn exploration() {
assert_eq!(2 + 2, 4);
}
use super::*;
#[test]
fn larger_can_hold_smaller() {
let larger = Rectangle {
width: 8,
height: 7,
};
let smaller = Rectangle {
width: 5,
height: 1,
};
assert!(larger.can_hold(&smaller));
}
#[test]
fn smaller_cannot_hold_larger() {
let larger = Rectangle {
width: 8,
height: 7,
};
let smaller = Rectangle {
width: 5,
height: 1,
};
assert!(!smaller.can_hold(&larger));
}
#[test]
fn it_adds_two() {
assert_eq!(4, add_two(2));
}
#[test]
fn greeting_contains_name() {
let result = greeting("Carol");
assert!(
result.contains("Carol"),
"Greeting did not contain name, value was `{}`",
result
);
}
#[test]
#[should_panic]
fn greater_than_100_or_less_than_1() {
Guess::new(200);
}
#[test]
#[should_panic(expected = "Guess value must be less than or equal to 100")]
fn greater_than_100() {
Guess::new(200);
}
}
pub fn greeting(name: &str) -> String {
format!("Hello {}!", name)
}
pub fn add_two(a: i32) -> i32 {
a + 2
}
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn can_hold(&self, other: &Rectangle) -> bool {
self.width > other.width && self.height > other.height
}
}
pub struct Guess {
value: i32,
}
impl Guess {
pub fn new(value: i32) -> Guess {
if value < 1 {
panic!(
"Guess value must be greater than or equal to 1, got {}.",
value
);
} else if value > 100 {
panic!(
"Guess value must be less than or equal to 100, got {}.",
value
);
}
Guess { value }
}
}

View File

@ -0,0 +1,6 @@
use tests;
#[test]
fn it_adds_two() {
assert_eq!(4, tests::add_two(2));
}

9
traits/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "traits"
version = "0.1.0"
authors = ["gbrochar <gaetanbrochard@protonmail.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

23
traits/src/main.rs Normal file
View File

@ -0,0 +1,23 @@
fn largest<T: PartialOrd>(list: &[T]) -> &T {
let mut largest = &list[0];
for item in list {
if item > largest {
largest = item;
}
}
largest
}
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
let result = largest(&number_list);
println!("The largest number is {}", result);
let char_list = vec!['y', 'm', 'a', 'q'];
let result = largest(&char_list);
println!("The largest char is {}", result);
}