Skip to content

Commit 2ac2703

Browse files
Merge pull request #189 from JakeRoggenbuck/tons-of-tests
Tons of tests
2 parents 1118054 + cfc4cd9 commit 2ac2703

File tree

2 files changed

+126
-1
lines changed

2 files changed

+126
-1
lines changed

src/record.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::sync::{Arc, Mutex};
88
/// This is the Python object that we return in `select` and `select_version`
99
/// Making this in Rust improved speed by 30%
1010
#[pyclass]
11-
#[derive(Debug)]
11+
#[derive(Debug, Clone)]
1212
pub struct RReturnRecord {
1313
#[pyo3(get)]
1414
pub columns: Vec<Option<i64>>,

src/transaction.rs

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,130 @@ impl RTransaction {
172172
}
173173
}
174174
}
175+
176+
debug!("Finished run for transaction!");
177+
}
178+
}
179+
180+
#[cfg(test)]
181+
mod tests {
182+
use super::*;
183+
use crate::database::RDatabase;
184+
185+
#[test]
186+
fn add_query_test() {
187+
let mut t = RTransaction::new();
188+
let mut db = RDatabase::new();
189+
190+
let table_ref = db.create_table("Scores".to_string(), 3, 0);
191+
let mut query = RQuery::new(table_ref.clone());
192+
193+
t.add_query(
194+
"insert",
195+
table_ref.clone(),
196+
vec![Some(0), Some(234), Some(345)],
197+
);
198+
199+
let mut v = query.select(0, 0, vec![1, 1, 1]);
200+
201+
// We haven't run the transaction yet so nothing is returned
202+
assert_eq!(v.clone().unwrap().len(), 0);
203+
204+
// Usually this is done by the transaction_worker but we are doing it manually here
205+
t.run();
206+
207+
v = query.select(0, 0, vec![1, 1, 1]);
208+
209+
assert_eq!(
210+
v.unwrap()[0].as_ref().unwrap().columns,
211+
vec![Some(0), Some(234), Some(345)]
212+
);
213+
}
214+
215+
#[test]
216+
fn add_many_query_test() {
217+
let mut t = RTransaction::new();
218+
let mut db = RDatabase::new();
219+
220+
let table_ref = db.create_table("Scores".to_string(), 3, 0);
221+
let mut query = RQuery::new(table_ref.clone());
222+
223+
for x in 0..100 {
224+
t.add_query(
225+
"insert",
226+
table_ref.clone(),
227+
vec![Some(x), Some(x * x), Some(345 + x)],
228+
);
229+
}
230+
231+
let mut v = query.select(0, 0, vec![1, 1, 1]);
232+
233+
// We haven't run the transaction yet so nothing is returned
234+
assert_eq!(v.clone().unwrap().len(), 0);
235+
236+
// Usually this is done by the transaction_worker but we are doing it manually here
237+
t.run();
238+
239+
// Test selecting on different columns
240+
v = query.select(4, 1, vec![1, 1, 1]);
241+
242+
assert_eq!(
243+
v.unwrap()[0].as_ref().unwrap().columns,
244+
vec![Some(2), Some(4), Some(345 + 2)]
245+
);
246+
247+
v = query.select(16, 1, vec![1, 1, 1]);
248+
249+
assert_eq!(
250+
v.unwrap()[0].as_ref().unwrap().columns,
251+
vec![Some(4), Some(16), Some(345 + 4)]
252+
);
253+
254+
v = query.select(1024, 1, vec![1, 1, 1]);
255+
256+
assert_eq!(
257+
v.unwrap()[0].as_ref().unwrap().columns,
258+
vec![Some(32), Some(1024), Some(345 + 32)]
259+
);
260+
}
261+
262+
#[test]
263+
fn add_query_insert_and_delete_test() {
264+
let mut t = RTransaction::new();
265+
let mut db = RDatabase::new();
266+
267+
let table_ref = db.create_table("Scores".to_string(), 3, 0);
268+
let mut query = RQuery::new(table_ref.clone());
269+
270+
t.add_query(
271+
"insert",
272+
table_ref.clone(),
273+
vec![Some(0), Some(234), Some(345)],
274+
);
275+
276+
let mut v = query.select(0, 0, vec![1, 1, 1]);
277+
278+
// We haven't run the transaction yet so nothing is returned
279+
assert_eq!(v.clone().unwrap().len(), 0);
280+
281+
// Usually this is done by the transaction_worker but we are doing it manually here
282+
t.run();
283+
284+
v = query.select(0, 0, vec![1, 1, 1]);
285+
286+
assert_eq!(
287+
v.unwrap()[0].as_ref().unwrap().columns,
288+
vec![Some(0), Some(234), Some(345)]
289+
);
290+
291+
t.add_query("delete", table_ref, vec![Some(0)]);
292+
293+
// Usually this is done by the transaction_worker but we are doing it manually here
294+
t.run();
295+
296+
v = query.select(0, 0, vec![1, 1, 1]);
297+
298+
// We haven't run the transaction yet so nothing is returned
299+
assert_eq!(v.clone().unwrap().len(), 0);
175300
}
176301
}

0 commit comments

Comments
 (0)