From b3f15a867c79ccb72cf30444b2317735a3f35348 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Fri, 10 Feb 2023 08:38:00 +0100 Subject: [PATCH] Added "clear" to VarString --- lib/std/core/string.c3 | 15 +++++++++++++++ test/unit/stdlib/string.c3 | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 test/unit/stdlib/string.c3 diff --git a/lib/std/core/string.c3 b/lib/std/core/string.c3 index 7ccd96241..67371c2e2 100644 --- a/lib/std/core/string.c3 +++ b/lib/std/core/string.c3 @@ -2,6 +2,10 @@ module std::core::string; import libc; define VarString = distinct void*; +define DynStr = VarString; +define DynString = VarString; +define DString = VarString; +define VString = VarString; private struct StringData { @@ -52,6 +56,12 @@ fn ZString VarString.zstr(VarString str) return (ZString)&data.chars[0]; } +fn usz VarString.capacity(VarString this) +{ + if (!this) return 0; + return this.data().capacity; +} + fn usz VarString.len(VarString this) { if (!this) return 0; @@ -245,6 +255,11 @@ fn void VarString.append_string(VarString* this, VarString str) this.append(str.str()); } +fn void VarString.clear(VarString* str) +{ + str.data().len = 0; +} + fn void VarString.append_char(VarString* str, char c) { if (!*str) diff --git a/test/unit/stdlib/string.c3 b/test/unit/stdlib/string.c3 new file mode 100644 index 000000000..75971c7d0 --- /dev/null +++ b/test/unit/stdlib/string.c3 @@ -0,0 +1,19 @@ +module string_test; + +fn void! test_clear() @test +{ + DynString s = string::new_with_capacity(32); + assert(s.len() == 0); + assert(s.capacity() == 32); + s.append_repeat('x', 63); + assert(s.capacity() == 64); + assert(s.len() == 63); + char* addr = &s[0]; + s.clear(); + assert(s.capacity() == 64); + assert(s.len() == 0); + s.append_repeat('x', 63); + assert(s.capacity() == 64); + assert(s.len() == 63); + assert(addr == &s[0]); +} \ No newline at end of file