///|
test {
let buf = Buffer()
@test.assert_eq(buf.is_empty(), true)
let buf2 = Buffer(size_hint=1024)
@test.assert_eq(buf2.length(), 0)
}///|
test {
let buf = @buffer.from_bytes(b"hello")
@test.assert_eq(buf.length(), 5)
let buf2 = @buffer.from_array([b'a', b'b', b'c'])
@test.assert_eq(buf2.length(), 3)
let buf3 = @buffer.from_iter(b"hi".iter())
@test.assert_eq(buf3.length(), 2)
}///|
test {
let buf = Buffer()
buf.write_byte(b'H')
buf.write_byte(b'i')
buf.write_bytes(b" world")
inspect(buf.to_bytes(), content="b\"Hi world\"")
// write a sub-range via BytesView
let buf2 = Buffer()
buf2.write_bytesview(b"Hello"[0:2])
inspect(buf2.to_bytes(), content="b\"He\"")
// write from an iterator
let buf3 = Buffer()
buf3.write_iter(b"ok".iter())
inspect(buf3.to_bytes(), content="b\"ok\"")
}///|
test {
// 32-bit signed/unsigned
let buf = Buffer()
buf.write_int_be(0x01020304)
inspect(
buf.to_bytes(),
content=(
#|b"\x01\x02\x03\x04"
),
)
let buf2 = Buffer()
buf2.write_int_le(0x01020304)
inspect(
buf2.to_bytes(),
content=(
#|b"\x04\x03\x02\x01"
),
)
// unsigned 32-bit
let buf3 = Buffer()
buf3.write_uint_be(0xAABBU)
inspect(
buf3.to_bytes(),
content=(
#|b"\x00\x00\xaa\xbb"
),
)
}///|
test {
// 16-bit signed
let buf = Buffer()
buf.write_int16_be((0x0102 : Int16))
buf.write_int16_le((0x0102 : Int16))
inspect(
buf.to_bytes(),
content=(
#|b"\x01\x02\x02\x01"
),
)
// 16-bit unsigned
let buf2 = Buffer()
buf2.write_uint16_be(Int::to_uint16(0x00AB))
inspect(
buf2.to_bytes(),
content=(
#|b"\x00\xab"
),
)
// 64-bit signed
let buf3 = Buffer()
buf3.write_int64_be(0x0102030405060708L)
inspect(
buf3.to_bytes(),
content=(
#|b"\x01\x02\x03\x04\x05\x06\x07\x08"
),
)
// 64-bit unsigned
let buf4 = Buffer()
buf4.write_uint64_le(0xAABBUL)
inspect(
buf4.to_bytes(),
content=(
#|b"\xbb\xaa\x00\x00\x00\x00\x00\x00"
),
)
}///|
test {
let buf = Buffer()
buf.write_float_be(1.0)
@test.assert_eq(buf.length(), 4)
let buf2 = Buffer()
buf2.write_double_le(1.0)
@test.assert_eq(buf2.length(), 8)
}///|
test {
// UTF-8
let buf = Buffer()
buf.write_char_utf8('A')
buf.write_string_utf8("BC")
inspect(buf.to_bytes(), content="b\"ABC\"")
// UTF-16 little-endian
let buf2 = Buffer()
buf2.write_char_utf16le('A')
inspect(buf2.to_bytes(), content="b\"A\\x00\"")
// UTF-16 big-endian
let buf3 = Buffer()
buf3.write_string_utf16be("AB")
inspect(buf3.to_bytes(), content="b\"\\x00A\\x00B\"")
}///|
test {
let buf = Buffer()
buf.write_utf8(42)
inspect(buf.to_bytes(), content="b\"42\"")
}///|
test {
let buf = Buffer()
buf.write_leb128(624485)
inspect(buf.to_bytes(), content="b\"\\xe5\\x8e&\"")
let buf2 = Buffer()
buf2.write_leb128(300UL)
inspect(buf2.to_bytes(), content="b\"\\xac\\x02\"")
}///|
test {
let buf = Buffer()
buf.write_bytes(b"hello")
let bytes = buf.to_bytes()
inspect(bytes, content="b\"hello\"")
let v = buf.view()
@test.assert_eq(v.length(), 5)
}///|
test {
let buf = Buffer()
buf.write_bytes(b"data")
@test.assert_eq(buf.length(), 4)
buf.reset()
@test.assert_eq(buf.is_empty(), true)
}///|
test {
let buf = Buffer(size_hint=1024)
for i in 0..<100 {
buf.write_int_le(i)
}
@test.assert_eq(buf.length(), 400) // 100 × 4 bytes
}trait Leb128type Buffer let buf = Buffer(size_hint=100)
buf.write_string_utf16le("Tes")
buf.write_char_utf16le('t')
inspect(
buf.contents(),
content=(
#|b"T\x00e\x00s\x00t\x00"
),
)test {
let buf = Buffer()
buf.write_string_utf16le("test")
inspect(buf.length(), content="8")
}test {
let buf = Buffer()
inspect(buf.is_empty(), content="true")
buf.write_string_utf16le("test")
inspect(buf.is_empty(), content="false")
}test {
let buf = Buffer()
buf.write_string_utf16le("Test")
inspect(buf.length(), content="8") // each char takes 2 bytes in UTF-16
}test {
let buf = Buffer()
buf.write_string_utf16le("Hello")
inspect(buf.length(), content="10")
buf.reset()
inspect(buf.length(), content="0")
inspect(buf.is_empty(), content="true")
}test {
let buf = Buffer()
buf.write_string_utf16le("Test")
let bytes = buf.to_bytes()
inspect(bytes.length(), content="8") //utf16
}test {
let buf = Buffer()
buf.write_byte(b'A')
let v = buf.view()
inspect(v.length(), content="1")
inspect(v[0], content="b'\\x41'")
}#deprecated("`Buffer::write` is deprecated, use `Logger::write` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write(self : Buffer, show : &Show) -> Unittest {
let buf = Buffer()
buf.write_byte(b'\x41')
inspect(
buf.contents(),
content=(
#|b"A"
),
)
}test {
let buf = Buffer()
buf.write_bytes(b"Test")
inspect(
buf.contents(),
content=(
#|b"Test"
),
)
}test {
let buf = Buffer()
let view = b"Test"[1:3]
buf.write_bytesview(view)
inspect(
buf.contents(),
content=(
#|b"es"
),
)
}#deprecated("`Buffer::write_char` is deprecated, use `Logger::write_char` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write_char(self : Buffer, value : Char) -> Unittest {
let buf = Buffer()
buf.write_double_be(1.0)
inspect(
buf.contents(),
content=(
#|b"?\xf0\x00\x00\x00\x00\x00\x00"
),
)
}test {
let buf = Buffer()
buf.write_double_le(3.14)
inspect(
buf.contents(),
content=(
#|b"\x1f\x85\xebQ\xb8\x1e\x09@"
),
)
}test {
let buf = Buffer()
buf.write_float_be(3.14)
// In big-endian format, 3.14 is represented as [0x40, 0x48, 0xF5, 0xC3]
inspect(
buf.contents(),
content=(
#|b"@H\xf5\xc3"
),
)
}test {
let buf = Buffer()
buf.write_float_le(3.14)
// The bytes are written in little-endian format
inspect(
buf.contents(),
content=(
#|b"\xc3\xf5H@"
),
)
}test {
let buf = Buffer()
buf.write_int16_be(0x1234)
inspect(
buf.contents(),
content=(
#|b"\x124"
),
)
}test {
let buf = Buffer()
buf.write_int16_le(-1)
inspect(
buf.contents(),
content=(
#|b"\xff\xff"
),
)
}test {
let buf = Buffer()
buf.write_int64_be(0x0102030405060708L)
inspect(
buf.contents(),
content=(
#|b"\x01\x02\x03\x04\x05\x06\x07\x08"
),
)
}test {
let buf = Buffer()
buf.write_int64_le(-1L)
inspect(
buf.contents(),
content=(
#|b"\xff\xff\xff\xff\xff\xff\xff\xff"
),
)
}test {
let buf = Buffer()
buf.write_int_be(0x12345678)
inspect(
buf.contents(),
content=(
#|b"\x124Vx"
),
)
}test {
let buf = Buffer()
buf.write_int_le(-1)
inspect(buf.contents(), content="b\"\\xff\\xff\\xff\\xff\"")
}test {
let buf = Buffer()
let bytes = b"Hello"
buf.write_iter(bytes.iter())
inspect(
buf.contents(),
content=(
#|b"Hello"
),
)
}test {
let buf = Buffer()
buf.write_leb128(127)
inspect(buf.contents().length() > 0, content="true")
}#deprecated("`Buffer::write_string` is deprecated, use `Logger::write_string` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write_string(self : Buffer, value : String) -> Unit#deprecated("`Buffer::write_string_interpolation` is deprecated, use `Logger::write_string_interpolation` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write_string_interpolation(self : Buffer, show : &Show) -> Unittest {
let buf = Buffer()
buf.write_string_utf16be("A")
inspect(buf.contents().length(), content="2")
}test {
let buf = Buffer()
buf.write_string_utf16le("A")
inspect(buf.contents().length(), content="2")
}test {
let buf = Buffer()
buf.write_string_utf8("Hi")
inspect(buf.contents().length(), content="2")
}#deprecated("`Buffer::write_substring` is deprecated, use `Logger::write_substring` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write_substring(self : Buffer, value : String, start : Int, len : Int) -> Unittest {
let buf = Buffer()
buf.write_uint16_be(0x1234)
inspect(
buf.contents(),
content=(
#|b"\x124"
),
)
}test {
let buf = Buffer()
buf.write_uint16_le(0x1234)
inspect(
buf.contents(),
content=(
#|b"4\x12"
),
)
}test {
let buf = Buffer()
buf.write_uint64_be(0xAABBCCDD11223344)
// Bytes are written in big-endian order
inspect(
buf.contents(),
content=(
#|b"\xaa\xbb\xcc\xdd\x11\x223D"
),
)
}test {
let buf = Buffer()
buf.write_uint64_le(0x0123456789ABCDEF)
inspect(
buf.contents(),
content=(
#|b"\xef\xcd\xab\x89gE#\x01"
),
)
}test {
let buf = Buffer()
buf.write_uint_be(0x12345678)
inspect(
buf.contents(),
content=(
#|b"\x124Vx"
),
)
}test {
let buf = Buffer()
buf.write_uint_le(0x12345678)
inspect(
buf.contents(),
content=(
#|b"xV4\x12"
),
)
}test {
let buf = Buffer()
buf.write_utf8(42)
inspect(
buf.contents(),
content=(
#|b"42"
),
)
}#deprecated("`Buffer::write_view` is deprecated, use `Logger::write_view` instead.")
#deprecated("Buffer's current Logger impl writes UTF-16LE bytes; use StringBuilder or explicit Buffer encoders. A future breaking release may restore it with UTF-8 semantics.")
fn Buffer::write_view(self : Buffer, value : StringView) -> Unit#deprecated("use `Buffer()` instead (with `Buffer` in scope via the prelude)")
fn new(size_hint? : Int) -> Buffertest {
let buf = Buffer(size_hint=10)
inspect(buf.length(), content="0")
buf.write_string_utf16le("test")
inspect(buf.length(), content="8")
}Install
Installed by default