summaryrefslogtreecommitdiff
path: root/exercises
diff options
context:
space:
mode:
Diffstat (limited to 'exercises')
-rw-r--r--exercises/advanced_errors/mod.rs2
-rw-r--r--exercises/clippy/mod.rs2
-rw-r--r--exercises/collections/mod.rs4
-rw-r--r--exercises/conversions/mod.rs5
-rw-r--r--exercises/conversions/using_as.rs2
-rw-r--r--exercises/enums/mod.rs3
-rw-r--r--exercises/error_handling/errors1.rs10
-rw-r--r--exercises/error_handling/errors6.rs3
-rw-r--r--exercises/error_handling/mod.rs6
-rw-r--r--exercises/functions/mod.rs5
-rw-r--r--exercises/generics/mod.rs3
-rw-r--r--exercises/if/mod.rs2
-rw-r--r--exercises/intro/mod.rs2
-rw-r--r--exercises/macros/mod.rs4
-rw-r--r--exercises/mod.rs26
-rw-r--r--exercises/modules/mod.rs3
-rw-r--r--exercises/move_semantics/mod.rs6
-rw-r--r--exercises/move_semantics/move_semantics2.rs2
-rw-r--r--exercises/move_semantics/move_semantics6.rs25
-rw-r--r--exercises/option/mod.rs3
-rw-r--r--exercises/primitive_types/mod.rs6
-rw-r--r--exercises/standard_library_types/arc1.rs7
-rw-r--r--exercises/standard_library_types/iterators1.rs4
-rw-r--r--exercises/standard_library_types/mod.rs7
-rw-r--r--exercises/strings/mod.rs2
-rw-r--r--exercises/structs/mod.rs3
-rw-r--r--exercises/tests/mod.rs3
-rw-r--r--exercises/threads/mod.rs1
-rw-r--r--exercises/traits/mod.rs2
-rw-r--r--exercises/variables/mod.rs6
30 files changed, 139 insertions, 20 deletions
diff --git a/exercises/advanced_errors/mod.rs b/exercises/advanced_errors/mod.rs
new file mode 100644
index 0000000..e33fb80
--- /dev/null
+++ b/exercises/advanced_errors/mod.rs
@@ -0,0 +1,2 @@
+mod advanced_errs1;
+mod advanced_errs2;
diff --git a/exercises/clippy/mod.rs b/exercises/clippy/mod.rs
new file mode 100644
index 0000000..689dc95
--- /dev/null
+++ b/exercises/clippy/mod.rs
@@ -0,0 +1,2 @@
+mod clippy1;
+mod clippy2;
diff --git a/exercises/collections/mod.rs b/exercises/collections/mod.rs
new file mode 100644
index 0000000..f46c142
--- /dev/null
+++ b/exercises/collections/mod.rs
@@ -0,0 +1,4 @@
+mod hashmap1;
+mod hashmap2;
+mod vec1;
+mod vec2;
diff --git a/exercises/conversions/mod.rs b/exercises/conversions/mod.rs
new file mode 100644
index 0000000..69f66ae
--- /dev/null
+++ b/exercises/conversions/mod.rs
@@ -0,0 +1,5 @@
+mod as_ref_mut;
+mod from_into;
+mod from_str;
+mod try_from_into;
+mod using_as;
diff --git a/exercises/conversions/using_as.rs b/exercises/conversions/using_as.rs
index 821309e..f3f745f 100644
--- a/exercises/conversions/using_as.rs
+++ b/exercises/conversions/using_as.rs
@@ -8,7 +8,7 @@
// I AM NOT DONE
fn average(values: &[f64]) -> f64 {
- let total = values.iter().fold(0.0, |a, b| a + b);
+ let total = values.iter().sum::<f64>();
total / values.len()
}
diff --git a/exercises/enums/mod.rs b/exercises/enums/mod.rs
new file mode 100644
index 0000000..a23fd6e
--- /dev/null
+++ b/exercises/enums/mod.rs
@@ -0,0 +1,3 @@
+mod enums1;
+mod enums2;
+mod enums3;
diff --git a/exercises/error_handling/errors1.rs b/exercises/error_handling/errors1.rs
index 5844a49..c417fb2 100644
--- a/exercises/error_handling/errors1.rs
+++ b/exercises/error_handling/errors1.rs
@@ -1,9 +1,8 @@
// errors1.rs
// This function refuses to generate text to be printed on a nametag if
// you pass it an empty string. It'd be nicer if it explained what the problem
-// was, instead of just sometimes returning `None`. The 2nd test currently
-// does not compile or pass, but it illustrates the behavior we would like
-// this function to have.
+// was, instead of just sometimes returning `None`. Thankfully, Rust has a similar
+// construct to `Option` that can be used to express error conditions. Let's use it!
// Execute `rustlings hint errors1` for hints!
// I AM NOT DONE
@@ -21,14 +20,11 @@ pub fn generate_nametag_text(name: String) -> Option<String> {
mod tests {
use super::*;
- // This test passes initially if you comment out the 2nd test.
- // You'll need to update what this test expects when you change
- // the function under test!
#[test]
fn generates_nametag_text_for_a_nonempty_name() {
assert_eq!(
generate_nametag_text("Beyoncé".into()),
- Some("Hi! My name is Beyoncé".into())
+ Ok("Hi! My name is Beyoncé".into())
);
}
diff --git a/exercises/error_handling/errors6.rs b/exercises/error_handling/errors6.rs
index 0f6b27a..847a049 100644
--- a/exercises/error_handling/errors6.rs
+++ b/exercises/error_handling/errors6.rs
@@ -20,9 +20,6 @@ enum ParsePosNonzeroError {
}
impl ParsePosNonzeroError {
- fn from_creation(err: CreationError) -> ParsePosNonzeroError {
- ParsePosNonzeroError::Creation(err)
- }
// TODO: add another error conversion function here.
}
diff --git a/exercises/error_handling/mod.rs b/exercises/error_handling/mod.rs
new file mode 100644
index 0000000..539fa23
--- /dev/null
+++ b/exercises/error_handling/mod.rs
@@ -0,0 +1,6 @@
+mod errors1;
+mod errors2;
+mod errors3;
+mod errors4;
+mod errors5;
+mod errors6;
diff --git a/exercises/functions/mod.rs b/exercises/functions/mod.rs
new file mode 100644
index 0000000..445b6f5
--- /dev/null
+++ b/exercises/functions/mod.rs
@@ -0,0 +1,5 @@
+mod functions1;
+mod functions2;
+mod functions3;
+mod functions4;
+mod functions5;
diff --git a/exercises/generics/mod.rs b/exercises/generics/mod.rs
new file mode 100644
index 0000000..5b93555
--- /dev/null
+++ b/exercises/generics/mod.rs
@@ -0,0 +1,3 @@
+mod generics1;
+mod generics2;
+mod generics3;
diff --git a/exercises/if/mod.rs b/exercises/if/mod.rs
new file mode 100644
index 0000000..c5d0244
--- /dev/null
+++ b/exercises/if/mod.rs
@@ -0,0 +1,2 @@
+mod if1;
+mod if2;
diff --git a/exercises/intro/mod.rs b/exercises/intro/mod.rs
new file mode 100644
index 0000000..445c47a
--- /dev/null
+++ b/exercises/intro/mod.rs
@@ -0,0 +1,2 @@
+mod intro1;
+mod intro2;
diff --git a/exercises/macros/mod.rs b/exercises/macros/mod.rs
new file mode 100644
index 0000000..9f65acf
--- /dev/null
+++ b/exercises/macros/mod.rs
@@ -0,0 +1,4 @@
+mod macros1;
+mod macros2;
+mod macros3;
+mod macros4;
diff --git a/exercises/mod.rs b/exercises/mod.rs
new file mode 100644
index 0000000..6a143b5
--- /dev/null
+++ b/exercises/mod.rs
@@ -0,0 +1,26 @@
+mod advanced_errors;
+mod clippy;
+mod collections;
+mod conversions;
+mod enums;
+mod error_handling;
+mod functions;
+mod generics;
+mod r#if;
+mod intro;
+mod macros;
+mod modules;
+mod move_semantics;
+mod option;
+mod primitive_types;
+mod quiz1;
+mod quiz2;
+mod quiz3;
+mod quiz4;
+mod standard_library_types;
+mod strings;
+mod structs;
+mod tests;
+mod threads;
+mod traits;
+mod variables;
diff --git a/exercises/modules/mod.rs b/exercises/modules/mod.rs
new file mode 100644
index 0000000..35f96af
--- /dev/null
+++ b/exercises/modules/mod.rs
@@ -0,0 +1,3 @@
+mod modules1;
+mod modules2;
+mod modules3;
diff --git a/exercises/move_semantics/mod.rs b/exercises/move_semantics/mod.rs
new file mode 100644
index 0000000..e8eecf0
--- /dev/null
+++ b/exercises/move_semantics/mod.rs
@@ -0,0 +1,6 @@
+mod move_semantics1;
+mod move_semantics2;
+mod move_semantics3;
+mod move_semantics4;
+mod move_semantics5;
+mod move_semantics6;
diff --git a/exercises/move_semantics/move_semantics2.rs b/exercises/move_semantics/move_semantics2.rs
index bd21fbb..888dc52 100644
--- a/exercises/move_semantics/move_semantics2.rs
+++ b/exercises/move_semantics/move_semantics2.rs
@@ -1,5 +1,5 @@
// move_semantics2.rs
-// Make me compile without changing line 13!
+// Make me compile without changing line 13 or moving line 10!
// Execute `rustlings hint move_semantics2` for hints :)
// I AM NOT DONE
diff --git a/exercises/move_semantics/move_semantics6.rs b/exercises/move_semantics/move_semantics6.rs
new file mode 100644
index 0000000..457e7ae
--- /dev/null
+++ b/exercises/move_semantics/move_semantics6.rs
@@ -0,0 +1,25 @@
+// move_semantics6.rs
+// Make me compile! `rustlings hint move_semantics6` for hints
+// You can't change anything except adding or removing references
+
+// I AM NOT DONE
+
+fn main() {
+ let data = "Rust is great!".to_string();
+
+ get_char(data);
+
+ string_uppercase(&data);
+}
+
+// Should not take ownership
+fn get_char(data: String) -> char {
+ data.chars().last().unwrap()
+}
+
+// Should take ownership
+fn string_uppercase(mut data: &String) {
+ data = &data.to_uppercase();
+
+ println!("{}", data);
+}
diff --git a/exercises/option/mod.rs b/exercises/option/mod.rs
new file mode 100644
index 0000000..b3cdb13
--- /dev/null
+++ b/exercises/option/mod.rs
@@ -0,0 +1,3 @@
+mod option1;
+mod option2;
+mod option3;
diff --git a/exercises/primitive_types/mod.rs b/exercises/primitive_types/mod.rs
new file mode 100644
index 0000000..2335523
--- /dev/null
+++ b/exercises/primitive_types/mod.rs
@@ -0,0 +1,6 @@
+mod primitive_types1;
+mod primitive_types2;
+mod primitive_types3;
+mod primitive_types4;
+mod primitive_types5;
+mod primitive_types6;
diff --git a/exercises/standard_library_types/arc1.rs b/exercises/standard_library_types/arc1.rs
index d167380..f60061e 100644
--- a/exercises/standard_library_types/arc1.rs
+++ b/exercises/standard_library_types/arc1.rs
@@ -32,12 +32,7 @@ fn main() {
for offset in 0..8 {
let child_numbers = // TODO
joinhandles.push(thread::spawn(move || {
- let mut i = offset;
- let mut sum = 0;
- while i < child_numbers.len() {
- sum += child_numbers[i];
- i += 8;
- }
+ let sum: u32 = child_numbers.iter().filter(|n| *n % 8 == offset).sum();
println!("Sum of offset {} is {}", offset, sum);
}));
}
diff --git a/exercises/standard_library_types/iterators1.rs b/exercises/standard_library_types/iterators1.rs
index 4606ad3..5aa49b6 100644
--- a/exercises/standard_library_types/iterators1.rs
+++ b/exercises/standard_library_types/iterators1.rs
@@ -18,7 +18,7 @@ fn main () {
assert_eq!(my_iterable_fav_fruits.next(), Some(&"banana"));
assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 2
assert_eq!(my_iterable_fav_fruits.next(), Some(&"avocado"));
- assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 2.1
- assert_eq!(my_iterable_fav_fruits.next(), Some(&"raspberry"));
assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 3
+ assert_eq!(my_iterable_fav_fruits.next(), Some(&"raspberry"));
+ assert_eq!(my_iterable_fav_fruits.next(), ???); // TODO: Step 4
}
diff --git a/exercises/standard_library_types/mod.rs b/exercises/standard_library_types/mod.rs
new file mode 100644
index 0000000..b03acb9
--- /dev/null
+++ b/exercises/standard_library_types/mod.rs
@@ -0,0 +1,7 @@
+mod arc1;
+mod box1;
+mod iterators1;
+mod iterators2;
+mod iterators3;
+mod iterators4;
+mod iterators5;
diff --git a/exercises/strings/mod.rs b/exercises/strings/mod.rs
new file mode 100644
index 0000000..b1b460b
--- /dev/null
+++ b/exercises/strings/mod.rs
@@ -0,0 +1,2 @@
+mod strings1;
+mod strings2;
diff --git a/exercises/structs/mod.rs b/exercises/structs/mod.rs
new file mode 100644
index 0000000..214fed1
--- /dev/null
+++ b/exercises/structs/mod.rs
@@ -0,0 +1,3 @@
+mod structs1;
+mod structs2;
+mod structs3;
diff --git a/exercises/tests/mod.rs b/exercises/tests/mod.rs
new file mode 100644
index 0000000..489541b
--- /dev/null
+++ b/exercises/tests/mod.rs
@@ -0,0 +1,3 @@
+mod tests1;
+mod tests2;
+mod tests3;
diff --git a/exercises/threads/mod.rs b/exercises/threads/mod.rs
new file mode 100644
index 0000000..24d5400
--- /dev/null
+++ b/exercises/threads/mod.rs
@@ -0,0 +1 @@
+mod threads1;
diff --git a/exercises/traits/mod.rs b/exercises/traits/mod.rs
new file mode 100644
index 0000000..6f0a9c3
--- /dev/null
+++ b/exercises/traits/mod.rs
@@ -0,0 +1,2 @@
+mod traits1;
+mod traits2;
diff --git a/exercises/variables/mod.rs b/exercises/variables/mod.rs
new file mode 100644
index 0000000..a25f477
--- /dev/null
+++ b/exercises/variables/mod.rs
@@ -0,0 +1,6 @@
+mod variables1;
+mod variables2;
+mod variables3;
+mod variables4;
+mod variables5;
+mod variables6;