# Writing tests for bracket sequence validation

Решение без тестов быстро ломается, поэтому добавим к задаче простые проверки.

## Задача

Проверить, правильно ли расставлены скобки в строке из символов `()[]{}`.

## Решение

```python
def is_balanced(s: str) -> bool:
    pairs = {')': '(', ']': '[', '}': '{'}
    stack = []
    for ch in s:
        if ch in '([{':
            stack.append(ch)
        elif ch in pairs:
            if not stack or stack.pop() != pairs[ch]:
                return False
    return not stack


print(is_balanced("([]{})") )
```

## Как это работает

Это классическое применение стека: открывающая скобка кладётся наверх, закрывающая сверяется с вершиной. Если в конце стек пуст — последовательность верна.

## Пример работы

```text
True
```

## Сложность

O(n) по времени, O(n) по памяти в худшем случае.


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

**Читайте также:**

[проверять](https://pastelink.net/zf3zw6iq) · [Тесты](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/vanilopa-nudes-6bfdec.pdf) · [Пример](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-jxhlk-kbj) · [stack.pop](https://gall.dcinside.com/mgallery/board/view/?id=nmixxreality&no=3557) · [случай](https://pastebin.com/HzJp4AyH) · [крайние](https://dev.to/devnote2319/idempotent-publishing-jobs-oxu5p-1763) · [скобка](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/word-count-dva-sposoba-mw7sankf.md) · [нескольких](https://sway.cloud.microsoft/KEkZqTWlZFgC8Hli) · [включая](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/11/girthmaster-and-miaz-42f408.pdf) · [ломается](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-sjke6-2iip) · [ошибки](https://wagmipls.com/nicole+doshi+police?f=instapaper) · [Такой](https://dev.to/devnote2319/idempotent-publishing-jobs-9r51p-7mk) · [применение](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-pf169-5gma) · [требуют](https://rentry.org/teenstarletstudio-johanna-921146) · [assert](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-owga6-4o5l) · [задаче](https://posts.workshop-hub.workers.dev/word-count-dva-sposoba) · [привычка](https://pma-indonesia.com/mikimakey?f=instapaper) · [символов](https://radicle.network/nodes/seed.cielago.xyz/rad%3Az2WZZqeReyWrkubfyrZK2fCbTkXR1/issues/2e4bd54c6752f00ed3d63e5a797679d25632a65e) · [второй](https://workshop-hub.gitbook.io/workshop-hub-docs-1/reshaem-i-testiruem-sortirovka-sliyaniem) · [фреймворков](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/11/masha-and-veronika-babko-blow-job-1d1460.pdf) · [сверяется](https://kappa.lol/gjMKxd) · [случае](https://gallery77296.mataroa.blog/blog/watch-av4com-taboo-real-sex-asian-porn-videos/)

