@@ -38,6 +38,19 @@ TEST_CASE("BinaryQuadraticModel tests") {
3838 }
3939 }
4040
41+ WHEN (" we use remove_variables()" ) {
42+ bqm.remove_variables (std::vector<int >{3 , 1 });
43+
44+ THEN (" The variables are removed and the model is reindexed" ) {
45+ REQUIRE (bqm.num_variables () == 3 );
46+ REQUIRE (bqm.num_interactions () == 0 );
47+ CHECK (bqm.linear (0 ) == 0 );
48+ CHECK (bqm.linear (1 ) == 2 ); // this was reindexed
49+ CHECK (bqm.linear (2 ) == 4 ); // this was reindexed twice
50+ CHECK (bqm.offset () == 5 );
51+ }
52+ }
53+
4154 WHEN (" we use fix_variable()" ) {
4255 bqm.fix_variable (2 , -1 );
4356 THEN (" the variable is removed, its biases distributed and the model is reindexed" ) {
@@ -94,6 +107,52 @@ TEST_CASE("BinaryQuadraticModel tests") {
94107 }
95108 }
96109
110+ WHEN (" we use remove_variables()" ) {
111+ bqm.remove_variables (std::vector<int >{3 , 1 });
112+
113+ THEN (" The variables are removed and the model is reindexed" ) {
114+ REQUIRE (bqm.num_variables () == 3 );
115+ CHECK (bqm.linear (0 ) == 0 );
116+ CHECK (bqm.linear (1 ) == 2 ); // this was reindexed
117+ CHECK (bqm.linear (2 ) == 4 ); // this was reindexed twice
118+ CHECK (bqm.offset () == 5 );
119+ CHECK (bqm.num_interactions () == 0 ); // no remaining quadratic
120+ }
121+ }
122+
123+ WHEN (" we use remove_variables() to remove one variable" ) {
124+ bqm.remove_variables ({2 });
125+
126+ THEN (" everything is reindexed" ) {
127+ REQUIRE (bqm.num_variables () == 4 );
128+ REQUIRE (bqm.num_interactions () == 2 );
129+ CHECK (bqm.linear (0 ) == 0 );
130+ CHECK (bqm.linear (1 ) == -1 );
131+ CHECK (bqm.linear (2 ) == -3 ); // this was reindexed
132+ CHECK (bqm.linear (3 ) == 4 ); // this was reindexed
133+ CHECK (bqm.quadratic (0 , 1 ) == 1 );
134+ CHECK (bqm.quadratic (2 , 3 ) == 34 ); // this was reindexed
135+ CHECK (bqm.offset () == 5 );
136+ }
137+ }
138+
139+ WHEN (" we use remove_variables() to remove no variables" ) {
140+ bqm.remove_variables ({});
141+
142+ THEN (" nothing has changed" ) {
143+ REQUIRE (bqm.num_variables () == 5 );
144+ REQUIRE (bqm.num_interactions () == 4 );
145+ CHECK (bqm.linear (0 ) == 0 );
146+ CHECK (bqm.linear (1 ) == -1 );
147+ CHECK (bqm.linear (2 ) == 2 );
148+ CHECK (bqm.linear (3 ) == -3 );
149+ CHECK (bqm.linear (4 ) == 4 );
150+ CHECK (bqm.quadratic (0 , 1 ) == 1 );
151+ CHECK (bqm.quadratic (3 , 4 ) == 34 );
152+ CHECK (bqm.offset () == 5 );
153+ }
154+ }
155+
97156 AND_GIVEN (" another identical BQM" ) {
98157 auto bqm2 = BinaryQuadraticModel<double >(5 , Vartype::SPIN);
99158 bqm2.set_offset (5 );
0 commit comments