diff options
| author | Andrew Leech <andrew.leech@planetinnovation.com.au> | 2022-09-26 11:02:31 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-09-19 18:00:44 +1000 |
| commit | 7e14680a83525bf0822ef9cab899a5625496d662 (patch) | |
| tree | e5176548c07d8973956b48e1f3a462c36ed1e532 /tests/micropython/ringio.py | |
| parent | 6c73573b34c3fbd3d4da8d56767db03a8e5dd540 (diff) | |
py/objringio: Add micropython.RingIO() interface for general use.
This commit adds a new `RingIO` type which exposes the internal ring-buffer
code for general use in Python programs. It has the stream interface
making it similar to `StringIO` and `BytesIO`, except `RingIO` has a fixed
buffer size and is automatically safe when reads and writes are in
different threads or an IRQ.
This new type is enabled at the "extra features" ROM level.
Signed-off-by: Andrew Leech <andrew.leech@planetinnovation.com.au>
Diffstat (limited to 'tests/micropython/ringio.py')
| -rw-r--r-- | tests/micropython/ringio.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/micropython/ringio.py b/tests/micropython/ringio.py new file mode 100644 index 000000000..45774bc2e --- /dev/null +++ b/tests/micropython/ringio.py @@ -0,0 +1,48 @@ +# Check that micropython.RingIO works correctly. + +import micropython + +try: + micropython.RingIO +except AttributeError: + print("SKIP") + raise SystemExit + +rb = micropython.RingIO(16) +print(rb) + +print(rb.any()) + +rb.write(b"\x00") +print(rb.any()) + +rb.write(b"\x00") +print(rb.any()) + +print(rb.read(2)) +print(rb.any()) + + +rb.write(b"\x00\x01") +print(rb.read()) + +print(rb.read(1)) + +# Try to write more data than can fit at one go. +print(rb.write(b"\x00\x01" * 10)) +print(rb.write(b"\x00")) +print(rb.read()) + + +ba = bytearray(17) +rb = micropython.RingIO(ba) +print(rb) +print(rb.write(b"\x00\x01" * 10)) +print(rb.write(b"\x00")) +print(rb.read()) + +try: + # Size must be int. + micropython.RingIO(None) +except TypeError as ex: + print(ex) |
