1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
using System;
struct PointF {
public float fa, fb;
public PointF (float a, float b)
{
fa = a;
fb = b;
Console.WriteLine ("PointF created {0} and {1}", fa, fb);
}
}
struct Point {
int ia, ib;
public static implicit operator PointF (Point pt)
{
return new PointF (pt.ia, pt.ib);
}
public Point (int a, int b)
{
Console.WriteLine ("Initialized with {0} and {1}", a, b);
ia = a;
ib = b;
}
}
class X {
static bool ok = false;
PointF field;
static bool Method (PointF f)
{
Console.WriteLine ("Method with PointF arg: {0} {1}", f.fa, f.fb);
if (f.fa != 100 || f.fb != 200)
return false;
return true;
}
static bool Call_constructor_and_implicit ()
{
ok = false;
return Method (new Point (100, 200));
}
static bool Init_with_implicit_conv ()
{
PointF p = new Point (1, 100);
if (p.fa == 1 && p.fb == 100)
return true;
return false;
}
static bool Init_ValueType ()
{
Point p = new Point (100, 200);
return Method (p);
}
static bool InstanceAssignTest ()
{
X x = new X ();
x.field = new Point (100, 200);
if (x.field.fa != 100 || x.field.fb != 200)
return false;
return true;
}
static int T ()
{
if (!Init_with_implicit_conv ())
return 100;
if (!Call_constructor_and_implicit ())
return 101;
if (!Init_ValueType ())
return 102;
if (!InstanceAssignTest ())
return 103;
return 0;
}
public static int Main ()
{
int t = T ();
if (t != 0)
Console.WriteLine ("Failed on test: " + t);
Console.WriteLine ("Succeed");
return t;
}
}
|