use fluxion::{message, Actor, ActorContext, Delegate, Fluxion, Handler, MessageSender};
use std::time::Instant;
struct TestActor(pub u64);
impl Actor for TestActor {
type Error = ();
}
#[message(u64)]
struct TestMessage(pub u64);
impl Handler<TestMessage> for TestActor {
#[inline(always)]
async fn handle_message<D: Delegate>(&self, message: TestMessage, _context: &ActorContext<D>) -> u64 {
message.0 ^ self.0
}
}
#[tokio::main]
async fn main() {
let system = Fluxion::new("system", ());
let id = system.add(TestActor(rand::random())).await.unwrap();
let actor = system.get_local::<TestActor>(id).await.unwrap();
let num_messages = 1_000_000_000;
let mut out = Vec::with_capacity(num_messages);
let start = Instant::now();
for i in 0..num_messages {
let Ok(v) = actor.send(TestMessage(i as u64)).await else {
unreachable!("local actors should never fail to send.")
};
out.push(v);
}
let elapsed = start.elapsed();
println!(
"{:.2} messages/sec",
num_messages as f64 / elapsed.as_secs_f64()
);
}