@@ -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
105128TEST (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
163193TEST (ModintTest, ConstUsage) {
0 commit comments