We should migrate the test suite to use unittest. Subtasks: - [ ] Move existing function-based tests into `unittest.TestCase` subclasses - [ ] Update the CI machinery to use `unittest` - [ ] Update assertions to unittest-style (e.g., `self.assertEqual(a, b)` instead of `assert a == b`)