From bb44db8e61a40d4fcd31a87140f3c61aed551a2c Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Thu, 22 Jan 2026 02:59:58 +0000 Subject: This one is big, it solves several bugs that were not detected. --- tests/features/test_traits_suite.zc | 4 +- tests/generics/test_generic_empty_struct.zc | 85 +++++++++++++++++++++++++++++ tests/std/test_fs.zc | 2 +- tests/std/test_std_expansion.zc | 2 +- 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 tests/generics/test_generic_empty_struct.zc (limited to 'tests') diff --git a/tests/features/test_traits_suite.zc b/tests/features/test_traits_suite.zc index 7fe7d1c..d546a24 100644 --- a/tests/features/test_traits_suite.zc +++ b/tests/features/test_traits_suite.zc @@ -97,8 +97,8 @@ test "test_derive" { assert(p2.x == 10, "Clone x matches"); // Eq - assert(p1.eq(p2) == true, "Eq works (true)"); + assert(p1.eq(&p2) == true, "Eq works (true)"); var p3 = Point{x: 10, y: 21}; - assert(p1.eq(p3) == false, "Eq works (false)"); + assert(p1.eq(&p3) == false, "Eq works (false)"); } diff --git a/tests/generics/test_generic_empty_struct.zc b/tests/generics/test_generic_empty_struct.zc new file mode 100644 index 0000000..f3e3c39 --- /dev/null +++ b/tests/generics/test_generic_empty_struct.zc @@ -0,0 +1,85 @@ +struct Optional { + value: T; + valid: bool; +} + +impl Optional { + fn get(self) -> T { + assert(self.valid, "Optional does not contain value"); + return self.value; + } + + fn has_value(self) -> bool { + return self.valid; + } + + fn emplace(self, value: T) { + self.value = value; + self.valid = true; + } + + fn reset(self) { + self.valid = false; + } +} + +struct Stack { + data: T*; + len: u64; + cap: u64; +} + +impl Stack { + fn new() -> Stack { + return Stack { + data: NULL, + len: 0, + cap: 0 + }; + } + + fn free(self) { + if (self.data) { + free(self.data); + } + self.len = 0; + } + + fn clear(self) { + self.len = 0; + } + + fn push(self, value: T) { + if (!self.data) { + self.cap = 8; + self.data = malloc(sizeof(T) * self.cap); + } + if self.len == self.cap { + self.cap = self.cap * 2; + self.data = realloc(self.data, sizeof(T) * self.cap); + } + + self.data[self.len] = value; + self.len = self.len + 1; + } + + fn pop(self) -> Optional { + if (self.len > 0) { + var result = Optional{}; + result.emplace(self.data[self.len - 1]); + self.len = self.len - 1; + return result; + } + return Optional{}; + } +} + +test "Generic Empty Struct Init" { + var s = Stack{}; + defer s.free(); + s.push(123); + var result = s.pop(); + + assert(result.has_value(), "Result should have value"); + assert(result.get() == 123, "Result value should be 123"); +} diff --git a/tests/std/test_fs.zc b/tests/std/test_fs.zc index c3fd47c..1b6eb56 100644 --- a/tests/std/test_fs.zc +++ b/tests/std/test_fs.zc @@ -13,7 +13,7 @@ test "test_std_fs_extended" { var p3 = Path::new("file.txt"); var ext = p3.extension(); assert(ext.is_some(), "Extension missed"); - assert(strcmp(ext.unwrap_ref().c_str(), ".txt") == 0, "Wrong extension"); + assert(strcmp(ext.unwrap_ref().c_str(), "txt") == 0, "Wrong extension"); var p4 = Path::new("/usr/bin/gcc"); var parent = p4.parent(); diff --git a/tests/std/test_std_expansion.zc b/tests/std/test_std_expansion.zc index 5f400e4..764e0ac 100644 --- a/tests/std/test_std_expansion.zc +++ b/tests/std/test_std_expansion.zc @@ -33,7 +33,7 @@ test "test_std_expansion" { "Testing JSON..."; var j = JsonValue::string("hello"); - assert(j.kind == JsonType::JSON_STRING, "Json string kind failed"); + assert(j.kind == JsonType::JSON_STRING(), "Json string kind failed"); "All expansion tests passed!"; } -- cgit v1.2.3