Mercurial
diff deita/deita_test.c @ 75:ae6a88e6e484
[Deita] Simple DB connection lib.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Wed, 31 Dec 2025 11:20:08 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deita/deita_test.c Wed Dec 31 11:20:08 2025 -0800 @@ -0,0 +1,127 @@ +#include "deita.h" +#include <stdio.h> +#include <assert.h> +#include <unistd.h> + +int main(void) +{ + printf("=== Deita Library Tests ===\n\n"); + + const char *test_db_path = "/tmp/deita_test.db"; + unlink(test_db_path); + + // Test 1: Connection creation + printf("Test 1: Creating SQLite3 connection...\n"); + Deita_Connection *p_connection = Deita_Connection_Create(DEITA_DATABASE_TYPE_SQLITE3, test_db_path); + assert(p_connection != NULL); + assert(Deita_Connection_Is_Open(p_connection) == TRUE); + printf(" PASSED: Connection created successfully\n\n"); + + // Test 2: Create table + printf("Test 2: Creating test table...\n"); + const char *create_table_query = + "CREATE TABLE IF NOT EXISTS test_users (" + " id INTEGER PRIMARY KEY AUTOINCREMENT," + " username TEXT NOT NULL," + " age INTEGER" + ")"; + int32 result = Deita_Query_Execute_Update(p_connection, create_table_query); + assert(result == 0); + printf(" PASSED: Table created\n\n"); + + // Test 3: Insert data + printf("Test 3: Inserting test data...\n"); + const char *insert_query = "INSERT INTO test_users (username, age) VALUES ('alice', 25)"; + result = Deita_Query_Execute_Update(p_connection, insert_query); + assert(result == 1); + printf(" PASSED: Inserted 1 row\n\n"); + + // Test 4: Insert with prepared statement + printf("Test 4: Inserting with prepared statement...\n"); + const char *insert_prepared_query = "INSERT INTO test_users (username, age) VALUES (?, ?)"; + const char *params[] = {"bob", "30"}; + result = Deita_Query_Execute_Update_Prepared(p_connection, insert_prepared_query, 2, params); + assert(result == 1); + printf(" PASSED: Inserted 1 row with prepared statement\n\n"); + + // Test 5: Query data + printf("Test 5: Querying test data...\n"); + Dowa_Arena *p_arena = Dowa_Arena_Create(ONE_MEGA_BYTE); + const char *select_query = "SELECT id, username, age FROM test_users ORDER BY id"; + Deita_Result_Set *p_result_set = Deita_Query_Execute(p_connection, select_query, p_arena); + assert(p_result_set != NULL); + + int32 row_count = 0; + while (Deita_Result_Set_Next(p_result_set)) + { + row_count++; + int64 id = Deita_Result_Set_Get_Integer(p_result_set, 0); + const char *username = Deita_Result_Set_Get_Text(p_result_set, 1); + int64 age = Deita_Result_Set_Get_Integer(p_result_set, 2); + + printf(" Row %d: id=%lld, username=%s, age=%lld\n", row_count, id, username, age); + + if (row_count == 1) + { + assert(id == 1); + assert(strcmp(username, "alice") == 0); + assert(age == 25); + } + else if (row_count == 2) + { + assert(id == 2); + assert(strcmp(username, "bob") == 0); + assert(age == 30); + } + } + assert(row_count == 2); + Deita_Result_Set_Free(p_result_set); + printf(" PASSED: Retrieved 2 rows\n\n"); + + // Test 6: Query with prepared statement + printf("Test 6: Querying with prepared statement...\n"); + const char *select_prepared_query = "SELECT username, age FROM test_users WHERE username = ?"; + const char *query_params[] = {"alice"}; + p_result_set = Deita_Query_Execute_Prepared(p_connection, select_prepared_query, 1, query_params, p_arena); + assert(p_result_set != NULL); + + assert(Deita_Result_Set_Next(p_result_set) == TRUE); + const char *username = Deita_Result_Set_Get_Text(p_result_set, 0); + int64 age = Deita_Result_Set_Get_Integer(p_result_set, 1); + assert(strcmp(username, "alice") == 0); + assert(age == 25); + assert(Deita_Result_Set_Next(p_result_set) == FALSE); + Deita_Result_Set_Free(p_result_set); + printf(" PASSED: Retrieved correct row with prepared statement\n\n"); + + // Test 7: Column metadata + printf("Test 7: Testing column metadata...\n"); + p_result_set = Deita_Query_Execute(p_connection, "SELECT id, username FROM test_users LIMIT 1", p_arena); + assert(p_result_set != NULL); + + int32 column_count = Deita_Result_Set_Get_Column_Count(p_result_set); + assert(column_count == 2); + + const char *col_name_0 = Deita_Result_Set_Get_Column_Name(p_result_set, 0); + const char *col_name_1 = Deita_Result_Set_Get_Column_Name(p_result_set, 1); + assert(strcmp(col_name_0, "id") == 0); + assert(strcmp(col_name_1, "username") == 0); + + assert(Deita_Result_Set_Next(p_result_set) == TRUE); + Deita_Column_Type type_0 = Deita_Result_Set_Get_Column_Type(p_result_set, 0); + Deita_Column_Type type_1 = Deita_Result_Set_Get_Column_Type(p_result_set, 1); + assert(type_0 == DEITA_COLUMN_TYPE_INTEGER); + assert(type_1 == DEITA_COLUMN_TYPE_TEXT); + + Deita_Result_Set_Free(p_result_set); + printf(" PASSED: Column metadata correct\n\n"); + + // Cleanup + printf("Cleanup: Closing connection and freeing arena...\n"); + Dowa_Arena_Free(p_arena); + Deita_Connection_Close(p_connection); + unlink(test_db_path); + + printf("\n=== All tests passed! ===\n"); + return 0; +}