diff --git a/.all-contributorsrc b/.all-contributorsrc
index d02fe784bd..37b86693ee 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2226,6 +2226,15 @@
"contributions": [
"content"
]
+ },
+ {
+ "login": "jrcarl624",
+ "name": "Joshua Carlson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/61999256?v=4",
+ "profile": "http://androecia.net",
+ "contributions": [
+ "content"
+ ]
}
],
"contributorsPerLine": 8,
diff --git a/AUTHORS.md b/AUTHORS.md
index 4e7771747f..6c1ee1e3a4 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -315,6 +315,7 @@ authors.
tajo48 🖋 |
Anish 🖋 |
vnprc 🖋 |
+ Joshua Carlson 🖋 |
diff --git a/exercises/if/if3.rs b/exercises/if/if3.rs
new file mode 100644
index 0000000000..73a7025bcc
--- /dev/null
+++ b/exercises/if/if3.rs
@@ -0,0 +1,55 @@
+// if3.rs
+//
+// Execute `rustlings hint if3` or use the `hint` watch subcommand for a hint.
+
+// I AM NOT DONE
+
+pub fn animal_habitat(animal: &str) -> &'static str {
+ let identifier = if animal == "crab" {
+ 1
+ } else if animal == "gopher" {
+ 2.0
+ } else if animal == "snake" {
+ 3
+ } else {
+ "Unknown"
+ };
+
+ // DO NOT CHANGE THIS STATEMENT BELOW
+ let habitat = if identifier == 1 {
+ "Beach"
+ } else if identifier == 2 {
+ "Burrow"
+ } else if identifier == 3 {
+ "Desert"
+ } else {
+ "Unknown"
+ };
+
+ habitat
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn gopher_lives_in_burrow() {
+ assert_eq!(animal_habitat("gopher"), "Burrow")
+ }
+
+ #[test]
+ fn snake_lives_in_desert() {
+ assert_eq!(animal_habitat("snake"), "Desert")
+ }
+
+ #[test]
+ fn crab_lives_on_beach() {
+ assert_eq!(animal_habitat("crab"), "Beach")
+ }
+
+ #[test]
+ fn unknown_animal() {
+ assert_eq!(animal_habitat("dinosaur"), "Unknown")
+ }
+}
diff --git a/info.toml b/info.toml
index e4863cbf89..e8a28cbc63 100644
--- a/info.toml
+++ b/info.toml
@@ -167,6 +167,13 @@ For that first compiler error, it's important in Rust that each conditional
block returns the same type! To get the tests passing, you will need a couple
conditions checking different input values."""
+[[exercises]]
+name = "if3"
+path = "exercises/if/if3.rs"
+mode = "test"
+hint = """
+In Rust, every arm of an `if` expression has to return the same type of value. Make sure the type is consistent across all arms."""
+
# QUIZ 1
[[exercises]]