2828#include < catch2/catch_test_macros.hpp> // for operator""_catch_sr, operator==
2929
3030#include " hpcombi/bmat16.hpp" // for BMat16, operator<<
31- #include " hpcombi/perm16.hpp" // for Perm16
32- #include " hpcombi/vect16.hpp" // for Vect16
3331
3432namespace HPCombi {
3533namespace {
@@ -88,38 +86,38 @@ struct BMat16Fixture {
8886 {1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
8987 {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 }}),
9088 bm2({{1 , 1 }, {0 , 1 }}), bm2t({{1 , 0 }, {1 , 1 }}),
91- bm3({{0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
92- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 },
93- {1 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 },
94- {0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 },
95- { 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 0 },
96- {1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 },
97- { 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 },
98- { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 0 , 0 },
99- { 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },
100- {1 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 },
101- { 1 , 1 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 },
102- {1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 },
103- {0 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 },
104- { 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 },
105- {0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 },
106- {0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 0 , 1 }}),
107- bm3t({{0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },
108- {0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 1 },
109- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 },
110- {1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
111- {0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
112- {1 , 1 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 },
113- {0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 },
114- {0 , 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 },
115- {0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 },
116- {1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 },
117- {0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 },
118- {1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 },
119- {1 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 },
120- {0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 },
121- {1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
122- {1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 }}),
89+ bm3({{0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
90+ {0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
91+ {1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 },
92+ {0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 },
93+ { 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 },
94+ {1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 },
95+ { 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 },
96+ { 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
97+ { 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
98+ {1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
99+ { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 },
100+ {1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 },
101+ {0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 },
102+ { 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
103+ {0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 },
104+ {0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 }}),
105+ bm3t({{0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 },
106+ {0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 1 },
107+ {0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
108+ {1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 },
109+ {1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 },
110+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 },
111+ {1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 },
112+ {0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 },
113+ {0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 },
114+ {0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
115+ {1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 1 },
116+ {0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 },
117+ {1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 },
118+ {1 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 },
119+ {1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 },
120+ {0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 }}),
123121 BMlist(
124122 {zero, one1, one2, ones, bm, bm1, bmm1, bm2, bm2t, bm3, bm3t}) {}
125123};
@@ -128,7 +126,45 @@ struct BMat16Fixture {
128126// ****************************************************************************//
129127// ****************************************************************************//
130128
131- TEST_CASE_METHOD (BMat16Fixture, " BMat16::transpose" , " [BMat16][000]" ) {
129+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::one" , " [BMat16][000]" ) {
130+ CHECK (BMat16::one (0 ) == zero);
131+ CHECK (BMat16::one (2 ) == BMat16 ({{1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
132+ {0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
133+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
134+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
135+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
136+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
137+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
138+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
139+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
140+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
141+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
142+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
143+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
144+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
145+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
146+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }}));
147+ CHECK (BMat16::one (10 ) == BMat16 ({{1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
148+ {0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
149+ {0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
150+ {0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
151+ {0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
152+ {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
153+ {0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
154+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
155+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
156+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 },
157+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
158+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
159+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
160+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
161+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
162+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }}));
163+ CHECK (BMat16::one (16 ) == BMat16::one ());
164+ }
165+
166+
167+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::transpose" , " [BMat16][001]" ) {
132168 CHECK (zero.transpose () == zero);
133169 CHECK (bm2.transpose () == bm2t);
134170 CHECK (bm3.transpose () == bm3t);
@@ -138,9 +174,9 @@ TEST_CASE_METHOD(BMat16Fixture, "BMat16::transpose", "[BMat16][000]") {
138174 }
139175}
140176
141- TEST_AGREES (BMat16Fixture, transpose, transpose_naive, BMlist, " [BMat16][001 ]" );
177+ TEST_AGREES (BMat16Fixture, transpose, transpose_naive, BMlist, " [BMat16][002 ]" );
142178
143- TEST_CASE_METHOD (BMat16Fixture, " BMat16::operator*" , " [BMat16][002 ]" ) {
179+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::operator*" , " [BMat16][003 ]" ) {
144180 BMat16 tmp = bm * bm1;
145181 CHECK (tmp == bmm1);
146182 CHECK (tmp == bm * bm1);
@@ -162,11 +198,11 @@ TEST_CASE_METHOD(BMat16Fixture, "BMat16::operator*", "[BMat16][002]") {
162198 }
163199}
164200
165- TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_4bmat8, BMlist, " [BMat16][003 ]" );
166- TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_naive, BMlist, " [BMat16][004 ]" );
167- TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_naive_array, BMlist, " [BMat16][005 ]" );
201+ TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_4bmat8, BMlist, " [BMat16][004 ]" );
202+ TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_naive, BMlist, " [BMat16][005 ]" );
203+ TEST_AGREES2 (BMat16Fixture, BMat16::operator *, mult_naive_array, BMlist, " [BMat16][006 ]" );
168204
169- TEST_CASE (" BMat16::random" , " [BMat16][006 ]" ) {
205+ TEST_CASE (" BMat16::random" , " [BMat16][007 ]" ) {
170206 for (size_t d = 1 ; d < 8 ; ++d) {
171207 BMat16 bm = BMat16::random (d);
172208 for (size_t i = d + 1 ; i < 16 ; ++i) {
@@ -178,7 +214,7 @@ TEST_CASE("BMat16::random", "[BMat16][006]") {
178214 }
179215}
180216
181- TEST_CASE (" BMat16::operator()" , " [BMat16][007 ]" ) {
217+ TEST_CASE (" BMat16::operator()" , " [BMat16][008 ]" ) {
182218 std::vector<std::vector<bool >> mat = {
183219 {0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 },
184220 {0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },
@@ -203,32 +239,56 @@ TEST_CASE("BMat16::operator()", "[BMat16][007]") {
203239 }
204240}
205241
206- TEST_CASE_METHOD (BMat16Fixture, " BMat16::operator<<" , " [BMat16][008 ]" ) {
242+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::operator<<" , " [BMat16][009 ]" ) {
207243 std::ostringstream oss;
208244 oss << bm3;
209- CHECK (oss.str () == " 0001010001011011 \n "
210- " 0111011000110001 \n "
211- " 1010001101100010 \n "
212- " 0011010100001011 \n "
213- " 1001001111001110 \n "
214- " 1010100111101100 \n "
215- " 0110111001100001 \n "
216- " 0000010110111100 \n "
217- " 1100110100000001 \n "
218- " 1101000100001100 \n "
219- " 1101111000101101 \n "
220- " 1010000001000011 \n "
221- " 0011101110111000 \n "
222- " 0001001010011001 \n "
223- " 0100100100011110 \n "
224- " 0101011111110101 \n " );
245+ CHECK (oss.str () == " 0001101000101110 \n "
246+ " 0100101100001001 \n "
247+ " 1010000101101111 \n "
248+ " 0101001010100010 \n "
249+ " 0010001000010001 \n "
250+ " 1100101101100100 \n "
251+ " 1011000000100100 \n "
252+ " 1010001010010010 \n "
253+ " 0100100100010010 \n "
254+ " 1000101010001001 \n "
255+ " 0000000010100001 \n "
256+ " 1101110010100010 \n "
257+ " 0100100000110101 \n "
258+ " 1101001010101110 \n "
259+ " 0100010100001001 \n "
260+ " 0100000110100100 \n " );
225261
226262 std::stringbuf buff;
227263 std::ostream os (&buff);
228264 os << BMat8::random (); // Also does not do anything visible
229265}
230266
231- TEST_CASE_METHOD (BMat16Fixture, " BMat16::nr_rows" , " [BMat16][009]" ) {
267+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::set" , " [BMat16][010]" ) {
268+ BMat16 bs;
269+ bs = bm;
270+ bs.set (0 , 0 , 1 );
271+ CHECK (bs != bm);
272+ bs = bm;
273+ bs.set (0 , 0 , 0 );
274+ CHECK (bs == bm);
275+ bs = bm;
276+ bs.set (13 , 6 , 1 );
277+ CHECK (bs != bm);
278+ CHECK (bs == bm3);
279+
280+ for (size_t i = 0 ; i < 16 ; ++i)
281+ for (size_t j = 0 ; j < 16 ; ++j)
282+ bs.set (i, j, true );
283+ CHECK (bs == ones);
284+
285+ for (size_t i = 0 ; i < 16 ; ++i)
286+ for (size_t j = 0 ; j < 16 ; ++j)
287+ bs.set (i, j, false );
288+ CHECK (bs == zero);
289+ }
290+
291+ TEST_CASE_METHOD (BMat16Fixture, " BMat16::nr_rows" , " [BMat16][011]" ) {
232292 CHECK (zero.nr_rows () == 0 );
233293 CHECK (one1.nr_rows () == 1 );
234294 CHECK (one2.nr_rows () == 2 );
0 commit comments