+ printf("Test #5: lookup lower equal (16-bit).\n");
+
+ for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) {
+ struct ja_test_node *node = node_alloc();
+
+ key = ka[i];
+ ja_test_node_init(node, key);
+ rcu_read_lock();
+ ret = cds_ja_add(test_ja, key, &node->node);
+ rcu_read_unlock();
+ if (ret) {
+ fprintf(stderr, "Error (%d) adding node %" PRIu64 "\n",
+ ret, key);
+ assert(0);
+ }
+ }
+
+ for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) {
+ struct cds_hlist_head head;
+ struct ja_test_node *node;
+
+ key = ka[i] + ka_test_offset;
+ rcu_read_lock();
+ head = cds_ja_lookup_lower_equal(test_ja, key);
+ if (cds_hlist_empty(&head)) {
+ fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n",
+ ka[i], key);
+ assert(0);
+ }
+ node = cds_hlist_first_entry_rcu(&head, struct ja_test_node, node.list);
+ 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);
+ assert(0);
+ }
+ rcu_read_unlock();
+ }
+
+ for (i = 0; i < CAA_ARRAY_SIZE(ka); i++) {
+ struct cds_hlist_head head;
+ struct ja_test_node *node;
+
+ key = ka[i]; /* without offset */
+ rcu_read_lock();
+ head = cds_ja_lookup_lower_equal(test_ja, key);
+ if (cds_hlist_empty(&head)) {
+ fprintf(stderr, "Error lookup lower equal. Cannot find expected key %" PRIu64" below or equal to %" PRIu64 ".\n",
+ ka[i], key);
+ assert(0);
+ }
+ node = cds_hlist_first_entry_rcu(&head, struct ja_test_node, node.list);
+ 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);
+ assert(0);
+ }
+ rcu_read_unlock();
+ }
+
+ printf("OK\n");
+
+ ret = cds_ja_destroy(test_ja, rcu_free_node);