[Pixman] [PATCH] test: Randomize some tests if PIXMAN_RANDOMIZE_TESTS is set
Søren Sandmann
sandmann at cs.au.dk
Tue Mar 15 11:49:03 PDT 2011
From: Søren Sandmann Pedersen <ssp at redhat.com>
This patch makes so that composite and stress-test will start from a
random seed if the PIXMAN_RANDOMIZE_TESTS environment variable is
set. Running the test suite in this mode is useful to get more test
coverage.
Also, in stress-test.c make it so that setting the initial seed causes
threads to be turned off. This makes it much easier to see when
something fails.
---
test/composite.c | 17 ++++++++++++-----
test/stress-test.c | 37 ++++++++++++++++++++++++++-----------
test/utils.c | 10 ++++++++++
test/utils.h | 3 +++
4 files changed, 51 insertions(+), 16 deletions(-)
diff --git a/test/composite.c b/test/composite.c
index a86e5ed..e6d52b9 100644
--- a/test/composite.c
+++ b/test/composite.c
@@ -868,7 +868,7 @@ main (int argc, char **argv)
{
#define N_TESTS (8 * 1024 * 1024)
int result = 0;
- int i;
+ uint32_t i;
if (argc > 1)
{
@@ -890,15 +890,22 @@ main (int argc, char **argv)
}
}
+ uint32_t seed;
+
+ if (getenv ("PIXMAN_RANDOMIZE_TESTS"))
+ seed = get_random_seed();
+ else
+ seed = 1;
+
#ifdef USE_OPENMP
-# pragma omp parallel for default(none) shared(result) shared(argv)
+# pragma omp parallel for default(none) shared(result, argv, seed)
#endif
- for (i = 1; i <= N_TESTS; ++i)
+ for (i = seed; i <= N_TESTS; ++i)
{
if (!result && !run_test (i))
{
- printf ("Test %d failed.\n", i);
-
+ printf ("Test 0x%08X failed.\n", i);
+
result = i;
}
}
diff --git a/test/stress-test.c b/test/stress-test.c
index 166dc6d..d496f93 100644
--- a/test/stress-test.c
+++ b/test/stress-test.c
@@ -1,4 +1,6 @@
+#include <stdio.h>
#include "utils.h"
+#include <sys/types.h>
#if 0
#define fence_malloc malloc
@@ -730,11 +732,17 @@ static const pixman_op_t op_list[] =
};
static void
-run_test (uint32_t seed)
+run_test (uint32_t seed, pixman_bool_t verbose, uint32_t mod)
{
pixman_image_t *source, *mask, *dest;
pixman_op_t op;
+ if (verbose)
+ {
+ if (mod == 0 || (seed % mod) == 0)
+ printf ("Seed 0x%08x\n", seed);
+ }
+
lcg_srand (seed);
source = create_random_image ();
@@ -787,6 +795,7 @@ main (int argc, char **argv)
uint32_t seed = 1;
uint32_t n_tests = 0xffffffff;
uint32_t mod = 0;
+ pixman_bool_t use_threads = TRUE;
uint32_t i;
pixman_disable_out_of_bounds_workaround ();
@@ -811,6 +820,7 @@ main (int argc, char **argv)
else if (strcmp (argv[i], "-s") == 0 && i + 1 < argc)
{
get_int (argv[i + 1], &seed);
+ use_threads = FALSE;
i++;
}
else if (strcmp (argv[i], "-n") == 0 && i + 1 < argc)
@@ -825,7 +835,7 @@ main (int argc, char **argv)
printf ("Options:\n\n"
"-n <number> Number of tests to run\n"
- "-s <seed> Seed of first test\n"
+ "-s <seed> Seed of first test (ignored if PIXMAN_RANDOMIZE_TESTS is set)\n"
"-v Print out seeds\n"
"-v <n> Print out every n'th seed\n\n");
@@ -836,19 +846,24 @@ main (int argc, char **argv)
if (n_tests == 0xffffffff)
n_tests = 8000;
- /* FIXME: seed 2005763 fails in set_lum() with divide by zero */
+ if (getenv ("PIXMAN_RANDOMIZE_TESTS"))
+ {
+ seed = get_random_seed();
+ printf ("First seed: 0x%08x\n", seed);
+ }
+
+ if (use_threads)
+ {
#ifdef USE_OPENMP
# pragma omp parallel for default(none) shared(verbose, n_tests, mod, seed)
#endif
- for (i = seed; i < seed + n_tests; ++i)
+ for (i = seed; i < seed + n_tests; ++i)
+ run_test (i, verbose, mod);
+ }
+ else
{
- if (verbose)
- {
- if (mod == 0 || (i % mod) == 0)
- printf ("Seed %d\n", i);
- }
-
- run_test (i);
+ for (i = seed; i < seed + n_tests; ++i)
+ run_test (i, verbose, mod);
}
return 0;
diff --git a/test/utils.c b/test/utils.c
index 4bf02e1..56701c4 100644
--- a/test/utils.c
+++ b/test/utils.c
@@ -455,6 +455,16 @@ gettime (void)
#endif
}
+uint32_t
+get_random_seed (void)
+{
+ double d = gettime();
+
+ lcg_srand (*(uint32_t *)&d);
+
+ return lcg_rand_u32 ();
+}
+
static const char *global_msg;
static void
diff --git a/test/utils.h b/test/utils.h
index a5183f7..615ad78 100644
--- a/test/utils.h
+++ b/test/utils.h
@@ -79,6 +79,9 @@ make_random_bytes (int n_bytes);
double
gettime (void);
+uint32_t
+get_random_seed (void);
+
/* main body of the fuzzer test */
int
fuzzer_test_main (const char *test_name,
--
1.7.4
More information about the Pixman
mailing list