added complicated_polymorph test
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 15 Nov 2021 16:05:16 +0000 (10:05 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 15 Nov 2021 16:05:16 +0000 (10:05 -0600)
tests/complicated_polymorph [new file with mode: 0644]
tests/complicated_polymorph.onyx [new file with mode: 0644]

diff --git a/tests/complicated_polymorph b/tests/complicated_polymorph
new file mode 100644 (file)
index 0000000..0100b14
--- /dev/null
@@ -0,0 +1,3 @@
+20
+23.0000
+258.0000
diff --git a/tests/complicated_polymorph.onyx b/tests/complicated_polymorph.onyx
new file mode 100644 (file)
index 0000000..f3d5687
--- /dev/null
@@ -0,0 +1,39 @@
+#load "core/std"
+
+use package core
+
+main :: (args: [] cstr) {
+    baked_proc :: (x: $T, $func: (T) -> typeof x) -> T {
+        return func(x);
+    }
+
+    baked_proc(10, (x: i32) -> i32 { return x * 2; })
+    |> println();
+
+    compose :: (a: $A, f: (A) -> $B, g: (B) -> $C) -> C {
+        return g(f(a));
+    }
+
+    Number :: interface (T: type_expr) {
+        T * T;
+    }
+
+    dumb :: (ZZZ: $T) -> #auto where Number(T) {
+        return ZZZ * 2;
+    }
+
+    compose(10.0f, dumb, (ABC) => ABC + 3) |> println();
+
+    double  :: (x) => x * 2;
+    convert :: (x: $T, $TO: type_expr) => cast(TO) x;
+    add     :: (x: $T, y: T) => x + y;
+    map     :: (x: $T, f: (T) -> $R) => f(x);
+
+    5 |> double()
+      |> map((x) => x * 3) 
+      |> add(2)
+      |> double()
+      |> map((x) => cast(f32) x)
+      |> map((x) => x * 4 + 2)
+      |> println();
+}