summaryrefslogtreecommitdiff
path: root/rustlings/exercises/19_smart_pointers/rc1.rs
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-10-02 21:53:51 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-10-02 21:53:51 -0500
commit4dfc11d74ab02ac5765ae5d08fb750c91f4744b4 (patch)
tree17ba62056d6b691dd0217b0e8f1b3a5826dce0f6 /rustlings/exercises/19_smart_pointers/rc1.rs
parent02d8f1c62896576e1266553a56980eddbc2a88d7 (diff)
rustlings: move to rust/
Diffstat (limited to 'rustlings/exercises/19_smart_pointers/rc1.rs')
-rw-r--r--rustlings/exercises/19_smart_pointers/rc1.rs108
1 files changed, 0 insertions, 108 deletions
diff --git a/rustlings/exercises/19_smart_pointers/rc1.rs b/rustlings/exercises/19_smart_pointers/rc1.rs
deleted file mode 100644
index 5c9ce84..0000000
--- a/rustlings/exercises/19_smart_pointers/rc1.rs
+++ /dev/null
@@ -1,108 +0,0 @@
-// 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 `Planet`s. The planets take ownership of the sun, indicating that
-// they revolve around the sun.
-
-use std::rc::Rc;
-
-#[derive(Debug)]
-struct Sun;
-
-#[derive(Debug)]
-enum Planet {
- Mercury(Rc<Sun>),
- Venus(Rc<Sun>),
- Earth(Rc<Sun>),
- Mars(Rc<Sun>),
- Jupiter(Rc<Sun>),
- Saturn(Rc<Sun>),
- Uranus(Rc<Sun>),
- Neptune(Rc<Sun>),
-}
-
-impl Planet {
- fn details(&self) {
- println!("Hi from {self:?}!");
- }
-}
-
-fn main() {
- // You can optionally experiment here.
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn rc1() {
- let sun = Rc::new(Sun);
- println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
-
- let mercury = Planet::Mercury(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
- mercury.details();
-
- let venus = Planet::Venus(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
- venus.details();
-
- let earth = Planet::Earth(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
- earth.details();
-
- let mars = Planet::Mars(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
- mars.details();
-
- let jupiter = Planet::Jupiter(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
- jupiter.details();
-
- // TODO
- let saturn = Planet::Saturn(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
- saturn.details();
-
- // TODO
- let uranus = Planet::Uranus(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
- uranus.details();
-
- // TODO
- let neptune = Planet::Neptune(Rc::clone(&sun));
- println!("reference count = {}", Rc::strong_count(&sun)); // 9 references
- neptune.details();
-
- assert_eq!(Rc::strong_count(&sun), 9);
-
- drop(neptune);
- println!("reference count = {}", Rc::strong_count(&sun)); // 8 references
-
- drop(uranus);
- println!("reference count = {}", Rc::strong_count(&sun)); // 7 references
-
- drop(saturn);
- println!("reference count = {}", Rc::strong_count(&sun)); // 6 references
-
- drop(jupiter);
- println!("reference count = {}", Rc::strong_count(&sun)); // 5 references
-
- drop(mars);
- println!("reference count = {}", Rc::strong_count(&sun)); // 4 references
-
- // TODO
- drop(earth);
- println!("reference count = {}", Rc::strong_count(&sun)); // 3 references
-
- // TODO
- drop(venus);
- println!("reference count = {}", Rc::strong_count(&sun)); // 2 references
-
- // TODO
- drop(mercury);
- println!("reference count = {}", Rc::strong_count(&sun)); // 1 reference
-
- assert_eq!(Rc::strong_count(&sun), 1);
- }
-}