comparison test/funcptr.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children 027b8d8b71ec
comparison
equal deleted inserted replaced
0:a9e71648e74d 1:c53b6e3fe49a
1 int return_six()
2 {
3 return 6;
4 }
5
6 int add_int(int a, int b)
7 {
8 return a+b;
9 }
10
11 int sub_int(int a, int b)
12 {
13 return a-b;
14 }
15
16 alias int function(int,int) binfn_t;
17
18 int binop_int(binfn_t op, int a, int b)
19 {
20 return op(a,b);
21 }
22
23 binfn_t get_binop_int(char op)
24 {
25 binfn_t fn;
26 if (op == '+')
27 fn = &add_int;
28 else if (op == '-')
29 fn = &sub_int;
30 return fn;
31 }
32
33 extern(C) float mul_float(float a, float b)
34 {
35 return a * b;
36 }
37
38 void function_pointers()
39 {
40 int function() fn = &return_six;
41 assert(fn() == 6);
42
43 binfn_t binfn = &add_int;
44 assert(binfn(4,1045) == 1049);
45
46 assert(binop_int(binfn, 10,656) == 666);
47
48 binfn = get_binop_int('+');
49 assert(binop_int(binfn, 10,100) == 110);
50 binfn = get_binop_int('-');
51 assert(binop_int(binfn, 10,100) == -90);
52
53 {
54 auto ffn = &mul_float;
55 float ftmp = mul_float(2.5,5);
56 assert(ftmp == 12.5);
57 assert(ftmp > 12.49 && ftmp < 12.51);
58 }
59 }
60
61 void main()
62 {
63 printf("Function pointer test\n");
64 function_pointers();
65 printf(" SUCCESS\n");
66 }