Mercurial > projects > ldc
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 } |