void test_internal_type_conversion() { // Create a table and insert rows. auto db = grnxx::open_db(""); auto table = db->create_table("Table"); table->insert_row(); table->insert_row(); table->insert_row(); table->insert_row(); auto column = table->create_column("Column", GRNXX_INT); // Set the first 8-bit integer. column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0)); grnxx::Datum datum; column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); // Conversion from 8-bit to 16-bit. column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 8)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 8)); // Conversion from 16-bit to 32-bit. column->set(grnxx::Int(2), grnxx::Int(int64_t(1) << 16)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 8)); column->get(grnxx::Int(2), &datum); assert(datum.as_int().raw() == (int64_t(1) << 16)); // Conversion from 32-bit to 64-bit. column->set(grnxx::Int(3), grnxx::Int(int64_t(1) << 32)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 8)); column->get(grnxx::Int(2), &datum); assert(datum.as_int().raw() == (int64_t(1) << 16)); column->get(grnxx::Int(3), &datum); assert(datum.as_int().raw() == (int64_t(1) << 32)); table->remove_column("Column"); column = table->create_column("Column", GRNXX_INT); // Conversion from 8-bit to 32-bit. column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0)); column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 16)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 16)); table->remove_column("Column"); column = table->create_column("Column", GRNXX_INT); // Conversion from 8-bit to 64-bit. column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 0)); column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 32)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 0)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 32)); table->remove_column("Column"); column = table->create_column("Column", GRNXX_INT); // Conversion from 16-bit to 64-bit. column->set(grnxx::Int(0), grnxx::Int(int64_t(1) << 8)); column->set(grnxx::Int(1), grnxx::Int(int64_t(1) << 32)); column->get(grnxx::Int(0), &datum); assert(datum.as_int().raw() == (int64_t(1) << 8)); column->get(grnxx::Int(1), &datum); assert(datum.as_int().raw() == (int64_t(1) << 32)); }
void test_table() { // Create a database with the default options. auto db = grnxx::open_db(""); // Create a table named "Table". auto table = db->create_table("Table"); assert(table->db() == db.get()); assert(table->name() == "Table"); assert(table->num_columns() == 0); assert(!table->key_column()); assert(table->num_rows() == 0); assert(table->max_row_id().is_na()); assert(table->is_empty()); assert(table->is_full()); // Create a column named "Column_1". auto column = table->create_column("Column_1", GRNXX_BOOL); assert(column->name() == "Column_1"); assert(table->num_columns() == 1); assert(table->get_column(0) == column); assert(table->find_column("Column_1") == column); // The following create_column() must fail because "Column_1" already exists. try { table->create_column("Column_1", GRNXX_BOOL); assert(false); } catch (...) { } // Create columns named "Column_2" and Column_3". table->create_column("Column_2", GRNXX_BOOL); table->create_column("Column_3", GRNXX_BOOL); assert(table->num_columns() == 3); // Remove "Column_2". table->remove_column("Column_2"); assert(table->num_columns() == 2); assert(table->get_column(0)->name() == "Column_1"); assert(table->get_column(1)->name() == "Column_3"); // Recreate "Column_2". table->create_column("Column_2", GRNXX_BOOL); // Move "Column_3" to the next to "Column_2". table->reorder_column("Column_3", "Column_2"); assert(table->get_column(0)->name() == "Column_1"); assert(table->get_column(1)->name() == "Column_2"); assert(table->get_column(2)->name() == "Column_3"); // Move "Column_3" to the head. table->reorder_column("Column_3", ""); assert(table->get_column(0)->name() == "Column_3"); assert(table->get_column(1)->name() == "Column_1"); assert(table->get_column(2)->name() == "Column_2"); // Move "Column_2" to the next to "Column3". table->reorder_column("Column_2", "Column_3"); assert(table->get_column(0)->name() == "Column_3"); assert(table->get_column(1)->name() == "Column_2"); assert(table->get_column(2)->name() == "Column_1"); }
void Matrix::remove_row_col( int row_idx, int column_idx ) { remove_row( row_idx ); remove_column( column_idx ); }