From 88fb13325a3f6d8533d86ee70f81fd3e1765d8cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jind=C5=99ich=20Moravec?= Date: Thu, 25 Jan 2024 23:19:37 +0100 Subject: [PATCH] tests: asynchronize some interpreter tests --- minisql/Cargo.toml | 2 +- minisql/src/interpreter.rs | 59 +++++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/minisql/Cargo.toml b/minisql/Cargo.toml index 22d0242..9cdfae0 100644 --- a/minisql/Cargo.toml +++ b/minisql/Cargo.toml @@ -8,4 +8,4 @@ edition = "2021" [dependencies] bimap = "0.6.3" thiserror = "1.0.50" -tokio = { version = "1.35.1", features = ["sync"] } +tokio = { version = "1.35.1", features = ["sync", "rt", "macros"] } diff --git a/minisql/src/interpreter.rs b/minisql/src/interpreter.rs index 26f11ef..949e042 100644 --- a/minisql/src/interpreter.rs +++ b/minisql/src/interpreter.rs @@ -166,6 +166,7 @@ impl State { mod tests { use super::*; use std::collections::HashSet; + use std::ops::Deref; fn users_schema() -> TableSchema { let id: ColumnPosition = 0; @@ -201,8 +202,8 @@ mod tests { assert!(table.table_name() == &users); } - #[test] - fn test_select_empty() { + #[tokio::test] + async fn test_select_empty() { let mut state = State::new(); let users_schema = users_schema(); let users = users_schema.table_name().clone(); @@ -217,8 +218,9 @@ mod tests { let Response::Selected(schema, rows) = response else { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 0); + + let mut rows = rows.lock().await; + assert!(rows.next().is_none()); } #[test] @@ -233,8 +235,8 @@ mod tests { assert!(matches!(response, Err(Error::TableDoesNotExist(_)))); } - #[test] - fn test_insert_select_basic1() { + #[tokio::test] + async fn test_insert_select_basic1() { use IndexableValue::*; use Value::*; @@ -270,18 +272,19 @@ mod tests { let Response::Selected(schema, rows) = response else { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 1); - let row = &rows[0]; + let mut rows = rows.lock().await; + let row = rows.next().expect("expected single row"); assert!(row.len() == 3); assert!(row[0].1 == id); assert!(row[1].1 == name); assert!(row[2].1 == age); + + assert!(rows.next().is_none()); } - #[test] - fn test_insert_select_basic2() { + #[tokio::test] + async fn test_insert_select_basic2() { use ColumnSelection::*; use Condition::*; use IndexableValue::*; @@ -336,20 +339,21 @@ mod tests { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 2); - let row0 = &rows[0]; - let row1 = &rows[1]; + let mut rows = rows.lock().await; + let row0 = rows.next().expect("expected first row"); assert!(row0.len() == 3); assert!(row0[0].1 == id0); assert!(row0[1].1 == name0); assert!(row0[2].1 == age0); + let row1 = rows.next().expect("expected second row"); assert!(row1.len() == 3); assert!(row1[0].1 == id1); assert!(row1[1].1 == name1); assert!(row1[2].1 == age1); + + assert!(rows.next().is_none()); } { @@ -364,14 +368,15 @@ mod tests { let Response::Selected(_, rows) = response else { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 1); - let row0 = &rows[0]; + + let mut rows = rows.lock().await; + let row0 = rows.next().expect("expected first row"); assert!(row0.len() == 3); assert!(row0[0].1 == id0); assert!(row0[1].1 == name0); assert!(row0[2].1 == age0); + assert!(rows.next().is_none()); } { @@ -386,18 +391,19 @@ mod tests { let Response::Selected(_, rows) = response else { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 1); - let row0 = &rows[0]; + + let mut rows = rows.lock().await; + let row0 = rows.next().expect("expected first row"); assert!(row0.len() == 2); assert!(row0[0].1 == name0); assert!(row0[1].1 == id0); + assert!(rows.next().is_none()); } } - #[test] - fn test_delete() { + #[tokio::test] + async fn test_delete() { use ColumnSelection::*; use Condition::*; use IndexableValue::*; @@ -460,14 +466,15 @@ mod tests { let Response::Selected(_, rows) = response else { panic!() }; - let rows: Vec<_> = rows.collect(); - assert!(rows.len() == 1); - let row = &rows[0]; + + let mut rows = rows.lock().await; + let row = rows.next().expect("expected first row"); assert!(row.len() == 3); assert!(row[0].1 == id1); assert!(row[1].1 == name1); assert!(row[2].1 == age1); + assert!(rows.next().is_none()); } #[test]