println!("counter: {}", *counter.lock().unwrap());
}
+fn test_dyn_traits() {
+ let text = "I ate a salad for lunch today";
+ let mut post = Post::new();
+ post.add_text(text);
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.reject();
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve(); // first
+ assert_eq!("", post.content());
+
+ post.approve(); // second
+ assert_eq!(text, post.content());
+
+ post.reject(); // no-op
+ assert_eq!(text, post.content());
+}
+
+fn test_state_types() {
+ let mut post = TPost::new();
+ post.add_text("I ate a salad for lunch");
+ let post = post.request_review();
+ let mut post = post.reject();
+ post.add_text(" today");
+ let post = post.request_review();
+ let post = post.approve();
+ assert_eq!(post.content(), "I ate a salad for lunch today");
+}
+
fn main() {
test_strings();
test_vectors();
test_closures();
test_iterators();
test_threads();
+ test_dyn_traits();
+ test_state_types();
}