From d81a1c541514be955cb5f2b9988d7931f14044a3 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Thu, 28 Mar 2024 15:04:10 +0800 Subject: [PATCH] add `bytes.__add__` --- src/pocketpy.cpp | 9 +++++++++ tests/11_bytes.py | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index a7cd21b1..1b407038 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -1073,6 +1073,15 @@ void init_builtins(VM* _vm) { return VAR(self[i]); }); + _vm->bind__add__(VM::tp_bytes, [](VM* vm, PyObject* _0, PyObject* _1) { + const Bytes& a = _CAST(Bytes&, _0); + const Bytes& b = CAST(Bytes&, _1); + unsigned char *buffer = new unsigned char[a.size() + b.size()]; + memcpy(buffer, a.data(), a.size()); + memcpy(buffer + a.size(), b.data(), b.size()); + return VAR(Bytes(buffer, a.size() + b.size())); + }); + _vm->bind__hash__(VM::tp_bytes, [](VM* vm, PyObject* _0) { const Bytes& self = _CAST(Bytes&, _0); std::string_view view((char*)self.data(), self.size()); diff --git a/tests/11_bytes.py b/tests/11_bytes.py index f1a0f0c9..76a247a6 100644 --- a/tests/11_bytes.py +++ b/tests/11_bytes.py @@ -1,6 +1,12 @@ a = '12345' assert a.encode() == b'12345' +# test add +assert b'123' + b'456' == b'123456' +assert b'' + b'123' == b'123' +assert b'123' + b'' == b'123' +assert b'' + b'' == b'' + assert b'\xff\xee' != b'1234' assert b'\xff\xee' == b'\xff\xee'