Skip to content

Commit 7198637

Browse files
committed
add test for modint / convolution
1 parent db08263 commit 7198637

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

test/unittest/convolution_test.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,3 +385,34 @@ TEST(ConvolutionTest, Conv18433) {
385385

386386
ASSERT_EQ(conv_naive<MOD>(a, b), convolution<MOD>(a, b));
387387
}
388+
389+
TEST(ConvolutionTest, Conv2) {
390+
std::vector<ll> empty = {};
391+
ASSERT_EQ(empty, convolution<2>(empty, empty));
392+
}
393+
394+
TEST(ConvolutionTest, Conv2147483647) {
395+
const int MOD = 2147483647;
396+
using mint = static_modint<MOD>;
397+
std::vector<mint> a(1), b(2);
398+
for (int i = 0; i < 1; i++) {
399+
a[i] = randint(0, MOD - 1);
400+
}
401+
for (int i = 0; i < 2; i++) {
402+
b[i] = randint(0, MOD - 1);
403+
}
404+
ASSERT_EQ(conv_naive(a, b), convolution(a, b));
405+
}
406+
407+
TEST(ConvolutionTest, Conv2130706433) {
408+
const int MOD = 2130706433;
409+
using mint = static_modint<MOD>;
410+
std::vector<mint> a(1024), b(1024);
411+
for (int i = 0; i < 1024; i++) {
412+
a[i] = randint(0, MOD - 1);
413+
}
414+
for (int i = 0; i < 1024; i++) {
415+
b[i] = randint(0, MOD - 1);
416+
}
417+
ASSERT_EQ(conv_naive(a, b), convolution(a, b));
418+
}

test/unittest/modint_test.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,29 @@ TEST(ModintTest, Mod1) {
100100
ASSERT_EQ(0, mint(true).val());
101101
}
102102

103+
TEST(ModintTest, ModIntMax) {
104+
modint::set_mod(INT32_MAX);
105+
for (int i = 0; i < 100; i++) {
106+
for (int j = 0; j < 100; j++) {
107+
ASSERT_EQ((modint(i) * modint(j)).val(), i * j);
108+
}
109+
}
110+
ASSERT_EQ((modint(1234) + modint(5678)).val(), 1234 + 5678);
111+
ASSERT_EQ((modint(1234) - modint(5678)).val(), INT32_MAX - 5678 + 1234);
112+
ASSERT_EQ((modint(1234) * modint(5678)).val(), 1234 * 5678);
113+
114+
using mint = static_modint<INT32_MAX>;
115+
for (int i = 0; i < 100; i++) {
116+
for (int j = 0; j < 100; j++) {
117+
ASSERT_EQ((mint(i) * mint(j)).val(), i * j);
118+
}
119+
}
120+
ASSERT_EQ((mint(1234) + mint(5678)).val(), 1234 + 5678);
121+
ASSERT_EQ((mint(1234) - mint(5678)).val(), INT32_MAX - 5678 + 1234);
122+
ASSERT_EQ((mint(1234) * mint(5678)).val(), 1234 * 5678);
123+
ASSERT_EQ((mint(INT32_MAX) + mint(INT32_MAX)).val(), 0);
124+
}
125+
103126
#ifndef _MSC_VER
104127

105128
TEST(ModintTest, Int128) {
@@ -158,6 +181,13 @@ TEST(ModintTest, Inv) {
158181
int x = modint(i).inv().val();
159182
ASSERT_EQ(1, (ll(x) * i) % 1'000'000'008);
160183
}
184+
185+
modint::set_mod(INT32_MAX);
186+
for (int i = 1; i < 100000; i++) {
187+
if (gcd(i, INT32_MAX) != 1) continue;
188+
int x = modint(i).inv().val();
189+
ASSERT_EQ(1, (ll(x) * i) % INT32_MAX);
190+
}
161191
}
162192

163193
TEST(ModintTest, ConstUsage) {

0 commit comments

Comments
 (0)