summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exercises/traits/traits1.rs44
-rw-r--r--exercises/traits/traits2.rs35
-rw-r--r--info.toml22
3 files changed, 101 insertions, 0 deletions
diff --git a/exercises/traits/traits1.rs b/exercises/traits/traits1.rs
new file mode 100644
index 0000000..8253ef8
--- /dev/null
+++ b/exercises/traits/traits1.rs
@@ -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")
+ );
+ }
+
+} \ No newline at end of file
diff --git a/exercises/traits/traits2.rs b/exercises/traits/traits2.rs
new file mode 100644
index 0000000..7f5014d
--- /dev/null
+++ b/exercises/traits/traits2.rs
@@ -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!
+
+// 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"));
+ }
+
+}
diff --git a/info.toml b/info.toml
index 4b89029..b1c6db5 100644
--- a/info.toml
+++ b/info.toml
@@ -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]]