22
22
#include < string>
23
23
#include < vector>
24
24
25
+ constexpr double EPS = 1e-10 ;
26
+
25
27
class StatePreparation
26
28
: public testing::TestWithParam<std::vector<std::complex<double >>> {
27
29
protected:
@@ -33,11 +35,29 @@ class StatePreparation
33
35
34
36
INSTANTIATE_TEST_SUITE_P (
35
37
StatePreparation, StatePreparation,
36
- testing::Values (std::vector{std::complex{1 / std::sqrt (2 )},
37
- std::complex{-1 / std::sqrt (2 )}},
38
- std::vector<std::complex<double >>{
39
- 0 , std::complex{1 / std::sqrt (2 )},
40
- std::complex{-1 / std::sqrt (2 )}, 0 }));
38
+ testing::Values (
39
+ std::vector{std::complex{1 / std::sqrt (2 )},
40
+ std::complex{-1 / std::sqrt (2 )}},
41
+ std::vector<std::complex<double >>{
42
+ std::complex<double >{1 / std::sqrt (2 )},
43
+ std::complex<double >{0 , -1 / std::sqrt (2 )}},
44
+ std::vector<std::complex<double >>{0 , std::complex{1 / std::sqrt (2 )},
45
+ std::complex{-1 / std::sqrt (2 )}, 0 },
46
+ std::vector<std::complex<double >>{
47
+ std::complex<double >{1 / std::sqrt (13 )},
48
+ std::complex<double >{-1 / std::sqrt (13 )},
49
+ std::complex<double >{1 / std::sqrt (13 ), -1 / std::sqrt (13 )},
50
+ std::complex<double >{0 , 3 / std::sqrt (13 )}},
51
+ std::vector<std::complex<double >>{
52
+ std::complex<double >{1 . / 4 }, std::complex<double >{1 . / 4 },
53
+ std::complex<double >{1 . / 4 }, std::complex<double >{1 . / 4 },
54
+ std::complex<double >{1 . / 4 }, std::complex<double >{1 . / 4 },
55
+ std::complex<double >{1 . / 4 }, std::complex<double >{3 . / 4 }},
56
+ std::vector<std::complex<double >>{
57
+ std::complex<double >{1 . / 4 }, std::complex<double >{0 , 1 . / 4 },
58
+ std::complex<double >{1 . / 4 }, std::complex<double >{0 , 1 . / 4 },
59
+ std::complex<double >{0 , 1 . / 4 }, std::complex<double >{1 . / 4 },
60
+ std::complex<double >{1 . / 4 }, std::complex<double >{3 . / 4 }}));
41
61
42
62
TEST_P (StatePreparation, StatePreparationCircuitSimulation) {
43
63
const auto expectedAmplitudes = GetParam ();
@@ -48,7 +68,10 @@ TEST_P(StatePreparation, StatePreparationCircuitSimulation) {
48
68
ASSERT_NO_THROW (
49
69
{ e = dd::simulate (qc, dd->makeZeroState (qc.getNqubits ()), *dd); });
50
70
auto result = e.getVector ();
51
- ASSERT_EQ (expectedAmplitudes, result);
71
+ for (size_t i = 0 ; i < expectedAmplitudes.size (); ++i) {
72
+ ASSERT_NEAR (expectedAmplitudes[i].real (), result[i].real (), EPS);
73
+ ASSERT_NEAR (expectedAmplitudes[i].imag (), result[i].imag (), EPS);
74
+ }
52
75
}
53
76
54
77
TEST_P (StatePreparation, StatePreparationCircuit) {}
0 commit comments