Add function template tests.
authorRobert Bradshaw <robertwb@gmail.com>
Thu, 26 Dec 2013 23:59:06 +0000 (15:59 -0800)
committerRobert Bradshaw <robertwb@gmail.com>
Thu, 26 Dec 2013 23:59:06 +0000 (15:59 -0800)
tests/run/cpp_template_functions.pyx [new file with mode: 0644]
tests/run/cpp_template_functions_helper.h [new file with mode: 0644]

diff --git a/tests/run/cpp_template_functions.pyx b/tests/run/cpp_template_functions.pyx
new file mode 100644 (file)
index 0000000..d09e802
--- /dev/null
@@ -0,0 +1,33 @@
+# tag: cpp
+
+from libcpp.pair cimport pair
+
+cdef extern from "cpp_template_functions_helper.h":
+    cdef T one_param[T](T)
+    cdef pair[T, U] two_params[T, U](T, U)
+    cdef cppclass A[T]:
+        pair[T, U] method[U](T, U)
+
+def test_one_param(int x):
+    """
+    >>> test_one_param(3)
+    (3, 3.0)
+    """
+    return one_param[int](x), one_param[double](x)
+
+def test_two_params(int x, int y):
+    """
+    >>> test_two_params(1, 2)
+    (1, 2.0)
+    """
+    return two_params[int, double](x, y)
+
+def test_method(int x, int y):
+    """
+    >>> test_method(5, 10)
+    ((5, 10.0), (5.0, 10))
+    """
+    cdef A[int] a_int
+    cdef A[double] a_double
+    return a_int.method[float](x, y), a_double.method[int](x, y)
+#    return a_int.method[double](x, y), a_double.method[int](x, y)
diff --git a/tests/run/cpp_template_functions_helper.h b/tests/run/cpp_template_functions_helper.h
new file mode 100644 (file)
index 0000000..1b1cead
--- /dev/null
@@ -0,0 +1,18 @@
+template <typename T>
+T one_param(T value) {
+    return value;
+}
+
+template <typename T, typename U>
+std::pair<T, U> two_params(T a, U b) {
+    return std::pair<T, U>(a, b);
+}
+
+template <typename T>
+class A {
+    public:
+        template <typename U>
+        std::pair<T, U> method(T a, U b) {
+            return std::pair<T, U>(a, b);
+        }
+};