#[cfg(test)] mod tests { use super::*; use std::collections::HashMap; fn create_test_table() -> Table { let mut schema = HashMap::new(); let mut order = vec![]; let columns = vec![ ("id", ColumnType::Integer, Constraint::PrimaryKey), ("name", ColumnType::Text, Constraint::None), ("age", ColumnType::Integer, Constraint::None), ]; for(i, (name, col_type, constraint)) in columns.into_iter().enumerate(){ schema.insert( name.to_string(), ColumnSchema { order: i, column_type: col_type, constraint, }, ); order.push(name.to_string()); } Table { name: "users".to_string(), columns: Columns { schema, order }, rows: vec![], } } #[test] fn test_insert_and_find() { let mut table = create_test_table(); let result = table.insert_row(vec![ Value::Integer(1), Value::Text("Alice".to_string()), Value::Integer(30), ]); assert!(result.is_ok()); let results = table.find_rows_by_column_value("id", &Value::Integer(1)); assert_eq!(results.len(), 1); assert_eq!(results[0][1], Value::Text("Alice".to_string())); } #[test] fn test_update_by_condition() { let mut table = create_test_table(); table.insert_row(vec![ Value::Integer(2), Value::Text("Bob".to_string()), Value::Integer(25), ]).unwrap(); let condition = Condition::Equals("id".to_string(), Value::Integer(2)); let updated = table.update_by_condition("name", Value::Text("Carol".to_string()), Some(condition)).unwrap(); assert_eq!(updated, 1); let updated_rows = table.find_rows_by_column_value("id", &Value::Integer(2)); assert_eq!(updated_rows[0][1], Value::Text("Carol".to_string())); } #[test] fn test_delete_by_condition() { let mut table = create_test_table(); table.insert_row(vec![ Value::Integer(3), Value::Text("David".to_string()), Value::Integer(40), ]).unwrap(); let condition = Condition::Equals("id".to_string(), Value::Integer(3)); let deleted = table.delete_by_condition(Some(condition)).unwrap(); assert_eq!(deleted, 1); let rows = table.find_rows_by_column_value("id", &Value::Integer(3)); assert_eq!(rows.len(), 0); } #[test] fn test_unique_violation() { let mut table = create_test_table(); table.insert_row(vec![ Value::Integer(4), Value::Text("Eve".to_string()), Value::Integer(50), ]).unwrap(); let result = table.insert_row(vec![ Value::Integer(4), Value::Text("Eve2".to_string()), Value::Integer(60), ]); assert!(result.is_err()); assert!(result.unwrap_err().contains("Duplicate primary key")); } }
Finished `test` profile [unoptimized + debuginfo] target(s) in 4.35s
Running unittests src/main.rs (target/debug/deps/rds-a17132f561100387)
running 4 tests
test tests::test_insert_and_find … ok
test tests::test_delete_by_condition … ok
test tests::test_unique_violation … ok
test tests::test_update_by_condition … ok
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
プロジェクトを lib.rs + main.rs に分けたい。