static void test_bson_oid_compare (void) { bson_oid_t oid; bson_oid_t oid2; bson_oid_init_from_string (&oid, "000000000000000000001234"); bson_oid_init_from_string (&oid2, "000000000000000000001234"); BSON_ASSERT (0 == bson_oid_compare (&oid, &oid2)); BSON_ASSERT (true == bson_oid_equal (&oid, &oid2)); bson_oid_init_from_string (&oid, "000000000000000000001234"); bson_oid_init_from_string (&oid2, "000000000000000000004321"); BSON_ASSERT (bson_oid_compare (&oid, &oid2) < 0); BSON_ASSERT (bson_oid_compare (&oid2, &oid) > 0); BSON_ASSERT (false == bson_oid_equal (&oid, &oid2)); }
static void test_bson_oid_compare (void) { bson_oid_t oid; bson_oid_t oid2; bson_oid_init_from_string(&oid, "000000000000000000001234"); bson_oid_init_from_string(&oid2, "000000000000000000001234"); assert(0 == bson_oid_compare(&oid, &oid2)); assert(TRUE == bson_oid_equal(&oid, &oid2)); bson_oid_init_from_string(&oid, "000000000000000000001234"); bson_oid_init_from_string(&oid2, "000000000000000000004321"); assert(bson_oid_compare(&oid, &oid2) < 0); assert(bson_oid_compare(&oid2, &oid) > 0); assert(FALSE == bson_oid_equal(&oid, &oid2)); }
/* *-------------------------------------------------------------------------- * * _mongoc_topology_description_later_election -- * * Check if we've seen a more recent election in the replica set * than this server has. * * Returns: * True if the topology description's max replica set version plus * election id is later than the server description's. * * Side effects: * None * *-------------------------------------------------------------------------- */ static bool _mongoc_topology_description_later_election (mongoc_topology_description_t *td, mongoc_server_description_t *sd) { /* initially max_set_version is -1 and max_election_id is zeroed */ return td->max_set_version > sd->set_version || (td->max_set_version == sd->set_version && bson_oid_compare (&td->max_election_id, &sd->election_id) > 0); }
static void test_bson_oid_init_sequence_with_tid (void) { bson_context_t context; bson_oid_t oid; bson_oid_t oid2; int i; bson_context_init(&context, BSON_CONTEXT_USE_TASK_ID); bson_oid_init_sequence(&oid, &context); for (i = 0; i < 10000; i++) { bson_oid_init_sequence(&oid2, &context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 > bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid2, &oid); } }
static void test_bson_oid_init_sequence_thread_safe (void) { bson_context_t context; bson_oid_t oid; bson_oid_t oid2; int i; bson_context_init(&context, BSON_CONTEXT_THREAD_SAFE); bson_oid_init_sequence(&oid, &context); for (i = 0; i < 10000; i++) { bson_oid_init_sequence(&oid2, &context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 > bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid2, &oid); } }
static void test_bson_oid_init (void) { bson_context_t context; bson_oid_t oid; bson_oid_t oid2; int i; bson_context_init(&context, BSON_CONTEXT_NONE); bson_oid_init(&oid, &context); for (i = 0; i < 10000; i++) { bson_oid_init(&oid2, &context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 > bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid2, &oid); } }
static void * oid_worker (void *data) { bson_context_t *context = data; bson_oid_t oid; bson_oid_t oid2; int i; bson_oid_init(&oid2, context); for (i = 0; i < 500000; i++) { bson_oid_init(&oid, context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 < bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid, &oid2); } return NULL; }
static void test_bson_oid_init_sequence (void) { bson_context_t *context; bson_oid_t oid; bson_oid_t oid2; int i; context = bson_context_new(BSON_CONTEXT_NONE); bson_oid_init_sequence(&oid, context); for (i = 0; i < 10000; i++) { bson_oid_init_sequence(&oid2, context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 > bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid2, &oid); } bson_context_destroy(context); }
static void test_bson_oid_init_sequence_with_tid (void) { bson_context_t *context; bson_oid_t oid; bson_oid_t oid2; int i; context = bson_context_new (BSON_CONTEXT_USE_TASK_ID); bson_oid_init_sequence (&oid, context); for (i = 0; i < 10000; i++) { bson_oid_init_sequence (&oid2, context); BSON_ASSERT (false == bson_oid_equal (&oid, &oid2)); BSON_ASSERT (0 > bson_oid_compare (&oid, &oid2)); bson_oid_copy (&oid2, &oid); } bson_context_destroy (context); }
static void test_bson_oid_init_sequence_thread_safe (void) { bson_context_t *context; bson_oid_t oid; bson_oid_t oid2; int i; context = bson_context_new (BSON_CONTEXT_THREAD_SAFE); bson_oid_init_sequence (&oid, context); for (i = 0; i < 10000; i++) { bson_oid_init_sequence (&oid2, context); BSON_ASSERT (false == bson_oid_equal (&oid, &oid2)); BSON_ASSERT (0 > bson_oid_compare (&oid, &oid2)); bson_oid_copy (&oid2, &oid); } bson_context_destroy (context); }
int oid_compare(const oid& lhs, const oid& rhs) { if (!lhs._is_valid || !rhs._is_valid) { if (lhs._is_valid) { return 1; } else if (rhs._is_valid) { return -1; } else { return 0; } } bson_oid_t lhs_oid; bson_oid_t rhs_oid; std::memcpy(lhs_oid.bytes, lhs.bytes(), sizeof(lhs_oid.bytes)); std::memcpy(rhs_oid.bytes, rhs.bytes(), sizeof(rhs_oid.bytes)); return bson_oid_compare(&lhs_oid, &rhs_oid); }
static void test_bson_oid_init (void) { bson_context_t *context; bson_oid_t oid; bson_oid_t oid2; int i; context = bson_context_new(BSON_CONTEXT_NONE); bson_oid_init(&oid, context); for (i = 0; i < 10000; i++) { bson_oid_init(&oid2, context); assert(FALSE == bson_oid_equal(&oid, &oid2)); assert(0 > bson_oid_compare(&oid, &oid2)); bson_oid_copy(&oid2, &oid); } bson_context_destroy(context); /* * Test that the shared context works. */ bson_oid_init(&oid, NULL); BSON_ASSERT(bson_context_get_default()); }