#[derive(Debug)]
pub struct CheckpointDiff {
pub position_delta: isize,
pub mode_changed: bool,
pub delimiter_stack_changed: bool,
pub prototype_state_changed: bool,
pub context_changed: bool,
}
impl CheckpointDiff {
pub fn has_state_changes(&self) -> bool {
self.mode_changed
|| self.delimiter_stack_changed
|| self.prototype_state_changed
|| self.context_changed
}
}
#[cfg(test)]
mod tests {
use super::CheckpointDiff;
#[test]
fn has_state_changes_returns_false_when_only_position_differs() {
let diff = CheckpointDiff {
position_delta: 7,
mode_changed: false,
delimiter_stack_changed: false,
prototype_state_changed: false,
context_changed: false,
};
assert!(!diff.has_state_changes());
}
#[test]
fn has_state_changes_returns_true_when_mode_changes() {
let diff = CheckpointDiff {
position_delta: 0,
mode_changed: true,
delimiter_stack_changed: false,
prototype_state_changed: false,
context_changed: false,
};
assert!(diff.has_state_changes());
}
#[test]
fn has_state_changes_returns_true_when_any_non_position_flag_changes() {
for diff in [
CheckpointDiff {
position_delta: 0,
mode_changed: false,
delimiter_stack_changed: true,
prototype_state_changed: false,
context_changed: false,
},
CheckpointDiff {
position_delta: 0,
mode_changed: false,
delimiter_stack_changed: false,
prototype_state_changed: true,
context_changed: false,
},
CheckpointDiff {
position_delta: 0,
mode_changed: false,
delimiter_stack_changed: false,
prototype_state_changed: false,
context_changed: true,
},
] {
assert!(diff.has_state_changes());
}
}
}