Mercurial > gnulib
annotate tests/test-array_oset.c @ 40231:9b3c79fdfe0b
strtod: fix clash with strtold
Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
* lib/strtod.c (compute_minus_zero, minus_zero):
Simplify by remving the macro / external variable,
and having just a function. User changed. This avoids
the need for an external variable that might clash.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 11 Mar 2019 16:40:29 -0700 |
parents | b06060465f09 |
children |
rev | line source |
---|---|
7868 | 1 /* Test of ordered set data type implementation. |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
19484
diff
changeset
|
2 Copyright (C) 2006-2019 Free Software Foundation, Inc. |
7868 | 3 Written by Bruno Haible <bruno@clisp.org>, 2007. |
4 | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8891
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
7868 | 6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8891
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
8891
diff
changeset
|
8 (at your option) any later version. |
7868 | 9 |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
19190 | 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ |
7868 | 17 |
8891
633babea5f62
Unconditionally include <config.h> in unit tests.
Eric Blake <ebb9@byu.net>
parents:
8754
diff
changeset
|
18 #include <config.h> |
7868 | 19 |
20 #include "gl_array_oset.h" | |
21 | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 | |
12445
a8c91b846640
Move the malloc checking from module 'list' to new module 'xlist'.
Bruno Haible <bruno@clisp.org>
parents:
12444
diff
changeset
|
25 #include "gl_xlist.h" |
7868 | 26 #include "gl_array_list.h" |
12496
a48d3d749ca5
Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents:
12445
diff
changeset
|
27 #include "macros.h" |
7868 | 28 |
29 static const char *objects[30] = | |
30 { | |
31 "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", | |
32 "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" | |
33 }; | |
34 | |
35 #define RANDOM(n) (rand () % (n)) | |
36 #define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] | |
37 | |
38 static void | |
39 check_equals (gl_oset_t set1, gl_list_t set2) | |
40 { | |
41 size_t n = gl_oset_size (set1); | |
42 gl_oset_iterator_t iter1; | |
43 gl_list_iterator_t iter2; | |
44 const void *elt1; | |
45 const void *elt2; | |
46 gl_list_node_t node2; | |
47 size_t i; | |
48 | |
49 iter1 = gl_oset_iterator (set1); | |
50 iter2 = gl_list_iterator (set2); | |
51 for (i = 0; i < n; i++) | |
52 { | |
53 ASSERT (gl_oset_iterator_next (&iter1, &elt1)); | |
54 ASSERT (gl_list_iterator_next (&iter2, &elt2, &node2)); | |
55 ASSERT (elt1 == elt2); | |
56 } | |
57 ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); | |
58 ASSERT (!gl_list_iterator_next (&iter2, &elt2, &node2)); | |
59 gl_oset_iterator_free (&iter1); | |
60 gl_list_iterator_free (&iter2); | |
61 } | |
62 | |
63 static void | |
64 check_all (gl_oset_t set1, gl_list_t set2) | |
65 { | |
66 check_equals (set1, set2); | |
67 } | |
68 | |
69 int | |
70 main (int argc, char *argv[]) | |
71 { | |
72 gl_oset_t set1; | |
73 gl_list_t set2; | |
74 | |
75 /* Allow the user to provide a non-default random seed on the command line. */ | |
76 if (argc > 1) | |
77 srand (atoi (argv[1])); | |
78 | |
79 { | |
80 size_t initial_size = RANDOM (20); | |
81 size_t i; | |
82 unsigned int repeat; | |
83 | |
84 /* Create set1. */ | |
12444
29d240cb21b2
Move the malloc checking from module 'oset' to new module 'xoset'.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
85 set1 = gl_oset_nx_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); |
29d240cb21b2
Move the malloc checking from module 'oset' to new module 'xoset'.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
86 ASSERT (set1 != NULL); |
7868 | 87 |
88 /* Create set2. */ | |
8438
238942284e2f
Allow the use of a destructor for the values stored in the list.
Bruno Haible <bruno@clisp.org>
parents:
8436
diff
changeset
|
89 set2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); |
7868 | 90 |
91 check_all (set1, set2); | |
92 | |
93 /* Initialize them. */ | |
94 for (i = 0; i < initial_size; i++) | |
95 { | |
96 const char *obj = RANDOM_OBJECT (); | |
12444
29d240cb21b2
Move the malloc checking from module 'oset' to new module 'xoset'.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
97 ASSERT (gl_oset_nx_add (set1, obj) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
98 == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
99 ? false |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
100 : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); |
7868 | 101 check_all (set1, set2); |
102 } | |
103 | |
104 for (repeat = 0; repeat < 100000; repeat++) | |
105 { | |
106 unsigned int operation = RANDOM (3); | |
107 switch (operation) | |
108 { | |
109 case 0: | |
110 { | |
111 const char *obj = RANDOM_OBJECT (); | |
112 ASSERT (gl_oset_search (set1, obj) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
113 == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL)); |
7868 | 114 } |
115 break; | |
116 case 1: | |
117 { | |
118 const char *obj = RANDOM_OBJECT (); | |
12444
29d240cb21b2
Move the malloc checking from module 'oset' to new module 'xoset'.
Bruno Haible <bruno@clisp.org>
parents:
12421
diff
changeset
|
119 ASSERT (gl_oset_nx_add (set1, obj) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
120 == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
121 ? false |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
122 : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); |
7868 | 123 } |
124 break; | |
125 case 2: | |
126 { | |
127 const char *obj = RANDOM_OBJECT (); | |
128 ASSERT (gl_oset_remove (set1, obj) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
9889
diff
changeset
|
129 == gl_sortedlist_remove (set2, (gl_listelement_compar_fn)strcmp, obj)); |
7868 | 130 } |
131 break; | |
132 } | |
133 check_all (set1, set2); | |
134 } | |
135 | |
136 gl_oset_free (set1); | |
137 gl_list_free (set2); | |
138 } | |
139 | |
140 return 0; | |
141 } |