Skip to content

Commit

Permalink
added traits exercises
Browse files Browse the repository at this point in the history
  • Loading branch information
sjmann committed Feb 25, 2020
1 parent a3f7012 commit b559cdd
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 0 deletions.
44 changes: 44 additions & 0 deletions exercises/traits/traits1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// traits1.rs
// Time to implement some traits!
//
// Your task is to implement the trait
// `AppendBar' for the type `String'.
//
// The trait AppendBar has only one function,
// which appends "Bar" to any object
// implementing this trait.

// I AM NOT DONE
trait AppendBar {
fn append_bar(self) -> Self;
}

impl AppendBar for String {
//Add your code here

}

fn main() {
let s = String::from("Foo");
let s = s.append_bar();
println!("s: {}", s);
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn is_FooBar() {
assert_eq!(String::from("Foo").append_bar(), String::from("FooBar"));
}

#[test]
fn is_BarBar() {
assert_eq!(
String::from("").append_bar().append_bar(),
String::from("BarBar")
);
}

}
35 changes: 35 additions & 0 deletions exercises/traits/traits2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// traits2.rs
//
// Your task is to implement the trait
// `AppendBar' for a vector of strings.
//
// To implement this trait, consider for
// a moment what it means to 'append "Bar"'
// to a vector of strings.
//
// No boiler plate code this time,
// you can do this! Hints at the bottom.

// I AM NOT DONE

trait AppendBar {
fn append_bar(self) -> Self;
}

//TODO: Add your code here




#[cfg(test)]
mod tests {
use super::*;

#[test]
fn is_vec_pop_eq_bar() {
let mut foo = vec![String::from("Foo")].append_bar();
assert_eq!(foo.pop().unwrap(), String::from("Bar"));
assert_eq!(foo.pop().unwrap(), String::from("Foo"));
}

}
22 changes: 22 additions & 0 deletions info.toml
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,28 @@ multiply the values into a mutable variable. Or you might write code more
functionally with recursion and a match clause. But you can also use ranges
and iterators to solve this in rust."""

# TRAITS

[[exercises]]
name = "traits1"
path = "exercises/traits/traits1.rs"
mode = "test"
hint = """
A discussion about Traits in Rust can be found at:
https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-02-traits.html
"""

[[exercises]]
name = "traits2"
path = "exercises/traits/traits2.rs"
mode = "test"
hint = """
Notice how the trait takes ownership of 'self',and returns `Self'.
Try mutating the incoming string vector.
Vectors provide suitable methods for adding an element at the end. See
the documentation at: https://doc.rust-lang.org/std/vec/struct.Vec.html"""

# THREADS

[[exercises]]
Expand Down

0 comments on commit b559cdd

Please sign in to comment.