use crate::tests::ChildId;
#[cfg(not(test))]
use num_traits::FromPrimitive;
#[cfg(test)]
use num_traits::ToPrimitive;
use shared_data::SharedAddressRange;
#[cfg(test)]
use std::env;
#[cfg(test)]
use std::process::Child;
#[cfg(test)]
use std::process::Command;
#[cfg(test)]
pub fn spawn_child(child_id: ChildId, address: SharedAddressRange) -> Child {
let shmem_name = shared_data::get_bootstrap_name();
let mut exe_path = env::current_exe().unwrap();
exe_path.pop();
exe_path.pop();
exe_path.push("child");
let child_name = child_id.to_usize().unwrap().to_string();
let address_name = u64::from(address).to_string();
Command::new(exe_path)
.arg(shmem_name)
.arg(child_name)
.arg(address_name)
.spawn()
.unwrap()
}
#[cfg(not(test))]
pub fn child(shmem_path: String, child_name: String, address_name: String) {
shared_data::set_bootstrap_name(shmem_path.clone());
assert_eq!(shared_data::get_bootstrap_name(), shmem_path);
let child_id = ChildId::from_usize(child_name.parse().unwrap()).unwrap();
let address_number: u64 = address_name.parse().unwrap();
let address = SharedAddressRange::from(address_number);
child_id.run(address);
}