diff tests/mini/funcptr.d @ 341:1bb99290e03a trunk

[svn r362] Started merging the old 'test' dir as well as the newer 'tangotests' dir into 'tests/mini' and 'tests/minicomplex'.
author lindquist
date Sun, 13 Jul 2008 02:51:19 +0200
parents test/funcptr.d@d9d5d59873d8
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/mini/funcptr.d	Sun Jul 13 02:51:19 2008 +0200
@@ -0,0 +1,68 @@
+extern(C) int printf(char*, ...);
+
+int return_six()
+{
+    return 6;
+}
+
+int add_int(int a, int b)
+{
+    return a+b;
+}
+
+int sub_int(int a, int b)
+{
+    return a-b;
+}
+
+alias int function(int,int) binfn_t;
+
+int binop_int(binfn_t op, int a, int b)
+{
+    return op(a,b);
+}
+
+binfn_t get_binop_int(char op)
+{
+    binfn_t fn;
+    if (op == '+')
+        fn = &add_int;
+    else if (op == '-')
+        fn = &sub_int;
+    return fn;
+}
+
+extern(C) float mul_float(float a, float b)
+{
+    return a * b;
+}
+
+void function_pointers()
+{
+    int function() fn = &return_six;
+    assert(fn() == 6);
+
+    binfn_t binfn = &add_int;
+    assert(binfn(4,1045) == 1049);
+
+    assert(binop_int(binfn, 10,656) == 666);
+
+    binfn = get_binop_int('+');
+    assert(binop_int(binfn, 10,100) == 110);
+    binfn = get_binop_int('-');
+    assert(binop_int(binfn, 10,100) == -90);
+
+    {
+    auto ffn = &mul_float;
+    float ftmp = mul_float(2.5,5);
+    assert(ftmp == 12.5);
+    assert(ftmp > 12.49 && ftmp < 12.51);
+    }
+}
+
+void main()
+{
+    printf("Function pointer test\n");
+    function_pointers();
+    printf("  SUCCESS\n");
+}