Hi Kirill.
The solution is easy actually.
> Is it correct that klee_assume() takes constraint with symbolic variables?
> While in my example n is not symbolic.
Yes, its correct, use any variables (not symbolic only) in klee_assume, and
only inputs, that satisfy assumption, will be generated.
About the second problem i suggest to use klee_assume
void klee_assume(int constraint) {
if (!constraint) klee_silent_exit(0);
}
> What I want to achieve is by applying certain search strategies
(e.g. Depth First) I want KLEE instead of traversing a=1,2,3... but to
give me a=500 as a one of the first test cases. > if I change 500 to 5M I will
be waiting forever for the answer while it is right here.
> Let me give you second example to explain what I want to get.
> .....
During the bubble some counter is introduced, cnt1 in your example. As far as i
understand this counter is increased every time swap is performed during bubble
sort.
All you have to do is simply next to statement
cnt1 = BubbleSort(&a[0] , n);
line
klee_assume(cnt1==30); or with any other value you want to test.
This will make sure, that only inputs, that produce 30 swaps for sorting, will
be generated. Others will be skipped.
klee_assume() is actually very useful function, if you want to add to program
some function, that does nothing, but exists, use klee_assume(true), if you
want to skip some input generation, when certain conditions within the program
trigger, use klee_assume(false), not klee_assert as it were suggested.
Hope this is that you need,
Urmas Repinski.
Date: Tue, 25 Mar 2014 13:35:21 +0000
Subject: Re: [klee-dev] KLEE relationship between loop length and counter.
From: [email protected]
To: [email protected]
CC: [email protected]
Hi Urmas,
Thanks for your answer!
Is it correct that klee_assume() takes constraint with symbolic variables?
While in my example n is not symbolic.
What I want to achieve is by applying certain search strategies (e.g. Depth
First) I want KLEE instead of traversing a=1,2,3... but to give me a=500 as a
one of the first test cases. if I change 500 to 5M I will be waiting forever
for the answer while it is right here.
Let me give you second example to explain what I want to get. Imagine that I
have a symbolic integer array#define N 10a[N];klee_make_symbolic(&a, sizeof(a),
"a");
And I passing it to a bubble sort function, where I counting number of swaps
that function performs to sort an array.cnt1 = BubbleSort(&a[0] , n);
Finally, I have a condition, where I comparing number of swaps to some value.
Meaning that I want KLEE to come up with an input array such that number of
swaps performed by the KLEE is 30 in this example.
if (cnt1 == 30){ klee_assert(0);}
My question is, Can the KLEE see the relationship between symbolic input
integer array and the number of swaps that function need to perform.
Thanks!Kirill
On 25 March 2014 11:12, Urmas Repinski <[email protected]> wrote:
Hi, Kirill.
First of all, it is not clear what type of inputs should be generated.
In the example below all integers will be generated, starting from 0 ...
including 500.
klee_assert function will trigger __assert_fail klee function, this possibly
will terminate input generation process, possibly not, i am not very sure.
Anyway it is possible that you want something more meaningful, if input 500
should be generated, or input 500 should not be generated.
In this case better to use klee_assume function:
void klee_assume(int constraint) {
if (!constraint) klee_silent_exit(0);
}
{int a;
klee_make_symbolic(&a, sizeof(a), "a");
int i =0 ;
int n =1;
for (i =0; i < a;i++){
n++;
}
klee_assume(n==500); or klee_assume(n!=500);
Will generate a=500 or all a-s, except 500.
Urmas Repinski.
Date: Tue, 25 Mar 2014 09:33:26 +0000
From: [email protected]
To: [email protected]
Subject: [klee-dev] KLEE relationship between loop length and counter.
Hello Everyone,
(Sorry for the previous email, it has been sent by mistake before I finished
it!)
Could you please let me know if what I am doing cannot be achieved with KLEE
and if it can, how can I do it?
1. Please consider my usage example below. The problem that I am observing is
that KLEE does not sees relationship between loop length and the counter "n".
In my experiments (with different search strategies) KLEE always encountered
assertion by a blind search, and usually after generating 500 test cases.
{int a;
klee_make_symbolic(&a, sizeof(a), "a");
int i =0 ;
int n =1;
for (i =0; i < a;i++){
n++;
}
if (n == 500)
klee_assert(0);
return 0;
}
Is this is something that is fundamentally impossible in KLEE, or can be
achieved by rewriting my example?
Thank you very much!
_______________________________________________
klee-dev mailing list
[email protected]
https://mailman.ic.ac.uk/mailman/listinfo/klee-dev
_______________________________________________
klee-dev mailing list
[email protected]
https://mailman.ic.ac.uk/mailman/listinfo/klee-dev