TorXakis Adder Example¶
The directory examps/adder contains a TorXakis MBT example of a simple
arithmetic adder. The adder adds and subtracts two integers.
There are multiple specification files which present various approaches for testing Adder:
Adder.txs
AdderStAut.txs
AdderPurposes.txs
AdderReplay.txs
ReplayProc.txs
MAdder.txs
Communication between TorXakis and SUT (Adder) occurs via sockets, where the SUT acts as the server-side.
Inputs:
Plus(<n>,<m>)
Minus(<n>,<m>)
Output:
<n+m> or <n-m>, respectively
Prerequisites¶
Java installed: http://java.com
SUTs¶
Adder.java¶
Java SUT with a single adder, communicating as server via stream-mode socket, with as argument.
Compile and execute SUT:
$ javac Adder.java # compile Adder
$ java Adder <portnr> # start Adder
Test SUT from another terminal window:
$ telnet localhost <portnr>
Plus(25,17)
42
...
NOTE: For Windows perhaps better with putty instead of telnet.
Models¶
Adder.txs¶
Includes
two models
Adder
Adder3
two SUT representations
Sut
Sut3
one simulator specification (Sim)
1. Adder Model and Sut Connection¶
TorXakis model for a single Adder, communicating via localhost:7890.
Observe the behaviour of model¶
To observe the behaviour of model, you can use the stepper
$ torxakis Adder.txs
TXS >> stepper Adder
TXS >> step 10
TXS >> ...
Execute TorXakis against the actual SUT¶
To execute TorXakis against the actual SUT, the SUT must first be running and listening on port 7890. Run in a terminal window:
$ java -cp Adder 7890
Then in a different terminal window run torxakis against the SUT:
$ torxakis Adder.txs
TXS >> tester Adder SutConnection
TXS >> test 10
TXS >> ...
TXS >> help # TorXakis help for more possibilities
2. Adder3 Model and Sut3 Connection:¶
TorXakis model for three parallel Adders, communicating via <localhost,7890> <localhost,7891> <localhost,7892>.
Observe the behaviour of model¶
To observe the behaviour of model, you can use the stepper
$ torxakis Adder.txs
TXS >> stepper Adder3
TXS >> step 20
TXS >> ...
Execute TorXakis against the actual 3 SUTs¶
Start the 3 SUTs by starting each SUT with its own specific port in a separate terminal window:
# terminal window 1
$ java -cp Adder 7891
# terminal window 2
$ java -cp Adder 7892
# terminal window 3
$ java -cp Adder 7893
Then in terminal window 4 run torxakis against the SUT:
# terminal window 4
$ torxakis Adder.txs
TXS >> tester Adder3 Sut3
TXS >> test 20
TXS >> ...
TXS >> help # TorXakis help for more possibilities
AdderStAut.txs¶
This example defines same Adder model using State Automation instead of a Procedure. Sut and Sim are exactly same with Adder.txs.
The State Automation in the Adder.txs file is defined with the STAUTDEF declaration:
STAUTDEF adder [ Act :: Operation; Res :: Int ] ( )
::=
STATE idle, calc
VAR statevar :: Int
INIT idle { statevar := 0 }
TRANS idle -> Act ?opn [[ IF isPlus(opn) THEN not (overflow (p1(opn)))
/\ not (overflow (p2(opn)))
/\ not (overflow (p1(opn)+p2(opn)))
ELSE False FI ]] { statevar := p1(opn)+p2(opn) } -> calc
idle -> Act ?opn [[ IF isMinus(opn) THEN not (overflow (m1(opn)))
/\ not (overflow (m2(opn)))
/\ not (overflow (m1(opn)-m2(opn)))
ELSE False FI ]] { statevar := m1(opn)-m2(opn) } -> calc
calc -> Res ! statevar { } -> idle
ENDDEF
Observe the behaviour of model¶
To observe the behaviour of model, you can use the stepper
$ torxakis AdderStAut.txs
TXS >> stepper Adder
TXS >> step 10
TXS >> ...
Execute TorXakis against the actual SUT¶
To execute TorXakis against the actual SUT, the SUT must first be running and listening on port 7890. Run in a terminal window:
$ java -cp Adder 7890
Then in a different terminal window run torxakis against the SUT:
$ torxakis AdderStAut.txs
TXS >> tester Adder SutConnection
TXS >> test 10
TXS >> ...
TXS >> help # TorXakis help for more possibilities
Test Purposes¶
AdderPurposes.txs¶
This file includes 3 example Test Purpose definitions for manipulating inputs generated by TorXakis in order to achieve certain objectives during testing.
- Purp1
Test Purpose with 4 Goals
- Purp2
Test Purpose with operand constraints
- Purp3
Test Purpose to continuously add 2 after a random starting value
Use the Test Purposes by loading them into torxakis together with the Model definition:
$ torxakis Adder.txs AdderPurposes.txs
TXS >> tester Adder Purp1
TXS >> test 5
TXS >> ...
AdderReplay.txs and ReplayProc.txs¶
AdderReplay.txs includes a Test Purpose that replays a process of
predefined input values in order to replay a certain scenario. The
process has to be named as replayProc. ReplayProc.txs includes such a
process with 100 steps.
Load Test Purpose and replay record together with Model definitions
$ torxakis Adder.txs AdderReplay.txs ReplayProc.txs
TXS >> tester Adder AdderReplay
TXS >> test 101
TXS >> ...