static void test_bson_iter_mixed (void) { bson_iter_t iter; bson_decimal128_t iter_value; bson_decimal128_t value; bson_t *b; bson_t *b2; b = bson_new(); b2 = bson_new(); value.high = 0; value.low = 1; assert(bson_append_utf8(b2, "foo", -1, "bar", -1)); assert(bson_append_code(b, "0", -1, "var a = {};")); assert(bson_append_code_with_scope(b, "1", -1, "var b = {};", b2)); assert(bson_append_int32(b, "2", -1, 1234)); assert(bson_append_int64(b, "3", -1, 4567)); assert(bson_append_time_t(b, "4", -1, 123456)); assert(bson_append_decimal128(b, "5", -1, &value)); assert(bson_iter_init(&iter, b)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_CODE(&iter)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_CODEWSCOPE(&iter)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_INT32(&iter)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_INT64(&iter)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_DATE_TIME(&iter)); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_DECIMAL128(&iter)); assert(!bson_iter_next(&iter)); assert(bson_iter_init_find(&iter, b, "3")); assert(!strcmp(bson_iter_key(&iter), "3")); assert(bson_iter_int64(&iter) == 4567); assert(bson_iter_next(&iter)); assert(BSON_ITER_HOLDS_DATE_TIME(&iter)); assert(bson_iter_time_t(&iter) == 123456); assert(bson_iter_date_time(&iter) == 123456000); assert(bson_iter_next(&iter)); /* This test uses memcmp because libbson lacks decimal128 comparison. */ bson_iter_decimal128(&iter, &iter_value); assert(memcmp(&iter_value, &value, sizeof(value)) == 0); assert(!bson_iter_next(&iter)); bson_destroy(b); bson_destroy(b2); }
static void test_bson_append_code_with_scope (void) { const bson_uint8_t *scope_buf = NULL; bson_uint32_t scopelen = 0; bson_uint32_t len = 0; bson_iter_t iter; bson_bool_t r; const char *code = NULL; bson_t *b; bson_t *b2; bson_t *scope; /* Test with empty bson, which converts to just CODE type. */ b = bson_new(); scope = bson_new(); assert(bson_append_code_with_scope(b, "code", -1, "var a = {};", scope)); b2 = get_bson("test30.bson"); assert_bson_equal(b, b2); r = bson_iter_init_find(&iter, b, "code"); assert(r); assert(BSON_ITER_HOLDS_CODE(&iter)); /* Not codewscope */ bson_destroy(b); bson_destroy(b2); bson_destroy(scope); /* Test with non-empty scope */ b = bson_new(); scope = bson_new(); assert(bson_append_utf8(scope, "foo", -1, "bar", -1)); assert(bson_append_code_with_scope(b, "code", -1, "var a = {};", scope)); b2 = get_bson("test31.bson"); assert_bson_equal(b, b2); r = bson_iter_init_find(&iter, b, "code"); assert(r); assert(BSON_ITER_HOLDS_CODEWSCOPE(&iter)); code = bson_iter_codewscope(&iter, &len, &scopelen, &scope_buf); assert(len == 11); assert(scopelen == scope->len); assert(!strcmp(code, "var a = {};")); bson_destroy(b); bson_destroy(b2); bson_destroy(scope); }