1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
from __future__ import annotations
from typing import Final
from mypy_extensions import u8
from librt.internal import (
ReadBuffer,
WriteBuffer,
write_bool, read_bool,
write_str, read_str,
write_float, read_float,
write_int, read_int,
write_tag, read_tag,
write_bytes, read_bytes,
cache_version,
)
Tag = u8
TAG_A: Final[Tag] = 33
TAG_B: Final[Tag] = 255
TAG_SPECIAL: Final[Tag] = 239
def test_cache_version() -> None:
assert cache_version() == 0
def test_buffer_write_and_read_int() -> None:
b = WriteBuffer()
write_int(b, 42)
rb = ReadBuffer(b.getvalue())
assert read_int(rb) == 42
def test_buffer_roundtrip() -> None:
b: WriteBuffer | ReadBuffer
b = WriteBuffer()
write_str(b, "foo")
write_bool(b, True)
write_str(b, "bar" * 1000)
write_bool(b, False)
write_bytes(b, b"bar")
write_bytes(b, b"bar" * 100)
write_bytes(b, b"")
write_bytes(b, b"a" * 117)
write_bytes(b, b"a" * 118)
write_float(b, 0.1)
write_float(b, -1.0)
write_float(b, -113.0)
write_int(b, 0)
write_int(b, 1)
write_tag(b, TAG_A)
write_tag(b, TAG_SPECIAL)
write_tag(b, TAG_B)
write_int(b, 2)
write_int(b, 2 ** 85)
write_int(b, 255)
write_int(b, -1)
write_int(b, -255)
write_int(b, 536860911)
write_int(b, 536860912)
write_int(b, 1234567891)
b = ReadBuffer(b.getvalue())
assert read_str(b) == "foo"
assert read_bool(b) is True
assert read_str(b) == "bar" * 1000
assert read_bool(b) is False
assert read_bytes(b) == b"bar"
assert read_bytes(b) == b"bar" * 100
assert read_bytes(b) == b""
assert read_bytes(b) == b"a" * 117
assert read_bytes(b) == b"a" * 118
assert read_float(b) == 0.1
assert read_float(b) == -1.0
assert read_float(b) == -113.0
assert read_int(b) == 0
assert read_int(b) == 1
assert read_tag(b) == TAG_A
assert read_tag(b) == TAG_SPECIAL
assert read_tag(b) == TAG_B
assert read_int(b) == 2
assert read_int(b) == 2 ** 85
assert read_int(b) == 255
assert read_int(b) == -1
assert read_int(b) == -255
assert read_int(b) == 536860911
assert read_int(b) == 536860912
assert read_int(b) == 1234567891
def test_buffer_int_size() -> None:
b: WriteBuffer | ReadBuffer
for i in (-10, -9, 0, 116, 117):
b = WriteBuffer()
write_int(b, i)
assert len(b.getvalue()) == 1
b = ReadBuffer(b.getvalue())
assert read_int(b) == i
for i in (-100, -11, 118, 12344, 16283):
b = WriteBuffer()
write_int(b, i)
assert len(b.getvalue()) == 2
b = ReadBuffer(b.getvalue())
assert read_int(b) == i
for i in (-10000, 16284, 123456789):
b = WriteBuffer()
write_int(b, i)
assert len(b.getvalue()) == 4
b = ReadBuffer(b.getvalue())
assert read_int(b) == i
def test_buffer_int_powers() -> None:
# 0, 1, 2 are tested above
b: WriteBuffer | ReadBuffer
for p in range(2, 100):
b = WriteBuffer()
write_int(b, 1 << p)
write_int(b, -1 << p)
b = ReadBuffer(b.getvalue())
assert read_int(b) == 1 << p
assert read_int(b) == -1 << p
def test_buffer_str_size() -> None:
b: WriteBuffer | ReadBuffer
for s in ("", "a", "a" * 117):
b = WriteBuffer()
write_str(b, s)
assert len(b.getvalue()) == len(s) + 1
b = ReadBuffer(b.getvalue())
assert read_str(b) == s
for s in ("a" * 118, "a" * 16283):
b = WriteBuffer()
write_str(b, s)
assert len(b.getvalue()) == len(s) + 2
b = ReadBuffer(b.getvalue())
assert read_str(b) == s
|