aboutsummaryrefslogtreecommitdiff
path: root/tests/rand_fail.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rand_fail.rs')
-rw-r--r--tests/rand_fail.rs67
1 files changed, 54 insertions, 13 deletions
diff --git a/tests/rand_fail.rs b/tests/rand_fail.rs
index da583b2..055f933 100644
--- a/tests/rand_fail.rs
+++ b/tests/rand_fail.rs
@@ -3,12 +3,15 @@
use std::collections::HashMap;
use std::rc::Rc;
-fn single_point_failure(sim: &common::PaintingSim) {
- let nticks = sim.get_nticks();
- println!("nticks = {}", nticks);
+fn _multi_point_failure(sims: &[common::PaintingSim], state: &common::WALStoreEmulState, f: usize) {
+ let sim = &sims[0];
+ // save the current state and start from there
+ let mut state = state.clone();
+ let mut state0 = state.clone();
+ let nticks = sim.get_nticks(&mut state0);
+ println!("fail = {}, nticks = {}", f, nticks);
for i in 0..nticks {
- print!("fail pos = {}, ", i);
- let mut state = common::WALStoreEmulState::new();
+ println!("fail = {}, pos = {}", f, i);
let mut canvas = sim.new_canvas();
let mut ops: Vec<common::PaintStrokes> = Vec::new();
let mut ringid_map = HashMap::new();
@@ -24,17 +27,25 @@ fn single_point_failure(sim: &common::PaintingSim) {
)
.is_err()
{
- assert!(sim.check(
- &mut state,
- &mut canvas,
- sim.get_walloader(),
- &ops,
- &ringid_map,
- ))
+ if sims.len() > 1 {
+ _multi_point_failure(&sims[1..], &state, f + 1)
+ } else {
+ assert!(sim.check(
+ &mut state,
+ &mut canvas,
+ sim.get_walloader(),
+ &ops,
+ &ringid_map,
+ ))
+ }
}
}
}
+fn multi_point_failure(sims: &[common::PaintingSim]) {
+ _multi_point_failure(sims, &common::WALStoreEmulState::new(), 1);
+}
+
#[test]
fn single_point_failure1() {
let sim = common::PaintingSim {
@@ -50,5 +61,35 @@ fn single_point_failure1() {
stroke_max_n: 5,
seed: 0,
};
- single_point_failure(&sim);
+ multi_point_failure(&[sim]);
+}
+
+#[test]
+fn two_failures() {
+ let sims = [common::PaintingSim {
+ block_nbit: 5,
+ file_nbit: 6,
+ file_cache: 1000,
+ n: 10,
+ m: 5,
+ k: 100,
+ csize: 1000,
+ stroke_max_len: 10,
+ stroke_max_col: 256,
+ stroke_max_n: 3,
+ seed: 0,
+ }, common::PaintingSim {
+ block_nbit: 5,
+ file_nbit: 6,
+ file_cache: 1000,
+ n: 10,
+ m: 5,
+ k: 100,
+ csize: 1000,
+ stroke_max_len: 10,
+ stroke_max_col: 256,
+ stroke_max_n: 3,
+ seed: 0,
+ }];
+ multi_point_failure(&sims);
}