From 9b763072fe78d8b2dd9fcdeb31a3d1fafcbcc367 Mon Sep 17 00:00:00 2001 From: Jimmy Girardet Date: Tue, 9 Apr 2019 16:23:56 +0200 Subject: [PATCH] add upper lower --- tests/snippets/bytes.py | 6 ++++++ vm/src/obj/objbyteinner.rs | 8 ++++++++ vm/src/obj/objbytes.rs | 17 +++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/tests/snippets/bytes.py b/tests/snippets/bytes.py index ceb52921c..3ccb2fc23 100644 --- a/tests/snippets/bytes.py +++ b/tests/snippets/bytes.py @@ -112,3 +112,9 @@ assert not bytes(b"tuPpEr").isupper() assert bytes(b"Is Title Case").istitle() assert not bytes(b"is Not title casE").istitle() + +# upper lower +l = bytes(b"lower") +b = bytes(b"UPPER") +assert l.lower().islower() +assert b.upper().isupper() diff --git a/vm/src/obj/objbyteinner.rs b/vm/src/obj/objbyteinner.rs index bcb1f8207..4771a91bd 100644 --- a/vm/src/obj/objbyteinner.rs +++ b/vm/src/obj/objbyteinner.rs @@ -297,6 +297,14 @@ impl PyByteInner { Ok(vm.new_bool(true)) } + + pub fn lower(&self, _vm: &VirtualMachine) -> Vec { + self.elements.to_ascii_lowercase() + } + + pub fn upper(&self, _vm: &VirtualMachine) -> Vec { + self.elements.to_ascii_uppercase() + } } // TODO diff --git a/vm/src/obj/objbytes.rs b/vm/src/obj/objbytes.rs index 0b257cb77..0be821500 100644 --- a/vm/src/obj/objbytes.rs +++ b/vm/src/obj/objbytes.rs @@ -158,34 +158,51 @@ impl PyBytesRef { fn isalnum(self, vm: &VirtualMachine) -> PyResult { self.inner.isalnum(vm) } + #[pymethod(name = "isalpha")] fn isalpha(self, vm: &VirtualMachine) -> PyResult { self.inner.isalpha(vm) } + #[pymethod(name = "isascii")] fn isascii(self, vm: &VirtualMachine) -> PyResult { self.inner.isascii(vm) } + #[pymethod(name = "isdigit")] fn isdigit(self, vm: &VirtualMachine) -> PyResult { self.inner.isdigit(vm) } + #[pymethod(name = "islower")] fn islower(self, vm: &VirtualMachine) -> PyResult { self.inner.islower(vm) } + #[pymethod(name = "isspace")] fn isspace(self, vm: &VirtualMachine) -> PyResult { self.inner.isspace(vm) } + #[pymethod(name = "isupper")] fn isupper(self, vm: &VirtualMachine) -> PyResult { self.inner.isupper(vm) } + #[pymethod(name = "istitle")] fn istitle(self, vm: &VirtualMachine) -> PyResult { self.inner.istitle(vm) } + + #[pymethod(name = "lower")] + fn lower(self, vm: &VirtualMachine) -> PyResult { + Ok(vm.ctx.new_bytes(self.inner.lower(vm))) + } + + #[pymethod(name = "upper")] + fn upper(self, vm: &VirtualMachine) -> PyResult { + Ok(vm.ctx.new_bytes(self.inner.upper(vm))) + } } #[derive(Debug)]