void test_scalar_index(void) { gchar *db_path; const gchar *name; grn_obj *users, *items, *checks, *checked; grn_obj_close(context, db); remove_tmp_directory(); g_mkdir_with_parents(tmp_directory, 0700); db_path = g_build_filename(tmp_directory, "inverted-index", NULL); db = grn_db_create(context, db_path, NULL); g_free(db_path); name = "users"; users = grn_table_create(context, name, strlen(name), NULL, GRN_OBJ_TABLE_NO_KEY|GRN_OBJ_PERSISTENT, NULL, 0); cut_assert_not_null(users); name = "items"; items = grn_table_create(context, name, strlen(name), NULL, GRN_OBJ_TABLE_NO_KEY|GRN_OBJ_PERSISTENT, NULL, 0); cut_assert_not_null(items); name = "checks"; checks = grn_column_create(context, users, name, strlen(name), NULL, GRN_OBJ_COLUMN_SCALAR|GRN_OBJ_PERSISTENT, items); cut_assert_not_null(checks); name = "checked"; checked = grn_column_create(context, items, name, strlen(name), NULL, GRN_OBJ_COLUMN_INDEX|GRN_OBJ_PERSISTENT, users); cut_assert_not_null(checked); grn_test_assert(set_index_source(checked, checks)); insert_and_search(users, items, checks, checked); grn_obj_close(context, checks); grn_obj_close(context, checked); grn_obj_close(context, items); grn_obj_close(context, users); }
bool init( const char *file, memory_pool &xdr_pool, size_t vb_offset, size_t ib_offset ) { file_map<model_desc_t> f( file ); if( model_desc_t *desc = f.get_object() ) { uint32_t *ptr = (uint32_t *)xdr_pool.alloc( 0 ); fifo = ptr; ptr += blend_enable( 0, ptr, Nv3D ); ptr += depth_enable( 1, 1, ptr, Nv3D ); ptr += set_geometry_source( &desc->position, DDR, vb_offset, ptr, Nv3D ); ptr += set_geometry_source( &desc->texcoord, DDR, vb_offset, ptr, Nv3D ); ptr += set_index_source( DDR, ib_offset, ptr, Nv3D ); ptr += draw_primitives( 1, TRIANGLES, 0, desc->indices_num, ptr, Nv3D ); cmd_size = ptr - fifo; xdr_pool.alloc( cmd_size * 4 ); return true; } return false; }
void test_int_index(void) { gchar *db_path, *name; grn_obj *users, *items, *checks, *checked, *int_type; remove_tmp_directory(); g_mkdir_with_parents(tmp_directory, 0700); db_path = g_build_filename(tmp_directory, "inverted-index", NULL); db = grn_db_create(context, db_path, NULL); g_free(db_path); int_type = grn_ctx_at(context, GRN_DB_INT32); cut_assert_not_null(int_type); name = "users"; users = grn_table_create(context, name, strlen(name), NULL, GRN_OBJ_TABLE_NO_KEY|GRN_OBJ_PERSISTENT, NULL, 0); cut_assert_not_null(users); name = "items"; items = grn_table_create(context, name, strlen(name), NULL, GRN_OBJ_TABLE_PAT_KEY|GRN_OBJ_PERSISTENT, int_type, 0); cut_assert_not_null(items); name = "checks"; checks = grn_column_create(context, users, name, strlen(name), NULL, GRN_OBJ_COLUMN_SCALAR|GRN_OBJ_PERSISTENT, items); cut_assert_not_null(checks); name = "checked"; checked = grn_column_create(context, items, name, strlen(name), NULL, GRN_OBJ_COLUMN_INDEX|GRN_OBJ_PERSISTENT, users); cut_assert_not_null(checked); grn_test_assert(set_index_source(checked, checks)); { int32_t key = 1; grn_obj value, query, *res; grn_id user1 = grn_table_add(context, users, NULL, 0, NULL); grn_id user2 = grn_table_add(context, users, NULL, 0, NULL); grn_id item = grn_table_add(context, items, &key, sizeof(int32_t), NULL); GRN_TEXT_INIT(&value, 0); GRN_TEXT_INIT(&query, 0); res = grn_table_create(context, NULL, 0, NULL, GRN_TABLE_HASH_KEY, users, 0); cut_assert_not_null(res); grn_bulk_write(context, &value, (void *)&item, sizeof(grn_id)); value.header.domain = grn_obj_id(context, items); grn_bulk_write(context, &query, (void *)&key, sizeof(int32_t)); query.header.domain = GRN_DB_INT32; grn_test_assert(grn_obj_set_value(context, checks, user1, &value, GRN_OBJ_SET)); grn_test_assert(grn_obj_search(context, checked, &value, res, GRN_OP_OR, NULL)); cut_assert_equal_int(grn_table_size(context, res), 1); grn_test_assert(grn_obj_set_value(context, checks, user2, &value, GRN_OBJ_SET)); grn_test_assert(grn_obj_search(context, checked, &query, res, GRN_OP_OR, NULL)); cut_assert_equal_int(grn_table_size(context, res), 2); grn_obj_close(context, &query); grn_obj_close(context, &value); grn_obj_close(context, res); } grn_obj_close(context, checks); grn_obj_close(context, checked); grn_obj_close(context, items); grn_obj_close(context, users); }