tests: asynchronize some interpreter tests

This commit is contained in:
Jindřich Moravec 2024-01-25 23:19:37 +01:00
parent 51ed3bbc5c
commit 88fb13325a
2 changed files with 34 additions and 27 deletions

View file

@ -8,4 +8,4 @@ edition = "2021"
[dependencies] [dependencies]
bimap = "0.6.3" bimap = "0.6.3"
thiserror = "1.0.50" thiserror = "1.0.50"
tokio = { version = "1.35.1", features = ["sync"] } tokio = { version = "1.35.1", features = ["sync", "rt", "macros"] }

View file

@ -166,6 +166,7 @@ impl State {
mod tests { mod tests {
use super::*; use super::*;
use std::collections::HashSet; use std::collections::HashSet;
use std::ops::Deref;
fn users_schema() -> TableSchema { fn users_schema() -> TableSchema {
let id: ColumnPosition = 0; let id: ColumnPosition = 0;
@ -201,8 +202,8 @@ mod tests {
assert!(table.table_name() == &users); assert!(table.table_name() == &users);
} }
#[test] #[tokio::test]
fn test_select_empty() { async fn test_select_empty() {
let mut state = State::new(); let mut state = State::new();
let users_schema = users_schema(); let users_schema = users_schema();
let users = users_schema.table_name().clone(); let users = users_schema.table_name().clone();
@ -217,8 +218,9 @@ mod tests {
let Response::Selected(schema, rows) = response else { let Response::Selected(schema, rows) = response else {
panic!() panic!()
}; };
let rows: Vec<_> = rows.collect();
assert!(rows.len() == 0); let mut rows = rows.lock().await;
assert!(rows.next().is_none());
} }
#[test] #[test]
@ -233,8 +235,8 @@ mod tests {
assert!(matches!(response, Err(Error::TableDoesNotExist(_)))); assert!(matches!(response, Err(Error::TableDoesNotExist(_))));
} }
#[test] #[tokio::test]
fn test_insert_select_basic1() { async fn test_insert_select_basic1() {
use IndexableValue::*; use IndexableValue::*;
use Value::*; use Value::*;
@ -270,18 +272,19 @@ mod tests {
let Response::Selected(schema, rows) = response else { let Response::Selected(schema, rows) = response else {
panic!() 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.len() == 3);
assert!(row[0].1 == id); assert!(row[0].1 == id);
assert!(row[1].1 == name); assert!(row[1].1 == name);
assert!(row[2].1 == age); assert!(row[2].1 == age);
assert!(rows.next().is_none());
} }
#[test] #[tokio::test]
fn test_insert_select_basic2() { async fn test_insert_select_basic2() {
use ColumnSelection::*; use ColumnSelection::*;
use Condition::*; use Condition::*;
use IndexableValue::*; use IndexableValue::*;
@ -336,20 +339,21 @@ mod tests {
panic!() panic!()
}; };
let rows: Vec<_> = rows.collect(); let mut rows = rows.lock().await;
assert!(rows.len() == 2);
let row0 = &rows[0];
let row1 = &rows[1];
let row0 = rows.next().expect("expected first row");
assert!(row0.len() == 3); assert!(row0.len() == 3);
assert!(row0[0].1 == id0); assert!(row0[0].1 == id0);
assert!(row0[1].1 == name0); assert!(row0[1].1 == name0);
assert!(row0[2].1 == age0); assert!(row0[2].1 == age0);
let row1 = rows.next().expect("expected second row");
assert!(row1.len() == 3); assert!(row1.len() == 3);
assert!(row1[0].1 == id1); assert!(row1[0].1 == id1);
assert!(row1[1].1 == name1); assert!(row1[1].1 == name1);
assert!(row1[2].1 == age1); assert!(row1[2].1 == age1);
assert!(rows.next().is_none());
} }
{ {
@ -364,14 +368,15 @@ mod tests {
let Response::Selected(_, rows) = response else { let Response::Selected(_, rows) = response else {
panic!() panic!()
}; };
let rows: Vec<_> = rows.collect();
assert!(rows.len() == 1); let mut rows = rows.lock().await;
let row0 = &rows[0]; let row0 = rows.next().expect("expected first row");
assert!(row0.len() == 3); assert!(row0.len() == 3);
assert!(row0[0].1 == id0); assert!(row0[0].1 == id0);
assert!(row0[1].1 == name0); assert!(row0[1].1 == name0);
assert!(row0[2].1 == age0); assert!(row0[2].1 == age0);
assert!(rows.next().is_none());
} }
{ {
@ -386,18 +391,19 @@ mod tests {
let Response::Selected(_, rows) = response else { let Response::Selected(_, rows) = response else {
panic!() panic!()
}; };
let rows: Vec<_> = rows.collect();
assert!(rows.len() == 1); let mut rows = rows.lock().await;
let row0 = &rows[0]; let row0 = rows.next().expect("expected first row");
assert!(row0.len() == 2); assert!(row0.len() == 2);
assert!(row0[0].1 == name0); assert!(row0[0].1 == name0);
assert!(row0[1].1 == id0); assert!(row0[1].1 == id0);
assert!(rows.next().is_none());
} }
} }
#[test] #[tokio::test]
fn test_delete() { async fn test_delete() {
use ColumnSelection::*; use ColumnSelection::*;
use Condition::*; use Condition::*;
use IndexableValue::*; use IndexableValue::*;
@ -460,14 +466,15 @@ mod tests {
let Response::Selected(_, rows) = response else { let Response::Selected(_, rows) = response else {
panic!() panic!()
}; };
let rows: Vec<_> = rows.collect();
assert!(rows.len() == 1); let mut rows = rows.lock().await;
let row = &rows[0]; let row = rows.next().expect("expected first row");
assert!(row.len() == 3); assert!(row.len() == 3);
assert!(row[0].1 == id1); assert!(row[0].1 == id1);
assert!(row[1].1 == name1); assert!(row[1].1 == name1);
assert!(row[2].1 == age1); assert!(row[2].1 == age1);
assert!(rows.next().is_none());
} }
#[test] #[test]