summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/functions/test_raw_func_ptr.zc27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/functions/test_raw_func_ptr.zc b/tests/functions/test_raw_func_ptr.zc
new file mode 100644
index 0000000..16ec7df
--- /dev/null
+++ b/tests/functions/test_raw_func_ptr.zc
@@ -0,0 +1,27 @@
+
+fn print_msg(msg: char*) {
+ puts(msg);
+}
+
+fn run_callback(cb: fn*(char*), arg: char*) {
+ cb(arg);
+}
+
+fn get_printer() -> fn*(char*) {
+ return print_msg;
+}
+
+test "raw_func_ptr_basic" {
+ run_callback(print_msg, "Hello Raw Ptr");
+}
+
+test "raw_func_ptr_return_explicit" {
+ var p: fn*(char*) = get_printer();
+ p("Returned Ptr Explicit works");
+}
+
+test "fn_ptr_ptr" {
+ var p: fn*(char*) = print_msg;
+ var pp: fn**(char*) = &p;
+ (*pp)("Double Pointer works");
+}