# System testing part 4
### test_source_7.txt
```javascript=
procedure if {
if (while != 0) then {
if (procedure != 99) then {
print ProcessStmtNow;
} else {
read read;
}
} else {
if (while == 1) then {
read a;
} else {
print c;
}
}
}
```
### test_queries_7.txt
```javascript=
1 - Parent of read
stmt s; read r;
Select s such that Parent(s, r)
2, 5
5000
2 - Parent of print
stmt s; read r;
Select s such that Parent(s, r)
2, 5
5000
3 - Parent* of read
stmt s; read r;
Select s such that Parent*(s, r)
1, 2, 5
5000
4 - Parent* of print
stmt s; read r;
Select s such that Parent*(s, r)
1, 2, 5
5000
```
### Testing Targets:
Squashing Iteration 1 bugs:
- P/P* could not be differentiated for queries.
- Exception thrown when an If stmt is the only stmt nested inside an If/Else block.
------
### test_source_8.txt
```javascript=
procedure Procedure {
procedure = procedure/procedure;
while (procedure%procedure <= procedure - procedure*procedure){
if (procedure == procedure) {
call procedure;
} else {
call procedur;
}
}
print procedure;
}
procedure procedure {
call procedur;
read procedur;
}
procedure procedur {
if (procedure == procedure) {
procedure = procedure;
} else {
call procedural;
call procedural;
procedur = procedur;
call procedural;
print procedures;
}
}
procedure procedural {
p = r;
o = c;
e = d;
u = r;
a = l;
}
```
```
procedure Procedure {
procedure = procedure/procedure; //1
while (procedure%procedure <= procedure - procedure*procedure){ //2
if (procedure == procedure) { //3
call procedure; //4
} else {
call procedur; //5
}
}
print procedure; //6
}
procedure procedure {
call procedur; //7
read procedur; //8
}
procedure procedur {
if (procedure == procedure) { //9
procedure = procedure; //10
} else {
call procedural; //11
call procedural; //12
procedur = procedur; //13
call procedural; //14
print procedures; //15
}
}
procedure procedural {
p = r; //16
o = c; //17
e = d; //18
u = r; //19
a = l; //20
}
```
### test_queries_8.txt
```javascript=
1 - Parent of call
stmt s; call c;
Select s such that Parent(s, c)
3, 9
5000
2 - Parent of call
stmt s;
Select s such that Parent(s, 12)
9
5000
3 - Parent* of call
stmt s; call c;
Select s such that Parent*(s, c)
2, 3, 9
5000
4 - Parent* of call
stmt s;
Select s such that Parent*(s, 5)
2, 3
5000
5 - Follows of call
stmt s; call c;
Select c such that Follows(s, c)
12, 14
5000
6 - Follows of call
stmt s;
Select s such that Follows(7, s)
8
5000
7 - Follows* of call
stmt s; call c;
Select s such that Follows*(c, s)
8, 12, 13, 14, 15
5000
8 - Follows* of call
stmt s;
Select s such that Follows*(s, 14)
11, 12, 13
5000
9 - Uses of call
call c; variable v;
Select v such that Uses(c, v)
procedure, procedur, procedures, r, c, d, r, l
5000
10 - Uses of call
call c; variable v;
Select v such that Uses(11, v)
r, c, d, r, l
5000
11 - Uses of stmt
stmt s; variable v;
Select s such that Uses(s, v)
1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
5000
12 - UsesP without nesting
variable v;
Select v such that Uses("procedural", v)
r, c, d, r, l
5000
13 - UsesP with nesting
procedure pro; variable v;
Select v such that Uses(pro, v)
procedure, procedur, procedures, r, c, d, r, l
5000
14 - UsesP with nesting
procedure pro;
Select pro such that Uses(pro, "procedures")
Procedure, procedure, procedur
5000
15 - Modifies of call
call c; variable v;
Select v such that Modifies(c, v)
procedur, procedure, p, o, e, u, a
5000
16 - Modifies of call
call c; variable v;
Select v such that Modifies(5, v)
procedur, procedure, p, o, e, u, a
5000
17 - Modifies of stmt
stmt s; variable v;
Select s such that Modifies(s, v)
1, 4, 5, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20
5000
18 - ModifiesP without nesting
procedure procedural; variable v;
Select v such that Modifies("procedural", v)
p, o, e, u, a
5000
19 - ModifiesP
procedure pro; variable v;
Select v such that Modifies(pro, v)
Procedure, procedure, procedur, procedural
5000
20 - ModifiesP with nesting
procedure pro; variable v;
Select pro such that Modifies(pro, "p")
procedural, procedur, procedure, Procedure
5000
21 - pattern partial matching
assign a;
Select a pattern a(_, _"procedure"_)
1, 10
5000
22 - pattern exact matching
assign a;
Select a pattern a("procedure", "procedure")
10
5000
23 - Calls
procedure pro;
Select pro such that Calls(pro, _)
Procedure, procedure, procedur
5000
24 - Calls
procedure pro;
Select pro such that Calls(pro, "procedural")
procedur
5000
25 - Calls
procedure pro;
Select pro such that Calls(_, _)
Procedure, procedure, procedur, procedural
5000
26 - Calls*
procedure pro;
Select pro such that Calls*(pro, "procedural")
Procedure, procedure, procedur
5000
27 - Calls*
procedure pro;
Select pro such that Calls*("procedure", pro)
procedur, procedural
5000
```
### Testing Targets:
#### SOURCE
- multiple procedures and calls
#### QUERIES
- handles basicspa single-procedure-basis queries correctly
- ensures that single-procedure relationships do not cross procedures and still work as expected with multiple procedures and calls
- Uses and Modifies across procedures
- Calls and Calls*