Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion exercises/practice/robot-name/.meta/example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ impl Robot {
// name conflicts with other robots from the same factory.
pub fn reset<R: Rng>(&mut self, rng: &mut R) {
let mut used_names = self.used_names.lock().unwrap();
self.name = generate_name(rng, &mut used_names);
let new_name = generate_name(rng, &mut used_names);
used_names.remove(&self.name);
self.name = new_name
}
}
13 changes: 13 additions & 0 deletions exercises/practice/robot-name/tests/robot_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,16 @@ fn factory_prevents_name_collision_despite_reset() {

assert!((0..3529).all(|_| !set.contains(factory.new_robot(&mut rng).name())));
}

#[test]
#[ignore]
fn old_name_becomes_available_after_reset() {
let mut rng = deterministic_rng();
let mut factory = RobotFactory::new();
let mut robot = factory.new_robot(&mut rng);
let first_name = robot.name().to_string();
robot.reset(&mut rng); // cause first name to become available again
let mut rng = deterministic_rng(); // reset rng
let second_robot = factory.new_robot(&mut rng);
assert_eq!(second_robot.name(), first_name);
}