Skip to content

Commit 3e14f44

Browse files
committed
Java: Add test for range analysis
1 parent 0fe5cf6 commit 3e14f44

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
public class A {
2+
int f1(int x, int y) {
3+
if (x < 500) {
4+
if (x > 400) {
5+
return x;
6+
}
7+
8+
if (y == x && y > 300) {
9+
return x + y;
10+
}
11+
12+
if (x > 500) {
13+
return x;
14+
}
15+
}
16+
17+
return 0;
18+
}
19+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
| A.java:3:9:3:9 | x | SsaBound | 0 | lower | NoReason |
2+
| A.java:3:9:3:9 | x | SsaBound | 0 | upper | NoReason |
3+
| A.java:3:13:3:15 | 500 | ZeroBound | 500 | lower | NoReason |
4+
| A.java:3:13:3:15 | 500 | ZeroBound | 500 | upper | NoReason |
5+
| A.java:4:11:4:11 | x | SsaBound | 0 | lower | NoReason |
6+
| A.java:4:11:4:11 | x | SsaBound | 0 | upper | NoReason |
7+
| A.java:4:11:4:11 | x | ZeroBound | 499 | upper | ... < ... |
8+
| A.java:4:15:4:17 | 400 | ZeroBound | 400 | lower | NoReason |
9+
| A.java:4:15:4:17 | 400 | ZeroBound | 400 | upper | NoReason |
10+
| A.java:5:16:5:16 | x | SsaBound | 0 | lower | NoReason |
11+
| A.java:5:16:5:16 | x | SsaBound | 0 | upper | NoReason |
12+
| A.java:5:16:5:16 | x | ZeroBound | 401 | lower | ... > ... |
13+
| A.java:5:16:5:16 | x | ZeroBound | 499 | upper | ... < ... |
14+
| A.java:8:11:8:11 | y | SsaBound | 0 | lower | NoReason |
15+
| A.java:8:11:8:11 | y | SsaBound | 0 | upper | NoReason |
16+
| A.java:8:16:8:16 | x | SsaBound | 0 | lower | NoReason |
17+
| A.java:8:16:8:16 | x | SsaBound | 0 | upper | NoReason |
18+
| A.java:8:16:8:16 | x | ZeroBound | 400 | upper | ... > ... |
19+
| A.java:8:21:8:21 | y | SsaBound | 0 | lower | ... == ... |
20+
| A.java:8:21:8:21 | y | SsaBound | 0 | lower | NoReason |
21+
| A.java:8:21:8:21 | y | SsaBound | 0 | upper | ... == ... |
22+
| A.java:8:21:8:21 | y | SsaBound | 0 | upper | NoReason |
23+
| A.java:8:21:8:21 | y | ZeroBound | 400 | upper | ... == ... |
24+
| A.java:8:25:8:27 | 300 | ZeroBound | 300 | lower | NoReason |
25+
| A.java:8:25:8:27 | 300 | ZeroBound | 300 | upper | NoReason |
26+
| A.java:9:16:9:16 | x | SsaBound | 0 | lower | ... == ... |
27+
| A.java:9:16:9:16 | x | SsaBound | 0 | lower | NoReason |
28+
| A.java:9:16:9:16 | x | SsaBound | 0 | upper | ... == ... |
29+
| A.java:9:16:9:16 | x | SsaBound | 0 | upper | NoReason |
30+
| A.java:9:16:9:16 | x | ZeroBound | 400 | upper | ... > ... |
31+
| A.java:9:16:9:20 | ... + ... | SsaBound | 1 | lower | ... == ... |
32+
| A.java:9:16:9:20 | ... + ... | SsaBound | 1 | lower | NoReason |
33+
| A.java:9:20:9:20 | y | SsaBound | 0 | lower | ... == ... |
34+
| A.java:9:20:9:20 | y | SsaBound | 0 | lower | NoReason |
35+
| A.java:9:20:9:20 | y | SsaBound | 0 | upper | ... == ... |
36+
| A.java:9:20:9:20 | y | SsaBound | 0 | upper | NoReason |
37+
| A.java:9:20:9:20 | y | ZeroBound | 301 | lower | ... > ... |
38+
| A.java:9:20:9:20 | y | ZeroBound | 400 | upper | ... == ... |
39+
| A.java:12:11:12:11 | x | SsaBound | 0 | lower | NoReason |
40+
| A.java:12:11:12:11 | x | SsaBound | 0 | upper | NoReason |
41+
| A.java:12:11:12:11 | x | ZeroBound | 400 | upper | ... > ... |
42+
| A.java:12:15:12:17 | 500 | ZeroBound | 500 | lower | NoReason |
43+
| A.java:12:15:12:17 | 500 | ZeroBound | 500 | upper | NoReason |
44+
| A.java:13:16:13:16 | x | SsaBound | 0 | lower | NoReason |
45+
| A.java:13:16:13:16 | x | SsaBound | 0 | upper | NoReason |
46+
| A.java:13:16:13:16 | x | ZeroBound | 400 | upper | ... > ... |
47+
| A.java:13:16:13:16 | x | ZeroBound | 501 | lower | ... > ... |
48+
| A.java:17:12:17:12 | 0 | ZeroBound | 0 | lower | NoReason |
49+
| A.java:17:12:17:12 | 0 | ZeroBound | 0 | upper | NoReason |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import java
2+
import semmle.code.java.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, Reason reason
11+
where bounded(e, b, delta, upper, reason)
12+
select e, b.getAQlClass(), delta, getDirectionString(upper), reason

0 commit comments

Comments
 (0)