diff --git a/src/parser/gate.rs b/src/parser/gate.rs index 76b42d8a..a213ead7 100644 --- a/src/parser/gate.rs +++ b/src/parser/gate.rs @@ -44,3 +44,24 @@ pub fn parse_gate<'a>(input: ParserInput<'a>) -> ParserResult<'a, Instruction> { }, )) } + +#[cfg(test)] +mod test { + use super::parse_gate; + use crate::expression::Expression; + use crate::instruction::{GateModifier, Instruction, Qubit}; + use crate::make_test; + use crate::parser::lexer::lex; + + make_test!( + test_modifiers, + parse_gate, + "DAGGER CONTROLLED RX(pi) 0 1", + Instruction::Gate { + name: "RX".to_string(), + parameters: vec![Expression::PiConstant], + qubits: vec![Qubit::Fixed(0), Qubit::Fixed(1)], + modifiers: vec![GateModifier::Dagger, GateModifier::Controlled], + } + ); +} diff --git a/src/parser/instruction.rs b/src/parser/instruction.rs index 3c78703e..9ba5a5c3 100644 --- a/src/parser/instruction.rs +++ b/src/parser/instruction.rs @@ -105,7 +105,7 @@ pub fn parse_instruction(input: ParserInput) -> ParserResult { }) } Some((Token::NonBlocking, _)) => command::parse_pulse(input), - Some((Token::Identifier(_), _)) => gate::parse_gate(input), + Some((Token::Identifier(_), _)) | Some((Token::Modifier(_), _)) => gate::parse_gate(input), Some((_, _)) => Err(nom::Err::Failure(Error { input: &input[..1], error: ErrorKind::NotACommandOrGate,