@@ -820,7 +820,7 @@ void TestBulkSetAmplitude() {
820820 for (int i = 0 ; i < 8 ; i++) {
821821 state_space.SetAmpl (state, i, 1 , 1 );
822822 }
823- state_space.BulkSetAmpl (state, 1 , 0 , 0 , 0 );
823+ state_space.BulkSetAmpl (state, 1 , 0 , 0 , 0 , false );
824824 EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(0 , 0 ));
825825 EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(1 , 1 ));
826826 EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(0 , 0 ));
@@ -833,7 +833,7 @@ void TestBulkSetAmplitude() {
833833 for (int i = 0 ; i < 8 ; i++) {
834834 state_space.SetAmpl (state, i, 1 , 1 );
835835 }
836- state_space.BulkSetAmpl (state, 2 , 0 , 0 , 0 );
836+ state_space.BulkSetAmpl (state, 2 , 0 , 0 , 0 , false );
837837 EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(0 , 0 ));
838838 EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(0 , 0 ));
839839 EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(1 , 1 ));
@@ -846,7 +846,7 @@ void TestBulkSetAmplitude() {
846846 for (int i = 0 ; i < 8 ; i++) {
847847 state_space.SetAmpl (state, i, 1 , 1 );
848848 }
849- state_space.BulkSetAmpl (state, 4 , 0 , 0 , 0 );
849+ state_space.BulkSetAmpl (state, 4 , 0 , 0 , 0 , false );
850850 EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(0 , 0 ));
851851 EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(0 , 0 ));
852852 EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(0 , 0 ));
@@ -856,6 +856,89 @@ void TestBulkSetAmplitude() {
856856 EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(1 , 1 ));
857857 EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(1 , 1 ));
858858
859+ for (int i = 0 ; i < 8 ; i++) {
860+ state_space.SetAmpl (state, i, 1 , 1 );
861+ }
862+ state_space.BulkSetAmpl (state, 4 | 1 , 4 , 0 , 0 , false );
863+ EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(1 , 1 ));
864+ EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(1 , 1 ));
865+ EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(1 , 1 ));
866+ EXPECT_EQ (state_space.GetAmpl (state, 3 ), std::complex <float >(1 , 1 ));
867+ EXPECT_EQ (state_space.GetAmpl (state, 4 ), std::complex <float >(0 , 0 ));
868+ EXPECT_EQ (state_space.GetAmpl (state, 5 ), std::complex <float >(1 , 1 ));
869+ EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(0 , 0 ));
870+ EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(1 , 1 ));
871+ }
872+
873+ template <typename StateSpace>
874+ void TestBulkSetAmplitudeExclusion () {
875+ using State = typename StateSpace::State;
876+ unsigned num_qubits = 3 ;
877+
878+ StateSpace state_space (1 );
879+
880+ State state = state_space.Create (num_qubits);
881+ for (int i = 0 ; i < 8 ; i++) {
882+ state_space.SetAmpl (state, i, 1 , 1 );
883+ }
884+ state_space.BulkSetAmpl (state, 1 , 0 , 0 , 0 , true );
885+ EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(1 , 1 ));
886+ EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(0 , 0 ));
887+ EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(1 , 1 ));
888+ EXPECT_EQ (state_space.GetAmpl (state, 3 ), std::complex <float >(0 , 0 ));
889+ EXPECT_EQ (state_space.GetAmpl (state, 4 ), std::complex <float >(1 , 1 ));
890+ EXPECT_EQ (state_space.GetAmpl (state, 5 ), std::complex <float >(0 , 0 ));
891+ EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(1 , 1 ));
892+ EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(0 , 0 ));
893+
894+ for (int i = 0 ; i < 8 ; i++) {
895+ state_space.SetAmpl (state, i, 1 , 1 );
896+ }
897+ state_space.BulkSetAmpl (state, 2 , 0 , 0 , 0 , true );
898+ EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(1 , 1 ));
899+ EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(1 , 1 ));
900+ EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(0 , 0 ));
901+ EXPECT_EQ (state_space.GetAmpl (state, 3 ), std::complex <float >(0 , 0 ));
902+ EXPECT_EQ (state_space.GetAmpl (state, 4 ), std::complex <float >(1 , 1 ));
903+ EXPECT_EQ (state_space.GetAmpl (state, 5 ), std::complex <float >(1 , 1 ));
904+ EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(0 , 0 ));
905+ EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(0 , 0 ));
906+
907+ for (int i = 0 ; i < 8 ; i++) {
908+ state_space.SetAmpl (state, i, 1 , 1 );
909+ }
910+ state_space.BulkSetAmpl (state, 4 , 0 , 0 , 0 , true );
911+ EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(1 , 1 ));
912+ EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(1 , 1 ));
913+ EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(1 , 1 ));
914+ EXPECT_EQ (state_space.GetAmpl (state, 3 ), std::complex <float >(1 , 1 ));
915+ EXPECT_EQ (state_space.GetAmpl (state, 4 ), std::complex <float >(0 , 0 ));
916+ EXPECT_EQ (state_space.GetAmpl (state, 5 ), std::complex <float >(0 , 0 ));
917+ EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(0 , 0 ));
918+ EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(0 , 0 ));
919+
920+ for (int i = 0 ; i < 8 ; i++) {
921+ state_space.SetAmpl (state, i, 1 , 1 );
922+ }
923+ state_space.BulkSetAmpl (state, 4 | 1 , 4 , 0 , 0 , true );
924+ EXPECT_EQ (state_space.GetAmpl (state, 0 ), std::complex <float >(0 , 0 ));
925+ EXPECT_EQ (state_space.GetAmpl (state, 1 ), std::complex <float >(0 , 0 ));
926+ EXPECT_EQ (state_space.GetAmpl (state, 2 ), std::complex <float >(0 , 0 ));
927+ EXPECT_EQ (state_space.GetAmpl (state, 3 ), std::complex <float >(0 , 0 ));
928+ EXPECT_EQ (state_space.GetAmpl (state, 4 ), std::complex <float >(1 , 1 ));
929+ EXPECT_EQ (state_space.GetAmpl (state, 5 ), std::complex <float >(0 , 0 ));
930+ EXPECT_EQ (state_space.GetAmpl (state, 6 ), std::complex <float >(1 , 1 ));
931+ EXPECT_EQ (state_space.GetAmpl (state, 7 ), std::complex <float >(0 , 0 ));
932+ }
933+
934+ template <typename StateSpace>
935+ void TestBulkSetAmplitudeDefault () {
936+ using State = typename StateSpace::State;
937+ unsigned num_qubits = 3 ;
938+
939+ StateSpace state_space (1 );
940+
941+ State state = state_space.Create (num_qubits);
859942 for (int i = 0 ; i < 8 ; i++) {
860943 state_space.SetAmpl (state, i, 1 , 1 );
861944 }
0 commit comments