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.