Skip to content

Commit f6be59d

Browse files
committed
C#: Add test for range analysis
1 parent d58a325 commit f6be59d

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
3+
class RangeAnalysis
4+
{
5+
int f1(int x, int y)
6+
{
7+
if (x < 500)
8+
{
9+
if (x > 400) // x <= 499
10+
{
11+
return x; // 401 <= x <= 499
12+
}
13+
14+
if (y == x && y > 300) // x <= 400, y <= 400
15+
{
16+
return x + y; // x <= 400, 301 <= y <= 400, missing: 301 <= x
17+
}
18+
19+
if (x > 500) // x <= 400
20+
{
21+
return x; // x <= 400, x >= 501, not possible
22+
}
23+
}
24+
25+
return 0;
26+
}
27+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
| RangeAnalysis.cs:7:9:7:9 | access to parameter x | 0 | lower |
2+
| RangeAnalysis.cs:7:9:7:9 | access to parameter x | 0 | upper |
3+
| RangeAnalysis.cs:7:13:7:15 | 500 | 500 | lower |
4+
| RangeAnalysis.cs:7:13:7:15 | 500 | 500 | upper |
5+
| RangeAnalysis.cs:9:11:9:11 | access to parameter x | 0 | lower |
6+
| RangeAnalysis.cs:9:11:9:11 | access to parameter x | 0 | upper |
7+
| RangeAnalysis.cs:9:11:9:11 | access to parameter x | 499 | upper |
8+
| RangeAnalysis.cs:9:15:9:17 | 400 | 400 | lower |
9+
| RangeAnalysis.cs:9:15:9:17 | 400 | 400 | upper |
10+
| RangeAnalysis.cs:11:16:11:16 | access to parameter x | 0 | lower |
11+
| RangeAnalysis.cs:11:16:11:16 | access to parameter x | 0 | upper |
12+
| RangeAnalysis.cs:11:16:11:16 | access to parameter x | 401 | lower |
13+
| RangeAnalysis.cs:11:16:11:16 | access to parameter x | 499 | upper |
14+
| RangeAnalysis.cs:14:11:14:11 | access to parameter y | 0 | lower |
15+
| RangeAnalysis.cs:14:11:14:11 | access to parameter y | 0 | upper |
16+
| RangeAnalysis.cs:14:16:14:16 | access to parameter x | 0 | lower |
17+
| RangeAnalysis.cs:14:16:14:16 | access to parameter x | 0 | upper |
18+
| RangeAnalysis.cs:14:16:14:16 | access to parameter x | 400 | upper |
19+
| RangeAnalysis.cs:14:21:14:21 | access to parameter y | 0 | lower |
20+
| RangeAnalysis.cs:14:21:14:21 | access to parameter y | 0 | upper |
21+
| RangeAnalysis.cs:14:21:14:21 | access to parameter y | 400 | upper |
22+
| RangeAnalysis.cs:14:25:14:27 | 300 | 300 | lower |
23+
| RangeAnalysis.cs:14:25:14:27 | 300 | 300 | upper |
24+
| RangeAnalysis.cs:16:16:16:16 | access to parameter x | 0 | lower |
25+
| RangeAnalysis.cs:16:16:16:16 | access to parameter x | 0 | upper |
26+
| RangeAnalysis.cs:16:16:16:16 | access to parameter x | 400 | upper |
27+
| RangeAnalysis.cs:16:16:16:20 | ... + ... | 1 | lower |
28+
| RangeAnalysis.cs:16:20:16:20 | access to parameter y | 0 | lower |
29+
| RangeAnalysis.cs:16:20:16:20 | access to parameter y | 0 | upper |
30+
| RangeAnalysis.cs:16:20:16:20 | access to parameter y | 301 | lower |
31+
| RangeAnalysis.cs:16:20:16:20 | access to parameter y | 400 | upper |
32+
| RangeAnalysis.cs:19:11:19:11 | access to parameter x | 0 | lower |
33+
| RangeAnalysis.cs:19:11:19:11 | access to parameter x | 0 | upper |
34+
| RangeAnalysis.cs:19:11:19:11 | access to parameter x | 400 | upper |
35+
| RangeAnalysis.cs:19:15:19:17 | 500 | 500 | lower |
36+
| RangeAnalysis.cs:19:15:19:17 | 500 | 500 | upper |
37+
| RangeAnalysis.cs:21:16:21:16 | access to parameter x | 0 | lower |
38+
| RangeAnalysis.cs:21:16:21:16 | access to parameter x | 0 | upper |
39+
| RangeAnalysis.cs:21:16:21:16 | access to parameter x | 400 | upper |
40+
| RangeAnalysis.cs:21:16:21:16 | access to parameter x | 501 | lower |
41+
| RangeAnalysis.cs:25:12:25:12 | 0 | 0 | lower |
42+
| RangeAnalysis.cs:25:12:25:12 | 0 | 0 | upper |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import csharp
2+
import semmle.code.csharp.dataflow.RangeAnalysis
3+
4+
private string getDirectionString(boolean d) {
5+
result = "upper" and d = true
6+
or
7+
result = "lower" and d = false
8+
}
9+
10+
from Expr e, Bound b, int delta, boolean upper
11+
where bounded(e, b, delta, upper)
12+
select e, delta, getDirectionString(upper)

0 commit comments

Comments
 (0)