X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Ftest_urcu_ja.c;h=a552db1b2e9ffb2e865705074b9bf6723e5549ff;hb=36305a3db8c572e25a6335c9384a5112bdfd8148;hp=ad72abd08c7ec9e7df1c9cc63596d998b9e26733;hpb=b023ba9fb95fbcfbedd3e499556959ad6706ce79;p=userspace-rcu.git diff --git a/tests/test_urcu_ja.c b/tests/test_urcu_ja.c index ad72abd..a552db1 100644 --- a/tests/test_urcu_ja.c +++ b/tests/test_urcu_ja.c @@ -228,7 +228,7 @@ int test_8bit_key(void) { int ret, i; uint64_t key; - uint64_t ka[] = { 4, 17, 100, 222 }; + uint64_t ka[] = { 5, 17, 100, 222 }; uint64_t ka_test_offset = 5; /* Test with 8-bit key */ @@ -310,7 +310,7 @@ int test_8bit_key(void) } printf("OK\n"); - printf("Test #5: lookup lower equal (8-bit).\n"); + printf("Test #5: lookup below/above equal (8-bit).\n"); for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct ja_test_node *node = node_alloc(); @@ -330,19 +330,20 @@ int test_8bit_key(void) for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct cds_ja_node *ja_node; struct ja_test_node *node; + uint64_t result_key; key = ka[i] + ka_test_offset; rcu_read_lock(); - ja_node = cds_ja_lookup_below_equal(test_ja, key); + ja_node = cds_ja_lookup_below_equal(test_ja, key, &result_key); if (!ja_node) { - fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + fprintf(stderr, "Error lookup below equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", ka[i], key); assert(0); } node = caa_container_of(ja_node, struct ja_test_node, node); - if (node->key != ka[i]) { - fprintf(stderr, "Error lookup lower equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 " instead.\n", - ka[i], key, node->key); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup below equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); assert(0); } rcu_read_unlock(); @@ -351,19 +352,55 @@ int test_8bit_key(void) for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct cds_ja_node *ja_node; struct ja_test_node *node; + uint64_t result_key; + + key = ka[i] - ka_test_offset; + rcu_read_lock(); + ja_node = cds_ja_lookup_above_equal(test_ja, key, &result_key); + if (!ja_node) { + fprintf(stderr, "Error lookup above equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + ka[i], key); + assert(0); + } + node = caa_container_of(ja_node, struct ja_test_node, node); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup above equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); + assert(0); + } + rcu_read_unlock(); + } + + for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { + struct cds_ja_node *ja_node; + struct ja_test_node *node; + uint64_t result_key; key = ka[i]; /* without offset */ rcu_read_lock(); - ja_node = cds_ja_lookup_below_equal(test_ja, key); + ja_node = cds_ja_lookup_below_equal(test_ja, key, &result_key); + if (!ja_node) { + fprintf(stderr, "Error lookup below equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + ka[i], key); + assert(0); + } + node = caa_container_of(ja_node, struct ja_test_node, node); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup below equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); + assert(0); + } + + ja_node = cds_ja_lookup_above_equal(test_ja, key, &result_key); if (!ja_node) { - fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + fprintf(stderr, "Error lookup above equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", ka[i], key); assert(0); } node = caa_container_of(ja_node, struct ja_test_node, node); - if (node->key != ka[i]) { - fprintf(stderr, "Error lookup lower equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 " instead.\n", - ka[i], key, node->key); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup above equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); assert(0); } rcu_read_unlock(); @@ -384,7 +421,7 @@ int test_16bit_key(void) { int ret, i; uint64_t key; - uint64_t ka[] = { 4, 105, 222, 4000, 4111, 59990, 65435 }; + uint64_t ka[] = { 105, 206, 4000, 4111, 59990, 65435 }; uint64_t ka_test_offset = 100; /* Test with 16-bit key */ @@ -469,7 +506,7 @@ int test_16bit_key(void) } printf("OK\n"); - printf("Test #5: lookup lower equal (16-bit).\n"); + printf("Test #5: lookup below/above equal (16-bit).\n"); for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct ja_test_node *node = node_alloc(); @@ -489,19 +526,20 @@ int test_16bit_key(void) for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct cds_ja_node *ja_node; struct ja_test_node *node; + uint64_t result_key; key = ka[i] + ka_test_offset; rcu_read_lock(); - ja_node = cds_ja_lookup_below_equal(test_ja, key); + ja_node = cds_ja_lookup_below_equal(test_ja, key, &result_key); if (!ja_node) { - fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + fprintf(stderr, "Error lookup below equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", ka[i], key); assert(0); } node = caa_container_of(ja_node, struct ja_test_node, node); - if (node->key != ka[i]) { - fprintf(stderr, "Error lookup lower equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 " instead.\n", - ka[i], key, node->key); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup below equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); assert(0); } rcu_read_unlock(); @@ -510,19 +548,55 @@ int test_16bit_key(void) for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { struct cds_ja_node *ja_node; struct ja_test_node *node; + uint64_t result_key; + + key = ka[i] - ka_test_offset; + rcu_read_lock(); + ja_node = cds_ja_lookup_above_equal(test_ja, key, &result_key); + if (!ja_node) { + fprintf(stderr, "Error lookup above equal. Cannot find expected key %" PRIu64" above or equal to %" PRIu64 ".\n", + ka[i], key); + assert(0); + } + node = caa_container_of(ja_node, struct ja_test_node, node); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup above equal. Expecting key %" PRIu64 " above or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); + assert(0); + } + rcu_read_unlock(); + } + + for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) { + struct cds_ja_node *ja_node; + struct ja_test_node *node; + uint64_t result_key; key = ka[i]; /* without offset */ rcu_read_lock(); - ja_node = cds_ja_lookup_below_equal(test_ja, key); + ja_node = cds_ja_lookup_below_equal(test_ja, key, &result_key); + if (!ja_node) { + fprintf(stderr, "Error lookup below equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + ka[i], key); + assert(0); + } + node = caa_container_of(ja_node, struct ja_test_node, node); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup below equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); + assert(0); + } + + ja_node = cds_ja_lookup_above_equal(test_ja, key, &result_key); if (!ja_node) { - fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n", + fprintf(stderr, "Error lookup above equal. Cannot find expected key %" PRIu64" above or equal to %" PRIu64 ".\n", ka[i], key); assert(0); } node = caa_container_of(ja_node, struct ja_test_node, node); - if (node->key != ka[i]) { - fprintf(stderr, "Error lookup lower equal. Expecting key %" PRIu64 " below or equal to %" PRIu64 ", but found %" PRIu64 " instead.\n", - ka[i], key, node->key); + if (node->key != ka[i] || result_key != ka[i]) { + fprintf(stderr, "Error lookup above equal. Expecting key %" PRIu64 " above or equal to %" PRIu64 ", but found %" PRIu64 "/%" PRIu64" instead.\n", + ka[i], key, node->key, result_key); assert(0); } rcu_read_unlock();