comparison test/dgs.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 d9d5d59873d8
comparison
equal deleted inserted replaced
0:a9e71648e74d 1:c53b6e3fe49a
1 struct S
2 {
3 int i;
4 int square()
5 {
6 return i*i;
7 }
8 int plus(int a)
9 {
10 return i + a;
11 }
12 int minus(int a)
13 {
14 return i - a;
15 }
16 int delegate(int) get(char op)
17 {
18 int delegate(int) rval;
19 if (op == '+')
20 rval = +
21 else if (op == '-')
22 rval = −
23 return rval;
24 }
25 }
26
27 int calldg1(int delegate(int) dg, int i)
28 {
29 return dg(i);
30 }
31
32 void delegate() retdg()
33 {
34 void delegate() dg;
35 return dg;
36 }
37
38 void getretdg()
39 {
40 void delegate() dg;
41 dg = retdg();
42 }
43
44 class C
45 {
46 int i;
47 void m()
48 {
49 i = 42;
50 }
51 }
52
53 void getclassdg()
54 {
55 scope c = new C;
56 void delegate() dg = &c.m;
57 assert(c.i != 42);
58 dg();
59 assert(c.i == 42);
60 }
61
62 void main()
63 {
64 printf("Delegate test\n");
65 S s = S(4);
66
67 auto dg = &s.square;
68 //assert(dg() == 16);
69 //dg();
70
71 /*auto dg1 = &s.plus;
72 assert(dg1(6) == 10);
73
74 auto dg2 = &s.minus;
75 assert(calldg1(dg2,30) == -26);
76
77 auto dg3 = s.get('+');
78 assert(dg3(16) == 20);
79
80 getretdg();
81 getclassdg();*/
82
83 printf(" SUCCESS\n");
84 }