Skip to content

Commit 98d6b92

Browse files
committed
add test for xor basis ordered
1 parent affb26c commit 98d6b92

File tree

1 file changed

+49
-7
lines changed

1 file changed

+49
-7
lines changed

tests/library_checker_aizu_tests/math/xor_basis_intersection.test.cpp

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
"https://judge.yosupo.jp/problem/intersection_of_f2_vector_spaces"
33
#include "../template.hpp"
44
#include "../../../library/math/matrix_related/xor_basis_unordered_intersection.hpp"
5+
#include "../../../library/math/matrix_related/xor_basis_ordered.hpp"
56
// checking the condition: for 0 <= i < j < sz(b):
67
// (bit_floor(b[i]) & b[j]) == 0
7-
void check_condition(const basis& b) {
8+
void check_condition_unordered(const basis& b) {
89
int n = sz(b.b);
910
int or_bits = 0;
1011
for (int i = n - 1; i >= 0; i--) {
@@ -13,6 +14,25 @@ void check_condition(const basis& b) {
1314
or_bits |= b.b[i];
1415
}
1516
}
17+
void check_condition_ordered(
18+
const basis_ordered<int>& basis2,
19+
const basis_ordered<ll>& basis3,
20+
const basis_ordered<bitset<lg>>& basis4) {
21+
int or_bits2 = 0;
22+
ll or_bits3 = 0;
23+
bitset<lg> or_bits4 = 0;
24+
for (int i = 0; i < lg; i++) {
25+
assert(
26+
(bit_floor(uint64_t(basis2.b[i])) & or_bits2) == 0);
27+
assert(
28+
(bit_floor(uint64_t(basis3.b[i])) & or_bits3) == 0);
29+
assert((bit_floor(uint64_t(basis4.b[i].to_ullong())) &
30+
or_bits4.to_ullong()) == 0);
31+
or_bits2 |= basis2.b[i];
32+
or_bits3 |= basis3.b[i];
33+
or_bits4 |= basis4.b[i];
34+
}
35+
}
1636
int main() {
1737
cin.tie(0)->sync_with_stdio(0);
1838
int t;
@@ -21,23 +41,45 @@ int main() {
2141
int n;
2242
cin >> n;
2343
basis basis1;
44+
basis_ordered<int> basis2;
45+
basis_ordered<ll> basis3;
46+
basis_ordered<bitset<lg>> basis4;
2447
for (int i = 0; i < n; i++) {
2548
int val;
2649
cin >> val;
2750
assert(basis1.insert(val));
51+
assert(!basis1.insert(val));
52+
assert(basis2.insert(val));
53+
assert(!basis2.insert(val));
54+
assert(basis3.insert(val));
55+
assert(!basis3.insert(val));
56+
assert(basis4.insert(val));
57+
assert(!basis4.insert(val));
2858
}
29-
check_condition(basis1);
59+
check_condition_unordered(basis1);
60+
check_condition_ordered(basis2, basis3, basis4);
3061
int m;
3162
cin >> m;
32-
basis basis2;
63+
basis basis5;
64+
basis_ordered<int> basis6;
65+
basis_ordered<ll> basis7;
66+
basis_ordered<bitset<lg>> basis8;
3367
for (int j = 0; j < m; j++) {
3468
int val;
3569
cin >> val;
36-
assert(basis2.insert(val));
70+
assert(basis5.insert(val));
71+
assert(!basis5.insert(val));
72+
assert(basis6.insert(val));
73+
assert(!basis6.insert(val));
74+
assert(basis7.insert(val));
75+
assert(!basis7.insert(val));
76+
assert(basis8.insert(val));
77+
assert(!basis8.insert(val));
3778
}
38-
check_condition(basis2);
39-
basis inter = intersection(basis1, basis2);
40-
check_condition(inter);
79+
check_condition_unordered(basis5);
80+
check_condition_ordered(basis6, basis7, basis8);
81+
basis inter = intersection(basis1, basis5);
82+
check_condition_unordered(inter);
4183
cout << sz(inter.b) << " ";
4284
for (int val : inter.b) cout << val << " ";
4385
cout << '\n';

0 commit comments

Comments
 (0)