extern crate rspec; use std::collections::BTreeSet; pub fn main() { #[derive(Clone, Debug)] struct Environment { set: BTreeSet, len_before: usize, } let environment = Environment { set: BTreeSet::new(), len_before: 0, }; rspec::run(&rspec::given("a BTreeSet", environment, |ctx| { ctx.when("not having added any items", |ctx| { ctx.then("it is empty", |env| assert!(env.set.is_empty())); }); ctx.when("adding an new item", |ctx| { ctx.before_all(|env| { env.len_before = env.set.len(); env.set.insert(42); }); ctx.then("it is not empty any more", |env| { assert!(!env.set.is_empty()); }); ctx.then("its len increases by 1", |env| { assert_eq!(env.set.len(), env.len_before + 1); }); ctx.when("adding it again", |ctx| { ctx.before_all(|env| { env.len_before = env.set.len(); env.set.insert(42); }); ctx.then("its len remains the same", |env| { assert_eq!(env.set.len(), env.len_before); }); }); }); ctx.when("returning to outer context", |ctx| { ctx.then("it is still empty", |env| assert!(env.set.is_empty())); }); ctx.then("panic!(…) fails", |_env| { panic!("Some reason for failure.") }); })); }