Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / generic-box.2.cs
1 using System.Collections.Generic;
2 using UnboxTest;
3 using BoxTest;
4
5 public class ClassA {}
6
7 public struct GenStruct<T> {
8         T t;
9         int field;
10
11         public GenStruct (T _t, int _field) {
12                 t = _t;
13                 field = _field;
14         }
15
16         public bool isEqualTo (GenStruct<T> gs) {
17                 EqualityComparer<T> comp = EqualityComparer<T>.Default;
18
19                 return comp.Equals(gs.t, t) && gs.field == field;
20         }
21 }
22
23 public class GenClass<T> {
24         public object boxStruct (GenStruct<T> gs) {
25                 return (object)gs;
26         }
27
28         /*
29         public object boxNullableStruct (GenStruct<T>? gs) {
30                 return (object)gs;
31         }
32         */
33 }
34
35 public class main {
36         public static int Main () {
37                 GenClass<int> gci = new GenClass<int> ();
38                 GenStruct<int> gsi = new GenStruct<int> (123, 456);
39
40                 if (!gsi.isEqualTo ((GenStruct<int>)gci.boxStruct (gsi)))
41                         return 1;
42                 /*
43                 if (!gsi.isEqualTo ((GenStruct<int>)gci.boxNullableStruct (gsi)))
44                         return 1;
45                 if (gci.boxNullableStruct (null) != null)
46                         return 1;
47                 */
48
49                 GenClass<ClassA> gca = new GenClass<ClassA> ();
50                 GenStruct<ClassA> gsa = new GenStruct<ClassA> (new ClassA (), 789);
51
52                 if (!gsa.isEqualTo ((GenStruct<ClassA>)gca.boxStruct (gsa)))
53                         return 1;
54                 /*
55                 if (!gsa.isEqualTo ((GenStruct<ClassA>)gca.boxNullableStruct (gsa)))
56                         return 1;
57                 if (gca.boxNullableStruct (null) != null)
58                         return 1;
59                 */
60
61                 UnboxerStruct<ClassA> us;
62                 Boxer<ClassA> b = new Boxer<ClassA> ();
63
64                 us.field = 123;
65
66                 if (((UnboxerStruct<ClassA>?)b.boxNullable (us)).Value.field != 123)
67                         return 1;
68                 if (b.boxNullable (null) != null)
69                         return 1;
70
71                 return 0;
72         }
73 }