summaryrefslogtreecommitdiff
path: root/tests/micropython/ringio.py
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2022-09-26 11:02:31 +1000
committerDamien George <damien@micropython.org>2024-09-19 18:00:44 +1000
commit7e14680a83525bf0822ef9cab899a5625496d662 (patch)
treee5176548c07d8973956b48e1f3a462c36ed1e532 /tests/micropython/ringio.py
parent6c73573b34c3fbd3d4da8d56767db03a8e5dd540 (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.py48
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)