1 // SPDX-License-Identifier: GPL-2.0
4 * Roman Kapl, SYSGO, rka@sysgo.com
16 #define ITERATIONS 10000
18 static int htab_fill(struct unit_test_state *uts,
19 struct hsearch_data *htab, size_t size)
22 struct env_entry item;
23 struct env_entry *ritem;
26 for (i = 0; i < size; i++) {
27 sprintf(key, "%d", (int)i);
32 ut_asserteq(1, hsearch_r(item, ENV_ENTER, &ritem, htab, 0));
38 static int htab_check_fill(struct unit_test_state *uts,
39 struct hsearch_data *htab, size_t size)
42 struct env_entry item;
43 struct env_entry *ritem;
46 for (i = 0; i < size; i++) {
47 sprintf(key, "%d", (int)i);
52 hsearch_r(item, ENV_FIND, &ritem, htab, 0);
54 ut_asserteq_str(key, ritem->key);
55 ut_asserteq_str(key, ritem->data);
61 static int htab_create_delete(struct unit_test_state *uts,
62 struct hsearch_data *htab, size_t iterations)
65 struct env_entry item;
66 struct env_entry *ritem;
69 for (i = 0; i < iterations; i++) {
70 sprintf(key, "cd-%d", (int)i);
75 hsearch_r(item, ENV_ENTER, &ritem, htab, 0);
78 hsearch_r(item, ENV_FIND, &ritem, htab, 0);
80 ut_asserteq_str(key, ritem->key);
81 ut_asserteq_str(key, ritem->data);
83 ut_asserteq(0, hdelete_r(key, htab, 0));
89 /* Completely fill up the hash table */
90 static int env_test_htab_fill(struct unit_test_state *uts)
92 struct hsearch_data htab;
94 memset(&htab, 0, sizeof(htab));
95 ut_asserteq(1, hcreate_r(SIZE, &htab));
97 ut_assertok(htab_fill(uts, &htab, SIZE));
98 ut_assertok(htab_check_fill(uts, &htab, SIZE));
99 ut_asserteq(SIZE, htab.filled);
105 ENV_TEST(env_test_htab_fill, 0);
107 /* Fill the hashtable up halfway an repeateadly delete/create elements
108 * and check for corruption
110 static int env_test_htab_deletes(struct unit_test_state *uts)
112 struct hsearch_data htab;
114 memset(&htab, 0, sizeof(htab));
115 ut_asserteq(1, hcreate_r(SIZE, &htab));
117 ut_assertok(htab_fill(uts, &htab, SIZE / 2));
118 ut_assertok(htab_create_delete(uts, &htab, ITERATIONS));
119 ut_assertok(htab_check_fill(uts, &htab, SIZE / 2));
120 ut_asserteq(SIZE / 2, htab.filled);
126 ENV_TEST(env_test_htab_deletes, 0);