summaryrefslogtreecommitdiff
path: root/tests/generics
diff options
context:
space:
mode:
Diffstat (limited to 'tests/generics')
-rw-r--r--tests/generics/test_multi_generics.zc29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/generics/test_multi_generics.zc b/tests/generics/test_multi_generics.zc
index 30f4103..00d735e 100644
--- a/tests/generics/test_multi_generics.zc
+++ b/tests/generics/test_multi_generics.zc
@@ -4,6 +4,22 @@ struct Pair<A, B> {
second: B;
}
+struct Triple<A, B, C> {
+ first: A;
+ second: B;
+ third: C;
+}
+
+// Generic function with 2 type parameters
+fn make_pair<F, S>(f: F, s: S) -> Pair<F, S> {
+ return Pair<F, S> { first: f, second: s };
+}
+
+// Generic function with 3 type parameters
+fn make_triple<X, Y, Z>(x: X, y: Y, z: Z) -> Triple<X, Y, Z> {
+ return Triple<X, Y, Z> { first: x, second: y, third: z };
+}
+
test "multi-type generics basic" {
var p: Pair<int, float>;
p.first = 42;
@@ -11,3 +27,16 @@ test "multi-type generics basic" {
assert(p.first == 42, "First field failed");
println "Multi-type generics test passed!";
}
+
+test "generic function with 2 params" {
+ var p = make_pair<int, float>(100, 2.5);
+ assert(p.first == 100, "Pair first failed");
+ println "2-param generic function passed!";
+}
+
+test "generic function with 3 params" {
+ var t = make_triple<int, float, bool>(42, 3.14, true);
+ assert(t.first == 42, "Triple first failed");
+ assert(t.third == true, "Triple third failed");
+ println "3-param generic function passed!";
+}