I see.
Thanks a lot!
Haihao
On Thu, May 12, 2011 at 7:04 PM, Yang Chen <chenyang@cs.utah.edu
<mailto:chenyang@cs.utah.edu>> wrote:
On 5/12/11 4:47 AM, haihao shen wrote:
You mean the items should be sorted from small to large and then
measure the prob via latter minus former, right?
The output probabilities are not sorted, but the Csmith will treat
them in order. For example, Csmith internally converts
[statement_prob,statement_assign_prob=100,statement_block_prob=0,statement_for_prob=30,statement_ifelse_prob=15,
statement_return_prob=35,statement_continue_prob=40,statement_break_prob=45,statement_goto_prob=50,
statement_arrayop_prob=60]
to
[statement_prob, statement_block_prob=0, statement_ifelse_prob=15,
statement_for_prob=30,
statement_return_prob=35,statement_continue_prob=40,statement_break_prob=45,
statement_goto_prob=50,statement_arrayop_prob=60,statement_assign_prob=100]
As I said, we might need to generate the sorted probabilities as
well, to avoid confusing.
Is there any underlying assumption to measure the prob?
Somehow we choose those probabilities heuristically. We don't have
clear idea about the relation between probability distributions and
the bug finding power of Csmith.
Why minus?
It's just a design choice. We set 0 as "don't generate it". For
example,
statement_block_prob=0,
Then, say we need to choose a value to represent the probability to
generate if-else statements. But how can we represent it? You can
read the graph below:
[0-14] [15-29] [30-34]
block if-else for
...
I have a simple idea, just for each item randomly choosing from 0
to 100. Is it OK?
You can do that. But if you really want some random probability
distributions, you can try --random-random option, which
automatically gives you random probabilities.
- Yang
Thanks,
Haihao
On Thu, May 12, 2011 at 6:43 PM, Yang Chen <chenyang@cs.utah.edu
<mailto:chenyang@cs.utah.edu>> wrote:
On 5/12/11 4:34 AM, haihao shen wrote:
[Haihao] Does "statement_assign_prob=100" mean the total prob
for statement_prob is 100%? Is always the latter one minus
the former? How about
"statement_for_prob=30,statement_ifelse_prob=15"? Please
explain more ;)
I am sorry I missed it.
The above example means that we have (100-60)% chance to get
assignment statements, (15-0)% to have if-else statements and
(30-15)% to for statements. If the probability value for a
statement type is 0, Csmith won't generate that kind of
statements, for example, "statement_block_prob = 0" means that
Csmith is not going to produce "standalone" block statements
(besides those block statements belonging to if-else and for).
- Yang
On Thu, May 12, 2011 at 6:33 PM, Yang Chen
<chenyang@cs.utah.edu <mailto:chenyang@cs.utah.edu>> wrote:
On 5/12/11 4:29 AM, haihao shen wrote:
However, in the latest generated sample configure
file by csmith, statement_assign_prob=100,
statement_block_prob=0. Does it mean only -100%
chance to get statement_block_prob?
No. The probabilities are not sorted in the output
(Maybe we should do that). For example, Here is a
sample output:
[statement_prob,statement_assign_prob=100,statement_block_prob=0,statement_for_prob=30,statement_ifelse_prob=15,
statement_return_prob=35,statement_continue_prob=40,statement_break_prob=45,statement_goto_prob=50,
statement_arrayop_prob=60]
It means that we have (15-0)% = 15% change to
generate if-else statements, (35-15)% = 20% chance
to generate return statements, etc.
[Haihao] Next is 40-35? 45-40? 50-45?
Yes :)
(40-35)% for continue statements, (45-40)% for break
statements and (50-45)% for goto statements.
- Yang