summaryrefslogtreecommitdiffstats
path: root/regressions/ck_hs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-07-23 11:28:52 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-07-23 11:28:52 +0000
commitcca122ce9a0e5c8ebe745b6ae785b5b5c80f4fc6 (patch)
treeed241f8b8e5344df624226d5217cccec5e84329a /regressions/ck_hs
parentAdding upstream version 0.6.0. (diff)
downloadck-upstream/0.7.1.tar.xz
ck-upstream/0.7.1.zip
Adding upstream version 0.7.1.upstream/0.7.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--regressions/ck_hs/benchmark/apply.c4
-rw-r--r--regressions/ck_hs/benchmark/parallel_bytestring.c16
-rw-r--r--regressions/ck_hs/benchmark/serial.c4
-rw-r--r--regressions/ck_hs/validate/serial.c92
4 files changed, 96 insertions, 20 deletions
diff --git a/regressions/ck_hs/benchmark/apply.c b/regressions/ck_hs/benchmark/apply.c
index ca4a3da..e8b2294 100644
--- a/regressions/ck_hs/benchmark/apply.c
+++ b/regressions/ck_hs/benchmark/apply.c
@@ -6,9 +6,9 @@
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- * 1. Redistributions of source code must retain the above copyrighs
+ * 1. Redistributions of source code must retain the above copyrights
* notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyrighs
+ * 2. Redistributions in binary form must reproduce the above copyrights
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
diff --git a/regressions/ck_hs/benchmark/parallel_bytestring.c b/regressions/ck_hs/benchmark/parallel_bytestring.c
index 6d38379..3275b05 100644
--- a/regressions/ck_hs/benchmark/parallel_bytestring.c
+++ b/regressions/ck_hs/benchmark/parallel_bytestring.c
@@ -5,9 +5,9 @@
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- * 1. Redistributions of source code must retain the above copyrighs
+ * 1. Redistributions of source code must retain the above copyrights
* notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyrighs
+ * 2. Redistributions in binary form must reproduce the above copyrights
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
@@ -147,7 +147,7 @@ set_init(void)
#endif
ck_epoch_init(&epoch_hs);
- ck_epoch_register(&epoch_hs, &epoch_wr);
+ ck_epoch_register(&epoch_hs, &epoch_wr, NULL);
common_srand48((long int)time(NULL));
if (ck_hs_init(&hs, mode, hs_hash, hs_compare, &my_allocator, 65536, common_lrand48()) == false) {
perror("ck_hs_init");
@@ -234,7 +234,7 @@ reader(void *unused)
perror("WARNING: Failed to affine thread");
s = j = a = 0;
- ck_epoch_register(&epoch_hs, &epoch_record);
+ ck_epoch_register(&epoch_hs, &epoch_record, NULL);
for (;;) {
j++;
ck_epoch_begin(&epoch_record, NULL);
@@ -454,8 +454,8 @@ main(int argc, char *argv[])
ck_epoch_record_t epoch_temporary = epoch_wr;
ck_epoch_synchronize(&epoch_wr);
- fprintf(stderr, " '- Summary: %u pending, %u peak, %lu reclamations -> "
- "%u pending, %u peak, %lu reclamations\n\n",
+ fprintf(stderr, " '- Summary: %u pending, %u peak, %u reclamations -> "
+ "%u pending, %u peak, %u reclamations\n\n",
epoch_temporary.n_pending, epoch_temporary.n_peak, epoch_temporary.n_dispatch,
epoch_wr.n_pending, epoch_wr.n_peak, epoch_wr.n_dispatch);
@@ -593,8 +593,8 @@ main(int argc, char *argv[])
epoch_temporary = epoch_wr;
ck_epoch_synchronize(&epoch_wr);
- fprintf(stderr, " '- Summary: %u pending, %u peak, %lu reclamations -> "
- "%u pending, %u peak, %lu reclamations\n\n",
+ fprintf(stderr, " '- Summary: %u pending, %u peak, %u reclamations -> "
+ "%u pending, %u peak, %u reclamations\n\n",
epoch_temporary.n_pending, epoch_temporary.n_peak, epoch_temporary.n_dispatch,
epoch_wr.n_pending, epoch_wr.n_peak, epoch_wr.n_dispatch);
return 0;
diff --git a/regressions/ck_hs/benchmark/serial.c b/regressions/ck_hs/benchmark/serial.c
index ac4caff..5b4cd50 100644
--- a/regressions/ck_hs/benchmark/serial.c
+++ b/regressions/ck_hs/benchmark/serial.c
@@ -5,9 +5,9 @@
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- * 1. Redistributions of source code must retain the above copyrighs
+ * 1. Redistributions of source code must retain the above copyrights
* notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyrighs
+ * 2. Redistributions in binary form must reproduce the above copyrights
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
diff --git a/regressions/ck_hs/validate/serial.c b/regressions/ck_hs/validate/serial.c
index a16fc82..634924a 100644
--- a/regressions/ck_hs/validate/serial.c
+++ b/regressions/ck_hs/validate/serial.c
@@ -5,9 +5,9 @@
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- * 1. Redistributions of source code must retain the above copyrighs
+ * 1. Redistributions of source code must retain the above copyrights
* notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyrighs
+ * 2. Redistributions in binary form must reproduce the above copyrights
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
@@ -57,12 +57,28 @@ static struct ck_malloc my_allocator = {
.free = hs_free
};
+static void
+stub_free(void *p, size_t b, bool r)
+{
+
+ (void)b;
+ (void)r;
+
+ fprintf(stderr, "Ignoring reclamation of %p\n", p);
+ return;
+}
+
+static struct ck_malloc stub_allocator = {
+ .malloc = hs_malloc,
+ .free = stub_free
+};
+
const char *test[] = { "Samy", "Al", "Bahra", "dances", "in", "the", "wind.", "Once",
- "upon", "a", "time", "his", "gypsy", "ate", "one", "itsy",
- "bitsy", "spider.", "What", "goes", "up", "must",
- "come", "down.", "What", "is", "down", "stays",
- "down.", "A", "B", "C", "D", "E", "F", "G", "H",
- "I", "J", "K", "L", "M", "N", "O", "P", "Q" };
+ "upon", "a", "time", "his", "gypsy", "ate", "one", "itsy",
+ "bitsy", "spider.", "What", "goes", "up", "must",
+ "come", "down.", "What", "is", "down", "stays",
+ "down.", "A", "B", "C", "D", "E", "F", "G", "H",
+ "I", "J", "K", "L", "M", "N", "O", "P", "Q" };
const char *negative = "negative";
@@ -136,13 +152,21 @@ run_test(unsigned int is, unsigned int ad)
size_t i, j;
const char *blob = "#blobs";
unsigned long h;
+ ck_hs_iterator_t it;
if (ck_hs_init(&hs[0], CK_HS_MODE_SPMC | CK_HS_MODE_OBJECT | ad, hs_hash, hs_compare, &my_allocator, is, 6602834) == false)
ck_error("ck_hs_init\n");
for (j = 0; j < size; j++) {
for (i = 0; i < sizeof(test) / sizeof(*test); i++) {
- h = test[i][0];
+ unsigned long h_1;
+
+ h = CK_HS_HASH(&hs[j], hs_hash, test[i]);
+ h_1 = ck_hs_hash(&hs[j], test[i]);
+
+ if (h != h_1)
+ ck_error("h != h_1 (%lu != %lu)\n", h, h_1);
+
if (ck_hs_get(&hs[j], h, test[i]) != NULL) {
continue;
}
@@ -181,6 +205,58 @@ run_test(unsigned int is, unsigned int ad)
}
}
+ /* Test iteration */
+ if (j == 0) {
+ /* Avoid the blob stuff as it's not in the test array. */
+ ck_hs_iterator_init(&it);
+ void *k = NULL;
+ int matches = 0;
+ int entries = 0;
+ while (ck_hs_next(&hs[j], &it, &k) == true) {
+ entries++;
+ for (i = 0; i < sizeof(test) / sizeof(*test); i++) {
+ int x = strcmp(test[i], (char *)k);
+ if (x == 0) {
+ matches++;
+ break;
+ }
+ }
+ }
+
+ if (entries != matches) {
+ ck_error("Iteration must match all elements, has: %d, matched: %d [%d]", entries, matches, is);
+ }
+
+ /*
+ * Now test iteration in the face of grows (spmc).
+ * In order to test usage after reclamation, we
+ * stub the allocator.
+ */
+ ck_hs_iterator_init(&it);
+ k = NULL;
+ matches = 0;
+ entries = 0;
+ hs[j].m = &stub_allocator;
+ while (ck_hs_next_spmc(&hs[j], &it, &k) == true) {
+ entries++;
+ for (i = 0; i < sizeof(test) / sizeof(*test); i++) {
+ int x = strcmp(test[i], (char *)k);
+ if (x == 0) {
+ matches++;
+ break;
+ }
+ }
+ if (entries == 20) {
+ ck_hs_grow(&hs[j], 128);
+ }
+ }
+ hs[j].m = &my_allocator;
+
+ if (entries != matches) {
+ ck_error("After growth, iteration must match all elements, has: %d, matched: %d [%d]", entries, matches, is);
+ }
+ }
+
/* Test grow semantics. */
ck_hs_grow(&hs[j], 128);
for (i = 0; i < sizeof(test) / sizeof(*test); i++) {