From e8df63732c498aa73ab7c41ebb9bfa48216924b2 Mon Sep 17 00:00:00 2001 From: Nate Buttke Date: Tue, 27 Feb 2024 16:05:25 -0800 Subject: [PATCH] bufferpool-specific rust test added. not sure how to configure cargo to recognize it correctly --- tests/bufferpool_tests.rs | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/bufferpool_tests.rs diff --git a/tests/bufferpool_tests.rs b/tests/bufferpool_tests.rs new file mode 100644 index 0000000..b9a3ea2 --- /dev/null +++ b/tests/bufferpool_tests.rs @@ -0,0 +1,45 @@ +extern crate cowabunga_rs; +use cowabunga_rs::bufferpool::*; +use cowabunga_rs::constants::*; + +/// Simplest conceivable write_next_value() use +#[test] +fn test_simple_write_next_value() -> Result<(), String> { + let mut bp = BufferPool::new(); + + let ppid = bp.allocate_page("test_tbl".to_string(), 0); + + let offset = bp.write_next_value(ppid, Some(42))?; + let val_read = bp.read(ppid, offset); + + assert_eq!(val_read, 42); + Ok(()) +} + + +/// Force an eviction to occur using allocate, reads and writes +#[test] +fn test_full_bufferpool() -> Result<(), String> { + let mut bp = BufferPool::new(); + + let mut ppids: Vec = Vec::new(); + + // create more pages than frames (all in one column) + for _ in (1..=BP_NUM_FRAMES+1) { + ppids.push(bp.allocate_page("test_tbl".to_string(), 0)); + } + + for (i, ppid) in ppids.iter().enumerate() { + bp.write_next_value(*ppid, Some(i as i64 + 1)); + } + + let expected_values: Vec = (1..=BP_NUM_FRAMES+1).collect(); + let mut observed_values: Vec = Vec::new(); + + for ppid in &ppids { + observed_values.push(bp.read(*ppid, 0)?); + } + + assert_eq!(expected_values, observed_values); + Ok(()) +}