diff --git a/.idea/misc.xml b/.idea/misc.xml
index c897734..fee09bd 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -19,6 +19,7 @@
+
diff --git a/.idea/rust.iml b/.idea/rust.iml
index d704567..fca239b 100644
--- a/.idea/rust.iml
+++ b/.idea/rust.iml
@@ -74,6 +74,11 @@
+
+
+
+
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 450a7a3..fed1dab 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -14,19 +14,49 @@
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -77,6 +107,9 @@
+
+
+
@@ -110,13 +143,20 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
@@ -149,7 +189,7 @@
-
+
@@ -177,7 +217,7 @@
-
+
@@ -196,36 +236,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -236,13 +246,43 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -255,20 +295,40 @@
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -276,7 +336,7 @@
-
+
@@ -284,7 +344,7 @@
-
+
@@ -529,5 +589,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/adder/Cargo.toml b/adder/Cargo.toml
new file mode 100644
index 0000000..6ea4c78
--- /dev/null
+++ b/adder/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "adder"
+version = "0.1.0"
+authors = ["Timothy Warren "]
+edition = "2018"
+
+[dependencies]
diff --git a/adder/src/lib.rs b/adder/src/lib.rs
new file mode 100644
index 0000000..9215d1e
--- /dev/null
+++ b/adder/src/lib.rs
@@ -0,0 +1,104 @@
+#[derive(Debug)]
+pub struct Rectangle {
+ length: u32,
+ width: u32,
+}
+
+impl Rectangle {
+ pub fn can_hold(&self, other: &Rectangle) -> bool {
+ self.length > other.length && self.width > other.width
+ }
+}
+
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+pub fn greeting(name: &str) -> String {
+ format!("Hello, {}!", name)
+}
+
+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
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_works() -> Result<(), String> {
+ if 2 + 2 == 4 {
+ Ok(())
+ } else {
+ Err(String::from("two plus two does not equal four"))
+ }
+ }
+
+ #[test]
+ fn add_two_and_two() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[test]
+ fn add_three_and_two() {
+ assert_eq!(5, add_two(3));
+ }
+
+ #[test]
+ fn one_hundred() {
+ assert_eq!(102, add_two(100));
+ }
+
+ #[test]
+ fn larger_can_hold_smaller() {
+ let larger = Rectangle { length: 8, width: 7 };
+ let smaller = Rectangle { length: 5, width: 1 };
+
+ assert!(larger.can_hold(&smaller));
+ }
+
+ #[test]
+ fn smaller_cannot_hold_larger() {
+ let larger = Rectangle { length: 8, width: 7 };
+ let smaller = Rectangle { length: 5, width: 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(expected = "Guess value must be less than or equal to 100")]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
diff --git a/adder/tests/common/mod.rs b/adder/tests/common/mod.rs
new file mode 100644
index 0000000..5fb7a39
--- /dev/null
+++ b/adder/tests/common/mod.rs
@@ -0,0 +1,3 @@
+pub fn setup() {
+ // setup code specific to your library's tests would go here
+}
diff --git a/adder/tests/integration_test.rs b/adder/tests/integration_test.rs
new file mode 100644
index 0000000..58b8b7b
--- /dev/null
+++ b/adder/tests/integration_test.rs
@@ -0,0 +1,9 @@
+use adder;
+
+mod common;
+
+#[test]
+fn it_adds_two() {
+ common::setup();
+ assert_eq!(4, adder::add_two(2));
+}