summaryrefslogtreecommitdiff
path: root/exercises/19_smart_pointers/rc1.rs
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/19_smart_pointers/rc1.rs')
-rw-r--r--exercises/19_smart_pointers/rc1.rs109
1 files changed, 57 insertions, 52 deletions
diff --git a/exercises/19_smart_pointers/rc1.rs b/exercises/19_smart_pointers/rc1.rs
index e96e625..19de3db 100644
--- a/exercises/19_smart_pointers/rc1.rs
+++ b/exercises/19_smart_pointers/rc1.rs
@@ -1,5 +1,3 @@
-// rc1.rs
-//
// In this exercise, we want to express the concept of multiple owners via the
// Rc<T> type. This is a model of our solar system - there is a Sun type and
// multiple Planets. The Planets take ownership of the sun, indicating that they
@@ -7,8 +5,6 @@
//
// Make this code compile by using the proper Rc primitives to express that the
// sun has multiple owners.
-//
-// Execute `rustlings hint rc1` or use the `hint` watch subcommand for a hint.
use std::rc::Rc;
@@ -33,71 +29,80 @@ impl Planet {
}
}
-#[test]
fn main() {
- let sun = Rc::new(Sun {});
- println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
+ // You can optionally experiment here.
+}
- let mercury = Planet::Mercury(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
- mercury.details();
+#[cfg(test)]
+mod tests {
+ use super::*;
- let venus = Planet::Venus(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
- venus.details();
+ #[test]
+ fn rc1() {
+ let sun = Rc::new(Sun {});
+ println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
- let earth = Planet::Earth(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
- earth.details();
+ let mercury = Planet::Mercury(Rc::clone(&sun));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
+ mercury.details();
- let mars = Planet::Mars(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
- mars.details();
+ let venus = Planet::Venus(Rc::clone(&sun));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
+ venus.details();
- let jupiter = Planet::Jupiter(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
- jupiter.details();
+ let earth = Planet::Earth(Rc::clone(&sun));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
+ earth.details();
- // TODO
- let saturn = Planet::Saturn(Rc::new(Sun {}));
- println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
- saturn.details();
+ let mars = Planet::Mars(Rc::clone(&sun));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
+ mars.details();
- // TODO
- let uranus = Planet::Uranus(Rc::new(Sun {}));
- println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
- uranus.details();
+ let jupiter = Planet::Jupiter(Rc::clone(&sun));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
+ jupiter.details();
- // TODO
- let neptune = Planet::Neptune(Rc::new(Sun {}));
- println!("reference count = {}", Rc::strong_count(&sun)); // 9 references
- neptune.details();
+ // TODO
+ let saturn = Planet::Saturn(Rc::new(Sun {}));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
+ saturn.details();
- assert_eq!(Rc::strong_count(&sun), 9);
+ // TODO
+ let uranus = Planet::Uranus(Rc::new(Sun {}));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
+ uranus.details();
- drop(neptune);
- println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
+ // TODO
+ let neptune = Planet::Neptune(Rc::new(Sun {}));
+ println!("reference count = {}", Rc::strong_count(&sun)); // 9 references
+ neptune.details();
- drop(uranus);
- println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
+ assert_eq!(Rc::strong_count(&sun), 9);
- drop(saturn);
- println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
+ drop(neptune);
+ println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
- drop(jupiter);
- println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
+ drop(uranus);
+ println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
- drop(mars);
- println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
+ drop(saturn);
+ println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
- // TODO
- println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
+ drop(jupiter);
+ println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
- // TODO
- println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
+ drop(mars);
+ println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
- // TODO
- println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
+ // TODO
+ println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
- assert_eq!(Rc::strong_count(&sun), 1);
+ // TODO
+ println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
+
+ // TODO
+ println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
+
+ assert_eq!(Rc::strong_count(&sun), 1);
+ }
}