use fehler::{throw, throws};
use libc;
+#[macro_export]
+macro_rules! ensure_eq {
+ ($v1:expr, $v2:expr) => {
+ ({
+ let v1 = $v1;
+ let v2 = $v2;
+ if &v1 != &v2 {
+ Err(anyhow!("ensure_eq failed: {} != {}: {:?} != {:?}",
+ stringify!($v1), stringify!($v2),
+ &v1, &v2))
+ } else {
+ Ok(())
+ }
+ }?)
+ }
+}
+
pub trait OrdExt: Ord + Sized + Clone {
fn update_max(&mut self, new: &Self) {
if *new > *self { *self = new.clone() }
pub use std::thread::{self, sleep};
pub use std::time;
+pub use otter::ensure_eq;
pub use otter::commands::{MgmtCommand, MgmtResponse};
pub use otter::commands::{MgmtGameInstruction, MgmtGameResponse};
pub use otter::commands::{MgmtGameUpdateMode};
.perform()
.always_context("rotate")?;
- let transform = format!("rotate(-90");
+ let transform = format!("rotate(-90)");
let pd = w.find_element(By::Id("piece4.1"))?;
- ensure!(pd.get_attribute("transform")? == Some(transform));
+ ensure_eq!(pd.get_attribute("transform")?, Some(transform));
w.synch()?;
}