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>
 
Go to the source code of this file.
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
 
- Copyright
 - Copyright (c) 2019 
 
Definition in file test_qft.cpp.
 
◆ TEST_CASE() [1/3]
      
        
          | TEST_CASE  | 
          ( | 
          "QFT forward"  | 
          ,  | 
        
        
           | 
           | 
          ""  | 
          [qft]  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Test: QFT forward. 
Definition at line 27 of file test_qft.cpp.
   28     std::size_t min_idx=0, max_idx=3;
    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 );
    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 ) ) );
    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 );
    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) ) ) );
 
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.
   59     std::size_t min_idx=0, max_idx=3;
    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 );
    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 ) ) );
    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 );
    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) ) ) );
 
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.
   90     std::size_t min_idx=0, max_idx=3;
    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 );
    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 );
   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 );
   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 );
 
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.