lifetimes, tests and traits
This commit is contained in:
parent
674b406c43
commit
d24959d005
|
@ -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]
|
|
@ -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);
|
||||||
|
}
|
|
@ -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]
|
|
@ -0,0 +1,6 @@
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
println!("{:?}", args);
|
||||||
|
}
|
|
@ -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]
|
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
use tests;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_adds_two() {
|
||||||
|
assert_eq!(4, tests::add_two(2));
|
||||||
|
}
|
|
@ -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]
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue