On Wed, Jun 19, 2013 at 1:17 PM, Ben Pfaff <b...@nicira.com> wrote: > None of these test programs are threaded, but has little cost and means > that "grep" doesn't turn up any instances of these thread-unsafe functions > in our tree. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > tests/test-classifier.c | 25 +++++++++++++------------ > tests/test-hindex.c | 3 ++- > tests/test-hmap.c | 5 +++-- > tests/test-util.c | 4 ++-- > 4 files changed, 20 insertions(+), 17 deletions(-) > > diff --git a/tests/test-classifier.c b/tests/test-classifier.c > index f616494..981251b 100644 > --- a/tests/test-classifier.c > +++ b/tests/test-classifier.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. > + * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -34,6 +34,7 @@ > #include "flow.h" > #include "ofp-util.h" > #include "packets.h" > +#include "random.h" > #include "unaligned.h" > > #undef NDEBUG > @@ -404,7 +405,7 @@ compare_classifiers(struct classifier *cls, struct > tcls *tcls) > struct flow flow; > unsigned int x; > > - x = rand () % N_FLOW_VALUES; > + x = random_uint32() % N_FLOW_VALUES; > Did you consider to use random_range(N_FLOW_VALUES) here? It seems that you did this in other places.
memset(&flow, 0, sizeof flow); > flow.nw_src = nw_src_values[get_value(&x, N_NW_SRC_VALUES)]; > flow.nw_dst = nw_dst_values[get_value(&x, N_NW_DST_VALUES)]; > @@ -579,7 +580,7 @@ static void > shuffle(unsigned int *p, size_t n) > { > for (; n > 1; n--, p++) { > - unsigned int *q = &p[rand() % n]; > + unsigned int *q = &p[random_range(n)]; > unsigned int tmp = *p; > *p = *q; > *q = tmp; > @@ -590,7 +591,7 @@ static void > shuffle_u32s(uint32_t *p, size_t n) > { > for (; n > 1; n--, p++) { > - uint32_t *q = &p[rand() % n]; > + uint32_t *q = &p[random_range(n)]; > uint32_t tmp = *p; > *p = *q; > *q = tmp; > @@ -879,7 +880,7 @@ test_many_rules_in_one_table(int argc OVS_UNUSED, char > *argv[] OVS_UNUSED) > int i; > > do { > - wcf = rand() & ((1u << CLS_N_FIELDS) - 1); > + wcf = random_uint32() & ((1u << CLS_N_FIELDS) - 1); > value_mask = ~wcf & ((1u << CLS_N_FIELDS) - 1); > } while ((1 << count_ones(value_mask)) < N_RULES); > > @@ -887,10 +888,10 @@ test_many_rules_in_one_table(int argc OVS_UNUSED, > char *argv[] OVS_UNUSED) > tcls_init(&tcls); > > for (i = 0; i < N_RULES; i++) { > - unsigned int priority = rand(); > + unsigned int priority = random_uint32(); > > do { > - value_pats[i] = rand() & value_mask; > + value_pats[i] = random_uint32() & value_mask; > } while (array_contains(value_pats, i, value_pats[i])); > > rules[i] = make_rule(wcf, priority, value_pats[i]); > @@ -928,7 +929,7 @@ test_many_rules_in_n_tables(int n_tables) > assert(n_tables < 10); > for (i = 0; i < n_tables; i++) { > do { > - wcfs[i] = rand() & ((1u << CLS_N_FIELDS) - 1); > + wcfs[i] = random_uint32() & ((1u << CLS_N_FIELDS) - 1); > } while (array_contains(wcfs, i, wcfs[i])); > } > > @@ -937,7 +938,7 @@ test_many_rules_in_n_tables(int n_tables) > struct classifier cls; > struct tcls tcls; > > - srand(iteration); > + random_set_seed(iteration + 1); > for (i = 0; i < MAX_RULES; i++) { > priorities[i] = i * 129; > } > @@ -949,8 +950,8 @@ test_many_rules_in_n_tables(int n_tables) > for (i = 0; i < MAX_RULES; i++) { > struct test_rule *rule; > unsigned int priority = priorities[i]; > - int wcf = wcfs[rand() % n_tables]; > - int value_pat = rand() & ((1u << CLS_N_FIELDS) - 1); > + int wcf = wcfs[random_range(n_tables)]; > + int value_pat = random_uint32() & ((1u << CLS_N_FIELDS) - 1); > rule = make_rule(wcf, priority, value_pat); > tcls_insert(&tcls, rule); > classifier_insert(&cls, &rule->cls_rule); > @@ -963,7 +964,7 @@ test_many_rules_in_n_tables(int n_tables) > struct test_rule *target; > struct cls_cursor cursor; > > - target = clone_rule(tcls.rules[rand() % tcls.n_rules]); > + target = clone_rule(tcls.rules[random_uint32() % > tcls.n_rules]); > Same here. > > cls_cursor_init(&cursor, &cls, &target->cls_rule); > CLS_CURSOR_FOR_EACH_SAFE (rule, next_rule, cls_rule, &cursor) > { > diff --git a/tests/test-hindex.c b/tests/test-hindex.c > index b5fe9f0..7a3ef72 100644 > --- a/tests/test-hindex.c > +++ b/tests/test-hindex.c > @@ -21,6 +21,7 @@ > #include "hindex.h" > #include <string.h> > #include "hash.h" > +#include "random.h" > #include "util.h" > > #undef NDEBUG > @@ -108,7 +109,7 @@ static void > shuffle(int *p, size_t n) > { > for (; n > 1; n--, p++) { > - int *q = &p[rand() % n]; > + int *q = &p[random_range(n)]; > int tmp = *p; > *p = *q; > *q = tmp; > diff --git a/tests/test-hmap.c b/tests/test-hmap.c > index c202eae..6102be3 100644 > --- a/tests/test-hmap.c > +++ b/tests/test-hmap.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2008, 2009, 2010 Nicira, Inc. > + * Copyright (c) 2008, 2009, 2010, 2013 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -21,6 +21,7 @@ > #include "hmap.h" > #include <string.h> > #include "hash.h" > +#include "random.h" > #include "util.h" > > #undef NDEBUG > @@ -108,7 +109,7 @@ static void > shuffle(int *p, size_t n) > { > for (; n > 1; n--, p++) { > - int *q = &p[rand() % n]; > + int *q = &p[random_range(n)]; > int tmp = *p; > *p = *q; > *q = tmp; > diff --git a/tests/test-util.c b/tests/test-util.c > index 3422af3..729b4e6 100644 > --- a/tests/test-util.c > +++ b/tests/test-util.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2011, 2012 Nicira, Inc. > + * Copyright (c) 2011, 2012, 2013 Nicira, Inc. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -94,7 +94,7 @@ static void > shuffle(unsigned int *p, size_t n) > { > for (; n > 1; n--, p++) { > - unsigned int *q = &p[rand() % n]; > + unsigned int *q = &p[random_range(n)]; > unsigned int tmp = *p; > *p = *q; > *q = tmp; > > Otherwise looks good to me.
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev