def test_control_flows(): reset_label_counter() classical_flag_register = 2 p = Program(X(0), H(0)).measure(0, classical_flag_register) # run p in a loop until classical_flag_register is 0 loop_prog = Program(X(0)).measure(0, classical_flag_register) loop_prog.while_do(classical_flag_register, p) assert loop_prog.out() == 'X 0\nMEASURE 0 [2]\nLABEL @START1\nJUMP-UNLESS @END2 [2]\nX ' \ '0\nH 0\nMEASURE 0 [2]\nJUMP @START1\nLABEL @END2\n' # create a program that branches based on the value of a classical register x_prog = Program(X(0)) z_prog = Program() branch = Program(H(1)).measure(1, 1).if_then(1, x_prog, z_prog).measure(0, 0) assert branch.out() == 'H 1\nMEASURE 1 [1]\nJUMP-WHEN @THEN3 [1]\nJUMP @END4\nLABEL ' \ '@THEN3\nX 0\nLABEL @END4\nMEASURE 0 [0]\n'
def test_if_option(): reset_label_counter() p = Program(X(0)).measure(0, 0).if_then(0, Program(X(1))) assert p.out() == 'X 0\nMEASURE 0 [0]\nJUMP-WHEN @THEN1 [0]\nJUMP @END2\n' \ 'LABEL @THEN1\nX 1\nLABEL @END2\n'