summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/features/test_traits_suite.zc4
-rw-r--r--tests/generics/test_generic_empty_struct.zc85
-rw-r--r--tests/std/test_fs.zc2
-rw-r--r--tests/std/test_std_expansion.zc2
4 files changed, 89 insertions, 4 deletions
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<T> {
+ value: T;
+ valid: bool;
+}
+
+impl Optional<T> {
+ 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<T> {
+ data: T*;
+ len: u64;
+ cap: u64;
+}
+
+impl Stack<T> {
+ fn new() -> Stack<T> {
+ return Stack<T> {
+ 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<T> {
+ if (self.len > 0) {
+ var result = Optional<T>{};
+ result.emplace(self.data[self.len - 1]);
+ self.len = self.len - 1;
+ return result;
+ }
+ return Optional<T>{};
+ }
+}
+
+test "Generic Empty Struct Init" {
+ var s = Stack<i32>{};
+ 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!";
}