# Unit 5 – Basic Practice: Timer

A timer counts elapsed seconds up to a set limit. Think of a quiz timer or 
a cooking timer: it ticks forward on command, resets when asked, and 
reports whether time has run out.

## Instructions

### Timer

1. Think about what a Timer needs to know from the start. Which values 
   are fixed settings, and which will change as the timer runs?
2. The elapsed count must be tracked inside the class. What visibility 
   should it have, and what does that mean for code outside the class?
3. Add an `init` block to guard against a nonsensical limit. What 
   condition makes a limit invalid?
4. Implement `tick()`: if the timer has already reached its limit, print 
   that it is expired; otherwise add one second and print the current 
   progress.
5. Implement `reset()`: bring the elapsed count back to zero and confirm 
   with a printed message.
6. Implement `status()`: return a string showing the label, current 
   progress, and whether the timer is running or expired.

### Testing

1. Create `Timer("Exam", 3)`.
2. Call `status()` — expect `"Exam: 0s / 3s [running]"`.
3. Call `tick()` three times — elapsed should reach 3.
4. Call `tick()` a fourth time — expect the expired message; elapsed 
   should not increase.
5. Call `reset()`, then `status()` — back to `"Exam: 0s / 3s [running]"`.
6. Try `Timer("Bad", 0)` — `init` should reject it with an error.
