From: Tyson Smith <[email protected]>

This will help evenly distribute the calls to each
get_interesting_<Nbit>_value() functions. It will also make the modification
to the distribution easier in the future if tweaks are needed. Move call to
plus_minus_two() from get_interesting_32bit_value() to get_interesting_value().
---
 interesting-numbers.c | 61 +++++++++++++++++++++++----------------------------
 1 file changed, 28 insertions(+), 33 deletions(-)

diff --git a/interesting-numbers.c b/interesting-numbers.c
index 4b23b4c..e08e27d 100644
--- a/interesting-numbers.c
+++ b/interesting-numbers.c
@@ -35,22 +35,20 @@ static int get_interesting_16bit_value(void)
 {
        int num = 0;
 
-       switch (rand() % 8) {
+       switch (rand() % 7) {
        case 0: num = 0;
                break;
-       case 1: num = get_interesting_8bit_value();
+       case 1: num = -32768;
                break;
-       case 2: num = -32768;
+       case 2: num = -129;
                break;
-       case 3: num = -129;
+       case 3: num = 255;
                break;
-       case 4: num = 255;
+       case 4: num = 32767;
                break;
-       case 5: num = 32767;
+       case 5: num = 1UL << (rand() % 15);
                break;
-       case 6: num = 1UL << (rand() % 15);
-               break;
-       case 7: num = rand() % 0xffff;
+       case 6: num = rand() % 0xffff;
                break;
        }
 
@@ -61,37 +59,28 @@ unsigned int get_interesting_32bit_value(void)
 {
        unsigned int num = 0;
 
-       switch (rand() % 11) {
+       switch (rand() % 9) {
        case 0: num = 0;
                break;
-
-       case 1: num = get_interesting_8bit_value();
+       case 1: num = 1UL << (rand() % 32);     // set a single bit.
                break;
-
-       case 2: num = get_interesting_16bit_value();
+       case 2: num = 0x8fffffff;
                break;
-
-       case 3: num = 1UL << (rand() % 32);     // set a single bit.
-               break;
-       case 4: num = 0x8fffffff;
-               break;
-       case 5: num = 0xff;
+       case 3: num = 0xff;
                num = num << (rand() % 31);
                break;
-       case 6: num = 0xffff0000;
+       case 4: num = 0xffff0000;
                break;
-       case 7: num = 0xffffe000;
+       case 5: num = 0xffffe000;
                break;
-       case 8: num = 0xffffff00 | (rand() % 256);
+       case 6: num = 0xffffff00 | (rand() % 256);
                break;
-       case 9: num = 0xffffffff - page_size;
+       case 7: num = 0xffffffff - page_size;
                break;
-       case 10: num = 0xffffffff;
+       case 8: num = 0xffffffff;
                break;
        }
 
-       num = rand() & 0xf ? num : plus_minus_two(num); // 1 in 16 call 
plus_minus_two
-
        return num;
 }
 
@@ -119,13 +108,19 @@ static unsigned long per_arch_interesting_addr(unsigned 
long low)
 
 unsigned long get_interesting_value(void)
 {
-#if __WORDSIZE == 32
-       return get_interesting_32bit_value();
-#else
        unsigned long low = 0;
 
-       if (rand_bool())
-               low = get_interesting_32bit_value();
+       switch (rand() % 3) {
+       case 0: low = get_interesting_8bit_value();
+               break;
+       case 1: low = get_interesting_16bit_value();
+               break;
+       case 2: low = get_interesting_32bit_value();
+               break;
+       }
+
+       low = (rand() & 0xf) ? low : plus_minus_two(low);       // 1 in 16 call 
plus_minus_two
+#if __WORDSIZE != 32
 
        switch (rand() % 13) {
        case 0: return 0;
@@ -143,6 +138,6 @@ unsigned long get_interesting_value(void)
        case 12: return (low << 32);
        }
 
-       return low;     // unreachable, but gcc is dumb.
 #endif /* __WORDSIZE */
+       return low;
 }
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe trinity" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to