pub trait CQasm: crate::gates::Gate
{
fn c_qasm(&self, _bit_names: &[String], _bits: &[usize])
-> crate::error::Result<String>
{
Err(crate::error::Error::from(
crate::error::ExportError::NotImplemented("c-Qasm", String::from(self.description()))
))
}
fn conditional_c_qasm(&self, condition: &str, bit_names: &[String],
bits: &[usize]) -> crate::error::Result<String>
{
let unc_qasm = self.c_qasm(bit_names, bits)?;
let parts: Vec<&str> = unc_qasm.splitn(2, " ").collect();
if parts.len() != 2
{
Err(crate::error::Error::from(
crate::error::ExportError::InvalidConditionalOp(unc_qasm.clone())
))
}
else
{
Ok(format!("c-{} {}, {}", parts[0], condition, parts[1]))
}
}
}
#[cfg(test)]
mod tests
{
use super::CQasm;
#[test]
fn test_conditional_c_qasm()
{
let bit_names = [String::from("qb0"), String::from("qb1")];
let res = crate::gates::H::new().conditional_c_qasm("b[0]", &bit_names, &[1]);
assert_eq!(res, Ok(String::from("c-h b[0], qb1")));
}
}