def METHOD_NAME() -> None:
    """Test basic queue behavior in a single thread."""
    subject = ThreadAsyncQueue[int]()
    with subject:
        subject.put(1)
        subject.put(2)
        subject.put(3)
    # Putting isn't allowed after closing.
    with pytest.raises(QueueClosed):
        subject.put(4)
    with pytest.raises(QueueClosed):
        subject.put(5)
    # Closing isn't allowed after closing.
    with pytest.raises(QueueClosed):
        subject.done_putting()
    # Values are retrieved in order.
    assert [subject.get(), subject.get(), subject.get()] == [1, 2, 3]
    # After retrieving all values, further retrievals raise.
    with pytest.raises(QueueClosed):
        subject.get()
    with pytest.raises(QueueClosed):
        # If closing were naively implemented as a sentinel value being inserted
        # into the queue, it might be that the first get() after the close
        # correctly raises but the second get() doesn't.
        subject.get()