use std::time::Instant;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use slacktor::{
actor::{Actor, Handler, Message},
Slacktor,
};
struct TestMessage(pub u32);
impl Message for TestMessage {
type Result = u32;
}
struct TestActor(pub u32);
impl Actor for TestActor {
fn destroy(&self) {
println!("destroying");
}
}
impl Handler<TestMessage> for TestActor {
fn handle_message(&self, m: TestMessage) -> u32 {
m.0 ^ self.0
}
}
fn main() {
let mut system = Slacktor::new();
let actor_id = system.spawn(TestActor(rand::random::<u32>()));
let a = system.get::<TestActor>(actor_id).unwrap();
let num_messages = 1_000_000_000;
let start = Instant::now();
let _v = (0..num_messages).into_par_iter().map(|i| {
a.send(TestMessage(i as u32))
}).collect::<Vec<_>>();
let elapsed = start.elapsed();
println!(
"{:.2} messages/sec",
num_messages as f64 / elapsed.as_secs_f64()
);
system.kill(actor_id);
}