susumu.yata
null+****@clear*****
Mon Jul 14 15:11:34 JST 2014
susumu.yata 2014-07-14 15:11:34 +0900 (Mon, 14 Jul 2014) New Revision: 69bf1da61006efb6df7e3e3151aac2a5ce026b82 https://github.com/groonga/grnxx/commit/69bf1da61006efb6df7e3e3151aac2a5ce026b82 Message: Add comments to tests. Modified files: test/test_grnxx.cpp Modified: test/test_grnxx.cpp (+47 -3) =================================================================== --- test/test_grnxx.cpp 2014-07-14 14:49:07 +0900 (8ebcd2d) +++ test/test_grnxx.cpp 2014-07-14 15:11:34 +0900 (c4b29b4) @@ -32,10 +32,12 @@ namespace { void test_db() { grnxx::Error error; + // デフォルトの設定で空のデータベースを作成する. auto db = grnxx::open_db(&error, "", grnxx::DBOptions()); assert(db); assert(db->num_tables() == 0); + // "Table_1" という名前のテーブルを作成する. auto table = db->create_table(&error, "Table_1", grnxx::TableOptions()); assert(table); assert(table->name() == "Table_1"); @@ -44,30 +46,37 @@ void test_db() { assert(db->get_table(0) == table); assert(db->find_table(&error, "Table_1") == table); + // 同じ名前でテーブルを作成しようとすると失敗する. assert(!db->create_table(&error, "Table_1", grnxx::TableOptions())); + // "Table_2", "Table_3" という名前のテーブルを作成する. assert(db->create_table(&error, "Table_2", grnxx::TableOptions())); assert(db->create_table(&error, "Table_3", grnxx::TableOptions())); assert(db->num_tables() == 3); + // "Table_2" という名前のテーブルを破棄する. assert(db->remove_table(&error, "Table_2")); assert(db->num_tables() == 2); assert(db->get_table(0)->name() == "Table_1"); assert(db->get_table(1)->name() == "Table_3"); + // "Table_2" という名前のテーブルを作成しなおす. assert(db->create_table(&error, "Table_2", grnxx::TableOptions())); + // "Table_3" を "Table_2" の後ろに移動する. assert(db->reorder_table(&error, "Table_3", "Table_2")); assert(db->get_table(0)->name() == "Table_1"); assert(db->get_table(1)->name() == "Table_2"); assert(db->get_table(2)->name() == "Table_3"); + // "Table_3" を先頭に移動する. assert(db->reorder_table(&error, "Table_3", "")); assert(db->get_table(0)->name() == "Table_3"); assert(db->get_table(1)->name() == "Table_1"); assert(db->get_table(2)->name() == "Table_2"); + // "Table_2" を "Table_3" の後ろに移動する. assert(db->reorder_table(&error, "Table_2", "Table_3")); assert(db->get_table(0)->name() == "Table_3"); assert(db->get_table(1)->name() == "Table_2"); @@ -88,6 +97,7 @@ void test_table() { assert(!table->key_column()); assert(table->max_row_id() == 0); + // Bool を格納する "Column_1" という名前のカラムを作成する. auto column = table->create_column(&error, "Column_1", grnxx::BOOL_DATA, grnxx::ColumnOptions()); assert(column); @@ -97,34 +107,41 @@ void test_table() { assert(table->get_column(0) == column); assert(table->find_column(&error, "Column_1") == column); + // 同じ名前でカラムを作成しようとすると失敗する. assert(!table->create_column(&error, "Column_1", grnxx::BOOL_DATA, grnxx::ColumnOptions())); + // "Column_2", "Column_3" という名前のカラムを作成する. assert(table->create_column(&error, "Column_2", grnxx::BOOL_DATA, grnxx::ColumnOptions())); assert(table->create_column(&error, "Column_3", grnxx::BOOL_DATA, grnxx::ColumnOptions())); assert(table->num_columns() == 3); + // "Column_2" という名前のカラムを破棄する. assert(table->remove_column(&error, "Column_2")); assert(table->num_columns() == 2); assert(table->get_column(0)->name() == "Column_1"); assert(table->get_column(1)->name() == "Column_3"); + // "Column_2" という名前のカラムを作成しなおす. assert(table->create_column(&error, "Column_2", grnxx::BOOL_DATA, grnxx::ColumnOptions())); + // "Column_3" を "Column_2" の後ろに移動する. assert(table->reorder_column(&error, "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"); + // "Column_3" を先頭に移動する. assert(table->reorder_column(&error, "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"); + // "Column_2" を "Column_3" の後ろに移動する. assert(table->reorder_column(&error, "Column_2", "Column_3")); assert(table->get_column(0)->name() == "Column_3"); assert(table->get_column(1)->name() == "Column_2"); @@ -132,6 +149,7 @@ void test_table() { // TODO: set_key_column(), unset_key_column(). + // 最初の行を追加する. grnxx::Int row_id; assert(table->insert_row(&error, grnxx::NULL_ROW_ID, grnxx::Datum(), &row_id)); @@ -141,6 +159,7 @@ void test_table() { assert(table->test_row(&error, 1)); assert(!table->test_row(&error, 2)); + // さらに 2 行追加する. assert(table->insert_row(&error, grnxx::NULL_ROW_ID, grnxx::Datum(), &row_id)); assert(table->insert_row(&error, grnxx::NULL_ROW_ID, @@ -153,6 +172,7 @@ void test_table() { assert(table->test_row(&error, 3)); assert(!table->test_row(&error, 4)); + // 2 番目の行を削除する. assert(table->remove_row(&error, 2)); assert(table->max_row_id() == 3); assert(!table->test_row(&error, 0)); @@ -163,10 +183,12 @@ void test_table() { // TODO: find_row(). + // デフォルト(行 ID 昇順)のカーソルを作成する. grnxx::CursorOptions cursor_options; auto cursor = table->create_cursor(&error, cursor_options); assert(cursor); + // カーソルからレコードを読み出す. grnxx::RecordSet record_set; assert(cursor->read(&error, 0, &record_set) == 0); @@ -181,6 +203,7 @@ void test_table() { record_set.clear(); + // 行 ID 降順のカーソルを作成する. cursor_options.order_type = grnxx::REVERSE_ORDER; cursor = table->create_cursor(&error, cursor_options); assert(cursor); @@ -200,10 +223,12 @@ void test_column() { auto table = db->create_table(&error, "Table", grnxx::TableOptions()); assert(table); + // 最初の行を追加する. grnxx::Int row_id; assert(table->insert_row(&error, grnxx::NULL_ROW_ID, grnxx::Datum(), &row_id)); + // Bool を格納する "BoolColumn" という名前のカラムを作成する. auto bool_column = table->create_column(&error, "BoolColumn", grnxx::BOOL_DATA, grnxx::ColumnOptions()); @@ -214,6 +239,7 @@ void test_column() { assert(!bool_column->has_key_attribute()); assert(bool_column->num_indexes() == 0); + // Int を格納する "IntColumn" という名前のカラムを作成する. auto int_column = table->create_column(&error, "IntColumn", grnxx::INT_DATA, grnxx::ColumnOptions()); @@ -226,6 +252,7 @@ void test_column() { grnxx::Datum datum; + // 最初の行にデフォルト値が格納されていることを確認する. assert(bool_column->get(&error, 1, &datum)); assert(datum.type() == grnxx::BOOL_DATA); assert(!datum.force_bool()); @@ -234,6 +261,7 @@ void test_column() { assert(datum.type() == grnxx::INT_DATA); assert(datum.force_int() == 0); + // 最初の行に正しく値を格納できるか確認する. assert(bool_column->set(&error, 1, grnxx::Bool(true))); assert(int_column->set(&error, 1, grnxx::Int(123))); @@ -265,6 +293,11 @@ void test_expression() { grnxx::ColumnOptions()); assert(int_column); + // 下記のデータを格納する. + // + // RowID BoolColumn IntColumn + // 1 false 123 + // 2 true 456 grnxx::Int row_id; assert(table->insert_row(&error, grnxx::NULL_ROW_ID, grnxx::Datum(), &row_id)); @@ -276,23 +309,25 @@ void test_expression() { assert(bool_column->set(&error, row_id, grnxx::Bool(true))); assert(int_column->set(&error, row_id, grnxx::Int(456))); + // 式構築用のオブジェクトを用意する. auto builder = grnxx::ExpressionBuilder::create(&error, table); assert(builder); + // もっとも単純な恒真式を作成する. assert(builder->push_datum(&error, grnxx::Bool(true))); - auto expression = builder->release(&error); assert(expression); + // 恒真式のフィルタにかけても変化しないことを確認する. + grnxx::RecordSet record_set; auto cursor = table->create_cursor(&error, grnxx::CursorOptions()); assert(cursor); - - grnxx::RecordSet record_set; assert(cursor->read(&error, 2, &record_set) == 2); assert(expression->filter(&error, &record_set)); assert(record_set.size() == 2); + // 演算子を含む恒真式を作成する. assert(builder->push_datum(&error, grnxx::Int(100))); assert(builder->push_datum(&error, grnxx::Int(100))); assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR)); @@ -302,24 +337,30 @@ void test_expression() { assert(expression->filter(&error, &record_set)); assert(record_set.size() == 2); + // "BoolColumn" という名前のカラムに格納されている値を返すだけの式を作成する. assert(builder->push_column(&error, "BoolColumn")); expression = builder->release(&error); assert(expression); + // フィルタとして使ったときの結果を確認する. assert(expression->filter(&error, &record_set)); assert(record_set.size() == 1); + assert(record_set.get(0).row_id == 2); record_set.clear(); cursor = table->create_cursor(&error, grnxx::CursorOptions()); assert(cursor); assert(cursor->read(&error, 2, &record_set) == 2); + // "IntColumn" という名前のカラムに格納されている値が 123 のときだけ + // 真になる式を作成する. assert(builder->push_column(&error, "IntColumn")); assert(builder->push_datum(&error, grnxx::Int(123))); assert(builder->push_operator(&error, grnxx::EQUAL_OPERATOR)); expression = builder->release(&error); assert(expression); + // フィルタとして使ったときの結果を確認する. assert(expression->filter(&error, &record_set)); assert(record_set.size() == 1); assert(record_set.get(0).row_id == 1); @@ -329,12 +370,15 @@ void test_expression() { assert(cursor); assert(cursor->read(&error, 2, &record_set) == 2); + // "IntColumn" という名前のカラムに格納されている値が 123 でないときだけ + // 真になる式を作成する. assert(builder->push_column(&error, "IntColumn")); assert(builder->push_datum(&error, grnxx::Int(123))); assert(builder->push_operator(&error, grnxx::NOT_EQUAL_OPERATOR)); expression = builder->release(&error); assert(expression); + // フィルタとして使ったときの結果を確認する. assert(expression->filter(&error, &record_set)); assert(record_set.size() == 1); assert(record_set.get(0).row_id == 2); -------------- next part -------------- HTML����������������������������...Download