aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDan Liew <daniel.liew@imperial.ac.uk>2015-03-20 16:14:44 +0000
committerDan Liew <daniel.liew@imperial.ac.uk>2015-03-20 16:14:44 +0000
commit5b94f3ff80aa0628948d7775a71fdad82e4fa222 (patch)
tree94c25e3086e012a15c8899eaf18200cb856f6d6e
parentd0b5b4ded22d8f4f04b237b5595d3dd586b6ea18 (diff)
downloadklee-5b94f3ff80aa0628948d7775a71fdad82e4fa222.tar.gz
Improve arithmetic-right-overshift-sym-conc.c test by make sure it
also test a negative constant as the lhs.
-rw-r--r--test/Feature/arithmetic-right-overshift-sym-conc.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/test/Feature/arithmetic-right-overshift-sym-conc.c b/test/Feature/arithmetic-right-overshift-sym-conc.c
index a771bc75..7af6f9d7 100644
--- a/test/Feature/arithmetic-right-overshift-sym-conc.c
+++ b/test/Feature/arithmetic-right-overshift-sym-conc.c
@@ -15,11 +15,13 @@ typedef enum
// We're using signed ints so should be doing
// arithmetic right shift.
-int overshift(volatile unsigned int y, const char * type)
+// lhs should be a constant
+int overshift(signed int lhs, volatile unsigned int y, const char * type)
{
overshift_t ret;
- volatile signed int x=15;
+ volatile signed int x = lhs;
unsigned int limit = sizeof(x)*8;
+ assert(!klee_is_symbolic(x));
volatile signed int result;
result = x >> y; // Potential overshift
@@ -45,10 +47,13 @@ int overshift(volatile unsigned int y, const char * type)
int main(int argc, char** argv)
{
- // Concrete overshift
volatile unsigned int y = sizeof(unsigned int)*8;
- overshift_t conc = overshift(y, "Concrete");
- assert( conc == TO_ZERO);
+ // Try with +ve lhs
+ overshift_t conc = overshift(15, y, "Concrete");
+ assert(conc == TO_ZERO);
+ // Try with -ve lhs
+ conc = overshift(-1, y, "Concrete");
+ assert(conc == TO_ZERO);
// Symbolic overshift
volatile unsigned int y2;
@@ -56,11 +61,15 @@ int main(int argc, char** argv)
// Add constraints so only one value possible
klee_assume(y2 > (y-1));
klee_assume(y2 < (y+1));
- overshift_t sym = overshift(y2, "Symbolic");
- assert( sym == TO_ZERO);
+ // Try with +ve lhs
+ overshift_t sym = overshift(15, y2, "Symbolic");
+ assert(sym == TO_ZERO);
+ // Try with -ve lhs
+ sym = overshift(-1, y2, "Symbolic");
+ assert(sym == TO_ZERO);
// Concrete and symbolic behaviour should be the same
- assert( conc == sym);
+ assert(conc == sym);
return 0;
}