Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
frama-c
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pub
frama-c
Commits
8beee8cf
Commit
8beee8cf
authored
9 years ago
by
Kostyantyn Vorobyov
Browse files
Options
Downloads
Patches
Plain Diff
[testrun.sh] Comments
parent
a24e600c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/plugins/e-acsl/scripts/testrun.sh
+31
-27
31 additions, 27 deletions
src/plugins/e-acsl/scripts/testrun.sh
with
31 additions
and
27 deletions
src/plugins/e-acsl/scripts/testrun.sh
+
31
−
27
View file @
8beee8cf
...
@@ -24,30 +24,34 @@
...
@@ -24,30 +24,34 @@
# Convenience script for running tests with E-ACSL. Given a source file the
# Convenience script for running tests with E-ACSL. Given a source file the
# sequence is as follows:
# sequence is as follows:
# 1. Perform E-ACSL instrumentation
# 1. Instrument and compile a given source file with `e-acsl-gcc.sh`
# 2. Compile instrumented and original files
# 2. Run executables generated from the instrumented and original sources
# 3. Compare outputs of the above
# and compare their outputs
# Test failure is detected if:
# - `e-acsl-gcc.sh` fails (i.e., instrumentation- or compile-time failure)
# - A generated executable exists with a non-zero status
# - Outputs produced by executables generated from the original and
# instrumented sources differ
# Arguments:
# Arguments:
# $1 - base name of the source file to use excluding an
# $1 - base name of a test source file excluding its extension (e.g., addrOf)
# extension (e.g., addrOf)
# $2 - base name of a test suite directory the test file is located in
# $2 - base name of the test suite directory the test file is located in.
# (e.g., e-acsl-runtime). Provided that ROOT is the directory
# (for instance e-acsl-runtime). Provided that ROOT is the directory
# holding an E-ACSL repository there should be either:
# holding the E-ACSL repository there should be either:
# * $ROOT/test/e-acsl-runtime/addrOf.i or
# $ROOT/test/e-acsl-runtime/addrOf.i or
# * $ROOT/test/e-acsl-runtime/addrOf.c
# $ROOT/test/e-acsl-runtime/addrOf.c
# $3 - if specified, re-run test sequence with -e-acsl-gmp-only flag
# $3 - if specified this script re-runs test sequence generating using
# $4 - extra flags for a `e-acsl-gcc.sh` run
# -e-acsl-gmp-only option
# $5 - if specified print extra messages and retain log files (DEBUG option)
# $4 - extra flags for e-acsl-gcc.sh
# $5 - debug flag - pring extra messages and retain log files
set
-e
set
-e
TEST
=
"
$1
"
# Base
d
name of the test file
with extension stripped
TEST
=
"
$1
"
# Base name of the test file
PREFIX
=
"
$2
"
#
Prefix (t
est suite
)
directory
,
e.g.,
bts,
e-acsl-runtime
PREFIX
=
"
$2
"
#
T
est suite directory
(
e.g., e-acsl-runtime
)
GMP
=
"
$3
"
# Whether to
use a subsequent
run with -e-acsl-gmp-only
GMP
=
"
$3
"
# Whether to
issue an additional
run with -e-acsl-gmp-only
EXTRA
=
"
$4
"
# Extra
flags for
e-acsl-gcc.sh
EXTRA
=
"
$4
"
# Extra e-acsl-gcc.sh
flags
DEBUG
=
"
$5
"
# Debug
flag
DEBUG
=
"
$5
"
# Debug
option
ROOTDIR
=
"
`
readlink
-f
$(
dirname
$0
)
/../
`
"
# Root directory of the repository
ROOTDIR
=
"
`
readlink
-f
$(
dirname
$0
)
/../
`
"
# Root directory of the repository
TESTDIR
=
"
$ROOTDIR
/tests/
$PREFIX
"
# Test suite directory
TESTDIR
=
"
$ROOTDIR
/tests/
$PREFIX
"
# Test suite directory
...
@@ -56,7 +60,7 @@ TESTFILE=`ls $TESTDIR/$TEST.[ic]` # Source test file
...
@@ -56,7 +60,7 @@ TESTFILE=`ls $TESTDIR/$TEST.[ic]` # Source test file
MODEL
=
"bittree"
# Memory model to link against
MODEL
=
"bittree"
# Memory model to link against
LOG
=
"
$RESDIR
/
$TEST
.testrun"
# Base name for log files
LOG
=
"
$RESDIR
/
$TEST
.testrun"
# Base name for log files
OUT
=
"
$RESDIR
/gen_
$TEST
"
# Base name for
output
OUT
=
"
$RESDIR
/gen_
$TEST
"
# Base name for
instrumented files
RUNS
=
1
# Nth run of `run_test` function
RUNS
=
1
# Nth run of `run_test` function
# Print a message if the DEBUG flag is set
# Print a message if the DEBUG flag is set
...
@@ -66,7 +70,7 @@ debug() {
...
@@ -66,7 +70,7 @@ debug() {
fi
fi
}
}
# Clean up log/output files unless
the
DEBUG
flag
is set
# Clean up log/output files unless DEBUG is set
clean
()
{
clean
()
{
if
[
-z
"
$DEBUG
"
]
;
then
if
[
-z
"
$DEBUG
"
]
;
then
rm
-f
$LOG
.
*
$OUT
.
*
rm
-f
$LOG
.
*
$OUT
.
*
...
@@ -75,7 +79,7 @@ clean() {
...
@@ -75,7 +79,7 @@ clean() {
# Error reporting
# Error reporting
# $1 - error message
# $1 - error message
# $2 - log file. If supplied the contents of the log file are dump
m
ed to
# $2 - log file. If supplied
,
the contents of the log file are dumped to
# STDERR with each line prefixed by ' > '.
# STDERR with each line prefixed by ' > '.
error
()
{
error
()
{
echo
"Error:
$1
"
1>&2
echo
"Error:
$1
"
1>&2
...
@@ -86,14 +90,14 @@ error() {
...
@@ -86,14 +90,14 @@ error() {
exit
1
exit
1
}
}
# Do clean
up on exit
# Do
a
clean
-
up on exit
trap
"clean"
EXIT HUP INT QUIT TERM
trap
"clean"
EXIT HUP INT QUIT TERM
# Run executable and report results
# Run executable and report results
# $1 - path to an executable
# $1 - path to an executable
# $2 -
file for logging the outputs of the command
# $2 -
path to a log file
# $3 -
the
type of the executable (
e.g., original executable
# $3 - type of the executable (
i.e., generated from original or instrumented
#
or an executable generated from the instrumented
sources)
# sources)
run_executable
()
{
run_executable
()
{
local
executable
=
"
$1
"
local
executable
=
"
$1
"
local
log
=
"
$2
"
local
log
=
"
$2
"
...
@@ -127,7 +131,7 @@ run_test() {
...
@@ -127,7 +131,7 @@ run_test() {
run_executable
$oexec
$oexeclog
.native
"Native"
run_executable
$oexec
$oexeclog
.native
"Native"
run_executable
$oexec
.e-acsl
$oexeclog
.e-acsl
"Instrumented"
run_executable
$oexec
.e-acsl
$oexeclog
.e-acsl
"Instrumented"
#
#
Make sure that instrumented and uninstrumented programs have same outputs
# Make sure that instrumented and uninstrumented programs have same outputs
debug
"Compare outputs of
$oexec
and
$oexec
.e-acsl"
debug
"Compare outputs of
$oexec
and
$oexec
.e-acsl"
diff
-ur
-N
$oexeclog
.native
$oexeclog
.e-acsl
>
$oexeclog
.diff 2>&1
||
\
diff
-ur
-N
$oexeclog
.native
$oexeclog
.e-acsl
>
$oexeclog
.diff 2>&1
||
\
error
"Output of instrumented and original programs differ"
$oexeclog
.diff
error
"Output of instrumented and original programs differ"
$oexeclog
.diff
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment