Add ui test for issue 51301

This commit is contained in:
Lzu Tao 2019-06-13 03:03:28 +00:00
parent 2887008e0c
commit 8a5e1eeee6
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,35 @@
use std::any::TypeId;
use std::collections::HashMap;
use std::hash::Hash;
trait State {
type EventType;
fn get_type_id_of_state(&self) -> TypeId;
}
struct StateMachine<EventType: Hash + Eq> {
current_state: Box<dyn State<EventType = EventType>>,
transition_table:
HashMap<TypeId, HashMap<EventType, fn() -> Box<dyn State<EventType = EventType>>>>,
}
impl<EventType: Hash + Eq> StateMachine<EventType> {
fn inner_process_event(&mut self, event: EventType) -> Result<(), i8> {
let new_state_creation_function = self
.transition_table
.iter()
.find(|(&event_typeid, _)| event_typeid == self.current_state.get_type_id_of_state())
.ok_or(1)?
.1
.iter()
.find(|(&event_type, _)| event == event_type)
//~^ ERROR cannot move out of a shared reference
.ok_or(2)?
.1;
self.current_state = new_state_creation_function();
Ok(())
}
}
fn main() {}

View File

@ -0,0 +1,12 @@
error[E0507]: cannot move out of a shared reference
--> $DIR/issue-51301.rs:25:20
|
LL | .find(|(&event_type, _)| event == event_type)
| ^^----------^^^^
| |
| data moved here
| move occurs because `event_type` has type `EventType`, which does not implement the `Copy` trait
error: aborting due to previous error
For more information about this error, try `rustc --explain E0507`.