QNLP  v1.0
test_qft.cpp File Reference

Tests for the quantum Fourier transform (QFT) implementation. More...

#include "catch2/catch.hpp"
#include "Simulator.hpp"
#include "IntelSimulator.cpp"
#include <memory>
#include "qft.hpp"
#include <bitset>
Include dependency graph for test_qft.cpp:

Go to the source code of this file.

Functions

 TEST_CASE ("QFT forward","[qft]")
 Test: QFT forward. More...
 
 TEST_CASE ("QFT inverse","[qft]")
 Test: QFT inverse. More...
 
 TEST_CASE ("QFT forward and inverse","[qft]")
 Test: QFT forward and inverse. More...
 

Detailed Description

Tests for the quantum Fourier transform (QFT) implementation.

Author
Lee J. O'Riordan (lee.o.nosp@m.rior.nosp@m.dan@i.nosp@m.chec.nosp@m..ie)
Version
0.1
Date
2019-05-13

Definition in file test_qft.cpp.

Function Documentation

◆ TEST_CASE() [1/3]

TEST_CASE ( "QFT forward"  ,
""  [qft] 
)

Test: QFT forward.

Definition at line 27 of file test_qft.cpp.

27  {
28  std::size_t min_idx=0, max_idx=3;
29  std::size_t num_qubits = max_idx - min_idx +1;
31  SECTION("Full register"){
32  auto& r = sim.getQubitRegister();
33  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
34  REQUIRE( r.GetProbability(idx) == 0.0 );
35  }
36  sim.applyQFT(min_idx, max_idx);
37  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
38  REQUIRE( r.GetProbability(idx) == Approx( sqrt( 1. / num_qubits ) ) );
39  }
40  }
41  SECTION("Sub register"){
42  auto& r = sim.getQubitRegister();
43  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
44  REQUIRE( r.GetProbability(idx) == 0.0 );
45  }
46  sim.applyQFT(min_idx+1, max_idx);
47  REQUIRE( r.GetProbability(min_idx) == 0.0 );
48  for(std::size_t idx = min_idx+1; idx <= max_idx; idx++){
49  REQUIRE( r.GetProbability(idx) == Approx( sqrt( 1. / (num_qubits-1) ) ) );
50  }
51  }
52 }
Class definition for IntelSimulator. The purpose of this class is to map the functionality of the und...

References ncu_opt_tester::num_qubits, and ncu_opt_tester::sim.

◆ TEST_CASE() [2/3]

TEST_CASE ( "QFT inverse"  ,
""  [qft] 
)

Test: QFT inverse.

Definition at line 58 of file test_qft.cpp.

58  {
59  std::size_t min_idx=0, max_idx=3;
60  std::size_t num_qubits = max_idx - min_idx +1;
62  SECTION("Full register"){
63  auto& r = sim.getQubitRegister();
64  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
65  REQUIRE( r.GetProbability(idx) == 0.0 );
66  }
67  sim.applyIQFT(min_idx, max_idx);
68  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
69  REQUIRE( r.GetProbability(idx) == Approx( sqrt( 1. / num_qubits ) ) );
70  }
71  }
72  SECTION("Sub register"){
73  auto& r = sim.getQubitRegister();
74  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
75  REQUIRE( r.GetProbability(idx) == 0.0 );
76  }
77  sim.applyIQFT(min_idx+1, max_idx);
78  REQUIRE( r.GetProbability(min_idx) == 0.0 );
79  for(std::size_t idx = min_idx+1; idx <= max_idx; idx++){
80  REQUIRE( r.GetProbability(idx) == Approx( sqrt( 1. / (num_qubits-1) ) ) );
81  }
82  }
83 }
Class definition for IntelSimulator. The purpose of this class is to map the functionality of the und...

References ncu_opt_tester::num_qubits, and ncu_opt_tester::sim.

◆ TEST_CASE() [3/3]

TEST_CASE ( "QFT forward and inverse"  ,
""  [qft] 
)

Test: QFT forward and inverse.

Definition at line 89 of file test_qft.cpp.

89  {
90  std::size_t min_idx=0, max_idx=3;
91  std::size_t num_qubits = max_idx - min_idx +1;
93 
94  SECTION("Full register"){
95  auto& r = sim.getQubitRegister();
96  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
97  REQUIRE( r.GetProbability(idx) == 0.0 );
98  }
99  sim.applyQFT(min_idx, max_idx);
100  sim.applyIQFT(min_idx, max_idx);
101  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
102  REQUIRE( r.GetProbability(idx) == 0.0 );
103  }
104  }
105  SECTION("Sub register"){
106  auto& r = sim.getQubitRegister();
107  for(std::size_t idx = min_idx; idx <= max_idx; idx++){
108  REQUIRE( r.GetProbability(idx) == 0.0 );
109  }
110  sim.applyQFT(min_idx+1, max_idx);
111  sim.applyIQFT(min_idx+1, max_idx);
112  for(std::size_t idx = min_idx+1; idx <= max_idx; idx++){
113  REQUIRE( r.GetProbability(idx) == 0.0 );
114  }
115  }
116 }
Class definition for IntelSimulator. The purpose of this class is to map the functionality of the und...

References ncu_opt_tester::num_qubits, and ncu_opt_tester::sim.