pub mod actions;
pub mod private;
pub use actions::InitActionBuilder;
pub use private::{GlobalActionBuilder, PrivateActionBuilder};
impl InitActionBuilder {
pub fn with_default_environment() -> Self {
Self::new().add_global_environment_action()
}
pub fn for_single_vehicle(entity_ref: &str) -> Self {
Self::new()
.add_global_environment_action()
.add_private_action(entity_ref)
}
pub fn for_multiple_vehicles(entity_refs: &[&str]) -> Self {
let mut builder = Self::new().add_global_environment_action();
for entity_ref in entity_refs {
builder = builder.add_private_action(entity_ref);
}
builder
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::builder::positions::WorldPositionBuilder;
use crate::types::positions::Position;
#[test]
fn test_init_builder_basic() {
let init = InitActionBuilder::new().build().unwrap();
assert!(init.actions.global_actions.is_empty());
assert!(init.actions.private_actions.is_empty());
}
#[test]
fn test_init_builder_with_environment() {
let init = InitActionBuilder::with_default_environment()
.build()
.unwrap();
assert_eq!(init.actions.global_actions.len(), 1);
assert!(init.actions.global_actions[0].environment_action.is_some());
}
#[test]
fn test_init_builder_single_vehicle() {
let init = InitActionBuilder::for_single_vehicle("ego")
.build()
.unwrap();
assert_eq!(init.actions.global_actions.len(), 1);
assert_eq!(init.actions.private_actions.len(), 1);
assert_eq!(
init.actions.private_actions[0]
.entity_ref
.as_literal()
.unwrap(),
"ego"
);
}
#[test]
fn test_init_builder_multiple_vehicles() {
let vehicles = ["ego", "target", "obstacle"];
let init = InitActionBuilder::for_multiple_vehicles(&vehicles)
.build()
.unwrap();
assert_eq!(init.actions.global_actions.len(), 1);
assert_eq!(init.actions.private_actions.len(), 3);
for (i, vehicle) in vehicles.iter().enumerate() {
assert_eq!(
init.actions.private_actions[i]
.entity_ref
.as_literal()
.unwrap(),
*vehicle
);
}
}
}