# Each command prints the current state of the buffer pool.
#
# [    ] - Indicates a cell within BufferPool.pool's underlying array that's
#          unused and does not hold a buffer.
# [   n] - Indicates a cell within BufferPool.pool that is not currently in use,
#          but does hold a buffer of size n.
# <   n> - Indicates a cell within BufferPool.pool that holds a buffer of size
#          n, and that buffer is presently in-use and ineligible for reuse.

init size=5
----
[    ] [    ] [    ] [    ] [    ]

alloc n=512 handle=foo
----
< 512> [    ] [    ] [    ] [    ]

release handle=foo
----
[ 512] [    ] [    ] [    ] [    ]

# Allocating again should use the existing buffer.

alloc n=512 handle=bar
----
< 512> [    ] [    ] [    ] [    ]

# Allocating again should allocate a new buffer for the next slot.

alloc n=512 handle=bax
----
< 512> < 512> [    ] [    ] [    ]

release handle=bar
----
[ 512] < 512> [    ] [    ] [    ]

release handle=bax
----
[ 512] [ 512] [    ] [    ] [    ]

# Fill up the entire preallocated pool slice.

alloc n=128 handle=bar
----
< 512> [ 512] [    ] [    ] [    ]

alloc n=1 handle=bax
----
< 512> < 512> [    ] [    ] [    ]

alloc n=1 handle=bux
----
< 512> < 512> <   1> [    ] [    ]

alloc n=1024 handle=foo
----
< 512> < 512> <   1> <1024> [    ]

alloc n=1024 handle=fax
----
< 512> < 512> <   1> <1024> <1024>

# Allocating one more should grow the underlying slice, and allocate a
# new appropriately sized buffer.

alloc n=2048 handle=zed
----
< 512> < 512> <   1> <1024> <1024> <2048> [    ] [    ] [    ] [    ]

release handle=bux
----
< 512> < 512> [   1] <1024> <1024> <2048> [    ] [    ] [    ] [    ]

alloc n=2 handle=bux
----
< 512> < 512> [   1] <1024> <1024> <2048> <   2> [    ] [    ] [    ]

init size=0
----

alloc n=1 handle=foo
----
<   1>