rem matrix D, matrix Dm, matrix Dp, indexarray Tuc, indexarray Tuo, 
rem arrayi IncludeT, arrayi ExcludeT, arrayi B, arrayi B0, matrix L, matrix L0, 
rem string WriteLog = on/off, string EnforceLive = on/off

echo ---------------------------------------------------------------------------
echo -----                    Deadlock Prevention Tests                    -----
echo ---------------------------------------------------------------------------
echo Deadlock prevention tests.
echo Problem 1.
echo Example 5.2 from [Iordache, 2000]
echo Answer should be:
echo L = [ 2 2 1 ]
echo b = [ 2 ]
Dp 3 5
0 1 0 1 0
0 0 1 0 1
1 0 0 0 0

Dm 3 5
1 0 0 0 1
1 0 0 1 0
0 2 2 0 0
done

echo Problem 2.
echo A Petri net in which deadlock cannot be prevented.
Dp 3 3
0 1 0
0 0 1
1 0 0

Dm 3 3 
1 0 0
1 0 0
0 1 1
done

echo Problem 3.
echo A repetetive Petri net with no smaller siphons.
Dm 3 3
0 1 0
1 0 0
0 0 1

Dp 3 3 
1 0 0
0 0 1
0 1 0
done

echo Problem 4.
echo A similar net that is not strongly connected, i.e. the union of two
echo distinct repetitive Petri nets.
Dm 6 6
0 1 0 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 1 0
0 0 0 1 0 0
0 0 0 0 0 1

Dp 6 6
1 0 0 0 0 0
0 0 1 0 0 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 1
0 0 0 0 1 0
done

echo Problem 5.
echo Example 5.1 from [Iordache, 2000].
echo Answer should be:
echo L = [ 1 1 0 0 ]
echo ....[ 0 0 1 1 ]
echo ....[ 1 1 1 1 ]
echo B = [ 1 ]
echo ....[ 1 ]
echo ....[ 3 ]
Dm 4 5
1 0 1 0 1
0 0 0 1 0
0 1 0 0 1
1 0 1 0 0

Dp 4 5
0 0 0 1 0
0 0 2 0 1
3 0 0 0 0
0 1 0 0 0
done

echo Problem 6.
echo The same data from problem 5 but with nonzero initial constraints.
echo Answer should have rows:
echo L = [ 1 1 0 0 ]   B = [ 1 ]
echo ....[ 0 0 1 1 ]       [ 1 ]
echo ....[ 1 1 1 1 ]       [ 3 ]
Dm 4 5
1 0 1 0 1
0 0 0 1 0
0 1 0 0 1
1 0 1 0 0

Dp 4 5
0 0 0 1 0
0 0 2 0 1
3 0 0 0 0
0 1 0 0 0

L 1 4
1 1 1 1
B 1
3
done

echo Problem 7.
echo This is an example from K. Lautenback, et al, "The Linear Algebra of
echo Deadlock Avoidance - A Petri Net Approach", technical report at the
echo University of Koblenz, Institute for Computer Science, 1996.
Dm 4 4
3 0 5 0
0 1 0 0
0 0 1 0
0 0 0 1
Dp 4 4
0 2 0 6
1 0 0 0
0 1 0 0
0 0 1 0
done

echo Problem 8.
echo Example 5.3 in [Iordache, 2000]. Transition t1 is unobservable.
echo Answer should be:
echo L  = [ 2 0 1 ]  B  = [ 1 ]
echo .....[ 0 2 1 ]       [ 1 ]
echo L0 = [ 2 2 2 ]  B0 = [ 3 ]
D 3 3
-1   1   0
-1   0   1
 2  -1  -1

Tuo 1 0
done

echo ---------------------------------------------------------------------------
echo -----                    Liveness Enforcement Tests                   -----
echo ---------------------------------------------------------------------------
echo Problem 0. (from dpdem4.m)
D 15 11
-1  0  0  0  1  0  1  0  0  0  0
 0  0  0  0  0  1 -1  0  0  0  0
 0  1 -1  0  0  0  0  0  0  0  0
 0  0  0  0  0  0  0  0  1 -1  0
 0  0  1 -1  0  0  0  0  0  0  0
 0  0  0  0 -1  0  0  0  0  0  0
 1 -1  0  0  0 -1  0  0  0  0  0
 0  0  0  0  0  0  0  1 -1  0  0
 0  0  0  0  0  0  0  0  0  0 -1
 0  0  0  0  0  0  0 -1  0  0  1
-1  1  0  0  0  1  0  0  0  0  0
 0 -1  1  0  0  0  0  0  0 -1  1
 0  0 -1  1  0  0  0  0 -1  1  0
 0  0  0 -1  1  0  0 -1  1  0  0
 0  0  0  0  0 -1  1  0  0  0  0
EnforceLive on
done

echo Problem 1. Example 5.2 from the ISIS report #4 of 2000.
echo The answer should be:
echo L = [ 2 2 1 ]   B = [ 2 ]
Dp 3 5
0 1 0 1 0
0 0 1 0 1
1 0 0 0 0
Dm 3 5
1 0 0 0 1
1 0 0 1 0
0 2 2 0 0
EnforceLive on
done

echo Problem 2. A Petri net in which deadlock cannot be prevented.
Dp 3 3
0 1 0
0 0 1
1 0 0
Dm 3 3
1 0 0
1 0 0
0 1 1
EnforceLive on
done

echo Problem 3. A repetitive net.
Dm 3 3
0 1 0
1 0 0
0 0 1
Dp 3 3
1 0 0
0 0 1
0 1 0
EnforceLive on
done

echo Problem 4. The union of two distinct repetetive Petri nets.
Dm 6 6
0 1 0 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 1 0
0 0 0 1 0 0
0 0 0 0 0 1
Dp 6 6
1 0 0 0 0 0
0 0 1 0 0 0
0 1 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 1
0 0 0 0 1 0
EnforceLive on
done

echo Problem 5. DAta from Example 5.1 from ISIS report #3 of 2000.
Dm 4 5
1 0 1 0 1
0 0 0 1 0
0 1 0 0 1
1 0 1 0 0
Dp 4 5
0 0 0 1 0
0 0 2 0 1
3 0 0 0 0
0 1 0 0 0
EnforceLive on
done

echo Problem 6. The same as Problem 5 (Data from Example 5.1 from ISIS report #3 
echo of 2000.) except with an initial constraint.
Dm 4 5
1 0 1 0 1
0 0 0 1 0
0 1 0 0 1
1 0 1 0 0
Dp 4 5
0 0 0 1 0
0 0 2 0 1
3 0 0 0 0
0 1 0 0 0
L 1 4
1 1 1 1
B 1 3
EnforceLive on
done

echo Problem 7. Example 5.3 from ISIS report #4 of 2000.
echo Has an unobservable transition.
echo Answer should be:
echo L  = [ 2 0 1 ]  B  = [ 1 ]
echo .....[ 0 2 1 ]       [ 1 ]
echo L0 = [ 2 2 2 ]  B0 = [ 3 ]
D 3 3
-1  1  0
-1  0  1
 2 -1 -1
Tuo 1 0
EnforceLive on
done

echo Problem 8. Example 5.4 from ISIS report #4 of 2000.
echo Has initial constraints.
echo The right answer should be:
echo L  = [  1  0  1  1  1  ]   B  = [  1  ]
echo .....[  0  1  1  1  1  ]        [  1  ]
echo L0 = [ -1 -1 -1 -1 -1  ]   B0 = [ -1  ]
D 5 6
-1  1  0  0  0  0
-1  0  1  0  0  0
 2 -1 -1 -1  0  0
 0  0  0  1  1 -1
 0  0  0  0 -1  1
L0 1 5
-1 -1 -1 -1 -1
B0 1 -1
EnforceLive on
done
quit
