Skip to content

Commit b3c234d

Browse files
committed
C#: Add testcases for checked operators.
1 parent 238a70f commit b3c234d

File tree

4 files changed

+295
-0
lines changed

4 files changed

+295
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
namespace CheckedOperators;
2+
3+
public class Number
4+
{
5+
public int Value { get; }
6+
7+
public Number(int n) => this.Value = n;
8+
9+
public static Number operator checked +(Number n1, Number n2) =>
10+
new Number(checked(n1.Value + n2.Value));
11+
12+
public static Number operator +(Number n1, Number n2) =>
13+
new Number(n1.Value + n2.Value);
14+
15+
public static Number operator checked -(Number n1, Number n2) =>
16+
new Number(checked(n1.Value - n2.Value));
17+
18+
public static Number operator -(Number n1, Number n2) =>
19+
new Number(n1.Value - n2.Value);
20+
21+
public static Number operator checked *(Number n1, Number n2) =>
22+
new Number(checked(n1.Value * n2.Value));
23+
24+
public static Number operator *(Number n1, Number n2) =>
25+
new Number(n1.Value * n2.Value);
26+
27+
public static Number operator checked /(Number n1, Number n2) =>
28+
new Number(checked(n1.Value / n2.Value));
29+
30+
public static Number operator /(Number n1, Number n2) =>
31+
new Number(n1.Value / n2.Value);
32+
33+
public static Number operator checked -(Number n) =>
34+
new Number(checked(-n.Value));
35+
36+
public static Number operator -(Number n) =>
37+
new Number(-n.Value);
38+
39+
public static Number operator checked ++(Number n) =>
40+
new Number(checked(n.Value + 1));
41+
42+
public static Number operator ++(Number n) =>
43+
new Number(n.Value + 1);
44+
45+
public static Number operator checked --(Number n) =>
46+
new Number(checked(n.Value - 1));
47+
48+
public static Number operator --(Number n) =>
49+
new Number(n.Value - 1);
50+
51+
public static explicit operator short(Number n) =>
52+
(short)n.Value;
53+
54+
public static explicit operator checked short(Number n) =>
55+
checked((short)n.Value);
56+
}

csharp/ql/test/library-tests/csharp11/PrintAst.expected

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,221 @@
1+
CheckedOperators.cs:
2+
# 1| [NamespaceDeclaration] namespace ... { ... }
3+
# 3| 1: [Class] Number
4+
# 5| 4: [Property] Value
5+
# 5| -1: [TypeMention] int
6+
# 5| 3: [Getter] get_Value
7+
# 7| 5: [InstanceConstructor] Number
8+
#-----| 2: (Parameters)
9+
# 7| 0: [Parameter] n
10+
# 7| -1: [TypeMention] int
11+
# 7| 4: [AssignExpr] ... = ...
12+
# 7| 0: [PropertyCall] access to property Value
13+
# 7| -1: [ThisAccess] this access
14+
# 7| 1: [ParameterAccess] access to parameter n
15+
# 9| 6: [CheckedAddOperator] checked +
16+
# 9| -1: [TypeMention] Number
17+
#-----| 2: (Parameters)
18+
# 9| 0: [Parameter] n1
19+
# 9| -1: [TypeMention] Number
20+
# 9| 1: [Parameter] n2
21+
# 9| -1: [TypeMention] Number
22+
# 10| 4: [ObjectCreation] object creation of type Number
23+
# 10| -1: [TypeMention] Number
24+
# 10| 0: [CheckedExpr] checked (...)
25+
# 10| 0: [AddExpr] ... + ...
26+
# 10| 0: [PropertyCall] access to property Value
27+
# 10| -1: [ParameterAccess] access to parameter n1
28+
# 10| 1: [PropertyCall] access to property Value
29+
# 10| -1: [ParameterAccess] access to parameter n2
30+
# 12| 7: [AddOperator] +
31+
# 12| -1: [TypeMention] Number
32+
#-----| 2: (Parameters)
33+
# 12| 0: [Parameter] n1
34+
# 12| -1: [TypeMention] Number
35+
# 12| 1: [Parameter] n2
36+
# 12| -1: [TypeMention] Number
37+
# 13| 4: [ObjectCreation] object creation of type Number
38+
# 13| -1: [TypeMention] Number
39+
# 13| 0: [AddExpr] ... + ...
40+
# 13| 0: [PropertyCall] access to property Value
41+
# 13| -1: [ParameterAccess] access to parameter n1
42+
# 13| 1: [PropertyCall] access to property Value
43+
# 13| -1: [ParameterAccess] access to parameter n2
44+
# 15| 8: [CheckedSubOperator] checked -
45+
# 15| -1: [TypeMention] Number
46+
#-----| 2: (Parameters)
47+
# 15| 0: [Parameter] n1
48+
# 15| -1: [TypeMention] Number
49+
# 15| 1: [Parameter] n2
50+
# 15| -1: [TypeMention] Number
51+
# 16| 4: [ObjectCreation] object creation of type Number
52+
# 16| -1: [TypeMention] Number
53+
# 16| 0: [CheckedExpr] checked (...)
54+
# 16| 0: [SubExpr] ... - ...
55+
# 16| 0: [PropertyCall] access to property Value
56+
# 16| -1: [ParameterAccess] access to parameter n1
57+
# 16| 1: [PropertyCall] access to property Value
58+
# 16| -1: [ParameterAccess] access to parameter n2
59+
# 18| 9: [SubOperator] -
60+
# 18| -1: [TypeMention] Number
61+
#-----| 2: (Parameters)
62+
# 18| 0: [Parameter] n1
63+
# 18| -1: [TypeMention] Number
64+
# 18| 1: [Parameter] n2
65+
# 18| -1: [TypeMention] Number
66+
# 19| 4: [ObjectCreation] object creation of type Number
67+
# 19| -1: [TypeMention] Number
68+
# 19| 0: [SubExpr] ... - ...
69+
# 19| 0: [PropertyCall] access to property Value
70+
# 19| -1: [ParameterAccess] access to parameter n1
71+
# 19| 1: [PropertyCall] access to property Value
72+
# 19| -1: [ParameterAccess] access to parameter n2
73+
# 21| 10: [CheckedMulOperator] checked *
74+
# 21| -1: [TypeMention] Number
75+
#-----| 2: (Parameters)
76+
# 21| 0: [Parameter] n1
77+
# 21| -1: [TypeMention] Number
78+
# 21| 1: [Parameter] n2
79+
# 21| -1: [TypeMention] Number
80+
# 22| 4: [ObjectCreation] object creation of type Number
81+
# 22| -1: [TypeMention] Number
82+
# 22| 0: [CheckedExpr] checked (...)
83+
# 22| 0: [MulExpr] ... * ...
84+
# 22| 0: [PropertyCall] access to property Value
85+
# 22| -1: [ParameterAccess] access to parameter n1
86+
# 22| 1: [PropertyCall] access to property Value
87+
# 22| -1: [ParameterAccess] access to parameter n2
88+
# 24| 11: [MulOperator] *
89+
# 24| -1: [TypeMention] Number
90+
#-----| 2: (Parameters)
91+
# 24| 0: [Parameter] n1
92+
# 24| -1: [TypeMention] Number
93+
# 24| 1: [Parameter] n2
94+
# 24| -1: [TypeMention] Number
95+
# 25| 4: [ObjectCreation] object creation of type Number
96+
# 25| -1: [TypeMention] Number
97+
# 25| 0: [MulExpr] ... * ...
98+
# 25| 0: [PropertyCall] access to property Value
99+
# 25| -1: [ParameterAccess] access to parameter n1
100+
# 25| 1: [PropertyCall] access to property Value
101+
# 25| -1: [ParameterAccess] access to parameter n2
102+
# 27| 12: [CheckedDivOperator] checked /
103+
# 27| -1: [TypeMention] Number
104+
#-----| 2: (Parameters)
105+
# 27| 0: [Parameter] n1
106+
# 27| -1: [TypeMention] Number
107+
# 27| 1: [Parameter] n2
108+
# 27| -1: [TypeMention] Number
109+
# 28| 4: [ObjectCreation] object creation of type Number
110+
# 28| -1: [TypeMention] Number
111+
# 28| 0: [CheckedExpr] checked (...)
112+
# 28| 0: [DivExpr] ... / ...
113+
# 28| 0: [PropertyCall] access to property Value
114+
# 28| -1: [ParameterAccess] access to parameter n1
115+
# 28| 1: [PropertyCall] access to property Value
116+
# 28| -1: [ParameterAccess] access to parameter n2
117+
# 30| 13: [DivOperator] /
118+
# 30| -1: [TypeMention] Number
119+
#-----| 2: (Parameters)
120+
# 30| 0: [Parameter] n1
121+
# 30| -1: [TypeMention] Number
122+
# 30| 1: [Parameter] n2
123+
# 30| -1: [TypeMention] Number
124+
# 31| 4: [ObjectCreation] object creation of type Number
125+
# 31| -1: [TypeMention] Number
126+
# 31| 0: [DivExpr] ... / ...
127+
# 31| 0: [PropertyCall] access to property Value
128+
# 31| -1: [ParameterAccess] access to parameter n1
129+
# 31| 1: [PropertyCall] access to property Value
130+
# 31| -1: [ParameterAccess] access to parameter n2
131+
# 33| 14: [CheckedMinusOperator] checked -
132+
# 33| -1: [TypeMention] Number
133+
#-----| 2: (Parameters)
134+
# 33| 0: [Parameter] n
135+
# 33| -1: [TypeMention] Number
136+
# 34| 4: [ObjectCreation] object creation of type Number
137+
# 34| -1: [TypeMention] Number
138+
# 34| 0: [CheckedExpr] checked (...)
139+
# 34| 0: [UnaryMinusExpr] -...
140+
# 34| 0: [PropertyCall] access to property Value
141+
# 34| -1: [ParameterAccess] access to parameter n
142+
# 36| 15: [MinusOperator] -
143+
# 36| -1: [TypeMention] Number
144+
#-----| 2: (Parameters)
145+
# 36| 0: [Parameter] n
146+
# 36| -1: [TypeMention] Number
147+
# 37| 4: [ObjectCreation] object creation of type Number
148+
# 37| -1: [TypeMention] Number
149+
# 37| 0: [UnaryMinusExpr] -...
150+
# 37| 0: [PropertyCall] access to property Value
151+
# 37| -1: [ParameterAccess] access to parameter n
152+
# 39| 16: [CheckedIncrementOperator] checked ++
153+
# 39| -1: [TypeMention] Number
154+
#-----| 2: (Parameters)
155+
# 39| 0: [Parameter] n
156+
# 39| -1: [TypeMention] Number
157+
# 40| 4: [ObjectCreation] object creation of type Number
158+
# 40| -1: [TypeMention] Number
159+
# 40| 0: [CheckedExpr] checked (...)
160+
# 40| 0: [AddExpr] ... + ...
161+
# 40| 0: [PropertyCall] access to property Value
162+
# 40| -1: [ParameterAccess] access to parameter n
163+
# 40| 1: [IntLiteral] 1
164+
# 42| 17: [IncrementOperator] ++
165+
# 42| -1: [TypeMention] Number
166+
#-----| 2: (Parameters)
167+
# 42| 0: [Parameter] n
168+
# 42| -1: [TypeMention] Number
169+
# 43| 4: [ObjectCreation] object creation of type Number
170+
# 43| -1: [TypeMention] Number
171+
# 43| 0: [AddExpr] ... + ...
172+
# 43| 0: [PropertyCall] access to property Value
173+
# 43| -1: [ParameterAccess] access to parameter n
174+
# 43| 1: [IntLiteral] 1
175+
# 45| 18: [CheckedDecrementOperator] checked --
176+
# 45| -1: [TypeMention] Number
177+
#-----| 2: (Parameters)
178+
# 45| 0: [Parameter] n
179+
# 45| -1: [TypeMention] Number
180+
# 46| 4: [ObjectCreation] object creation of type Number
181+
# 46| -1: [TypeMention] Number
182+
# 46| 0: [CheckedExpr] checked (...)
183+
# 46| 0: [SubExpr] ... - ...
184+
# 46| 0: [PropertyCall] access to property Value
185+
# 46| -1: [ParameterAccess] access to parameter n
186+
# 46| 1: [IntLiteral] 1
187+
# 48| 19: [DecrementOperator] --
188+
# 48| -1: [TypeMention] Number
189+
#-----| 2: (Parameters)
190+
# 48| 0: [Parameter] n
191+
# 48| -1: [TypeMention] Number
192+
# 49| 4: [ObjectCreation] object creation of type Number
193+
# 49| -1: [TypeMention] Number
194+
# 49| 0: [SubExpr] ... - ...
195+
# 49| 0: [PropertyCall] access to property Value
196+
# 49| -1: [ParameterAccess] access to parameter n
197+
# 49| 1: [IntLiteral] 1
198+
# 51| 20: [ExplicitConversionOperator] explicit conversion
199+
# 51| -1: [TypeMention] short
200+
#-----| 2: (Parameters)
201+
# 51| 0: [Parameter] n
202+
# 51| -1: [TypeMention] Number
203+
# 52| 4: [CastExpr] (...) ...
204+
# 52| 0: [TypeAccess] access to type Int16
205+
# 52| 0: [TypeMention] short
206+
# 52| 1: [PropertyCall] access to property Value
207+
# 52| -1: [ParameterAccess] access to parameter n
208+
# 54| 21: [CheckedExplicitConversionOperator] checked explicit conversion
209+
# 54| -1: [TypeMention] short
210+
#-----| 2: (Parameters)
211+
# 54| 0: [Parameter] n
212+
# 54| -1: [TypeMention] Number
213+
# 55| 4: [CheckedExpr] checked (...)
214+
# 55| 0: [CastExpr] (...) ...
215+
# 55| 0: [TypeAccess] access to type Int16
216+
# 55| 0: [TypeMention] short
217+
# 55| 1: [PropertyCall] access to property Value
218+
# 55| -1: [ParameterAccess] access to parameter n
1219
GenericAttribute.cs:
2220
# 3| [GenericAssemblyAttribute] [assembly: MyGeneric<Int32>(...)]
3221
# 3| 0: [TypeMention] MyGenericAttribute<int>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
| CheckedOperators.cs:9:43:9:43 | checked + | op_CheckedAddition | CheckedAddOperator |
2+
| CheckedOperators.cs:12:35:12:35 | + | op_Addition | AddOperator |
3+
| CheckedOperators.cs:15:43:15:43 | checked - | op_CheckedSubtraction | CheckedSubOperator |
4+
| CheckedOperators.cs:18:35:18:35 | - | op_Subtraction | SubOperator |
5+
| CheckedOperators.cs:21:43:21:43 | checked * | op_CheckedMultiply | CheckedMulOperator |
6+
| CheckedOperators.cs:24:35:24:35 | * | op_Multiply | MulOperator |
7+
| CheckedOperators.cs:27:43:27:43 | checked / | op_CheckedDivision | CheckedDivOperator |
8+
| CheckedOperators.cs:30:35:30:35 | / | op_Division | DivOperator |
9+
| CheckedOperators.cs:33:43:33:43 | checked - | op_CheckedUnaryNegation | CheckedMinusOperator |
10+
| CheckedOperators.cs:36:35:36:35 | - | op_UnaryNegation | MinusOperator |
11+
| CheckedOperators.cs:39:43:39:44 | checked ++ | op_CheckedIncrement | CheckedIncrementOperator |
12+
| CheckedOperators.cs:42:35:42:36 | ++ | op_Increment | IncrementOperator |
13+
| CheckedOperators.cs:45:43:45:44 | checked -- | op_CheckedDecrement | CheckedDecrementOperator |
14+
| CheckedOperators.cs:48:35:48:36 | -- | op_Decrement | DecrementOperator |
15+
| CheckedOperators.cs:51:28:51:35 | explicit conversion | op_Explicit | ExplicitConversionOperator |
16+
| CheckedOperators.cs:54:28:54:35 | checked explicit conversion | op_CheckedExplicit | CheckedExplicitConversionOperator |
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import csharp
2+
3+
from Operator o
4+
where o.getFile().getStem() = "CheckedOperators"
5+
select o, o.getFunctionName(), o.getAPrimaryQlClass()

0 commit comments

Comments
 (0)