Skip to content

Commit 06f3fd4

Browse files
committed
Add tests
1 parent bba62af commit 06f3fd4

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

src/math.rs

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,101 @@ pub fn floor_sum(n: i64, m: i64, mut a: i64, mut b: i64) -> i64 {
9999
ans += floor_sum(y_max, a, m, (a - x_max % a) % a);
100100
ans
101101
}
102+
103+
#[cfg(test)]
104+
mod tests {
105+
use super::*;
106+
#[test]
107+
fn test_pow_mod() {
108+
assert_eq!(pow_mod(0, 0, 1), 0);
109+
assert_eq!(pow_mod(0, 0, 3), 1);
110+
assert_eq!(pow_mod(0, 0, 723), 1);
111+
assert_eq!(pow_mod(0, 0, 998244353), 1);
112+
assert_eq!(pow_mod(0, 0, 2u32.pow(31)), 1);
113+
114+
assert_eq!(pow_mod(0, 1, 1), 0);
115+
assert_eq!(pow_mod(0, 1, 3), 0);
116+
assert_eq!(pow_mod(0, 1, 723), 0);
117+
assert_eq!(pow_mod(0, 1, 998244353), 0);
118+
assert_eq!(pow_mod(0, 1, 2u32.pow(31)), 0);
119+
120+
assert_eq!(pow_mod(0, i64::max_value(), 1), 0);
121+
assert_eq!(pow_mod(0, i64::max_value(), 3), 0);
122+
assert_eq!(pow_mod(0, i64::max_value(), 723), 0);
123+
assert_eq!(pow_mod(0, i64::max_value(), 998244353), 0);
124+
assert_eq!(pow_mod(0, i64::max_value(), 2u32.pow(31)), 0);
125+
126+
assert_eq!(pow_mod(1, 0, 1), 0);
127+
assert_eq!(pow_mod(1, 0, 3), 1);
128+
assert_eq!(pow_mod(1, 0, 723), 1);
129+
assert_eq!(pow_mod(1, 0, 998244353), 1);
130+
assert_eq!(pow_mod(1, 0, 2u32.pow(31)), 1);
131+
132+
assert_eq!(pow_mod(1, 1, 1), 0);
133+
assert_eq!(pow_mod(1, 1, 3), 1);
134+
assert_eq!(pow_mod(1, 1, 723), 1);
135+
assert_eq!(pow_mod(1, 1, 998244353), 1);
136+
assert_eq!(pow_mod(1, 1, 2u32.pow(31)), 1);
137+
138+
assert_eq!(pow_mod(1, i64::max_value(), 1), 0);
139+
assert_eq!(pow_mod(1, i64::max_value(), 3), 1);
140+
assert_eq!(pow_mod(1, i64::max_value(), 723), 1);
141+
assert_eq!(pow_mod(1, i64::max_value(), 998244353), 1);
142+
assert_eq!(pow_mod(1, i64::max_value(), 2u32.pow(31)), 1);
143+
144+
assert_eq!(pow_mod(i64::max_value(), 0, 1), 0);
145+
assert_eq!(pow_mod(i64::max_value(), 0, 3), 1);
146+
assert_eq!(pow_mod(i64::max_value(), 0, 723), 1);
147+
assert_eq!(pow_mod(i64::max_value(), 0, 998244353), 1);
148+
assert_eq!(pow_mod(i64::max_value(), 0, 2u32.pow(31)), 1);
149+
150+
assert_eq!(pow_mod(i64::max_value(), i64::max_value(), 1), 0);
151+
assert_eq!(pow_mod(i64::max_value(), i64::max_value(), 3), 1);
152+
assert_eq!(pow_mod(i64::max_value(), i64::max_value(), 723), 640);
153+
assert_eq!(
154+
pow_mod(i64::max_value(), i64::max_value(), 998244353),
155+
683296792
156+
);
157+
assert_eq!(
158+
pow_mod(i64::max_value(), i64::max_value(), 2u32.pow(31)),
159+
2147483647
160+
);
161+
162+
assert_eq!(pow_mod(2, 3, 1_000_000_007), 8);
163+
assert_eq!(pow_mod(5, 7, 1_000_000_007), 78125);
164+
assert_eq!(pow_mod(123, 456, 1_000_000_007), 565291922);
165+
}
166+
167+
#[test]
168+
#[should_panic]
169+
fn test_inv_mod_1() {
170+
inv_mod(271828, 0);
171+
}
172+
173+
#[test]
174+
#[should_panic]
175+
fn test_inv_mod_2() {
176+
inv_mod(3141592, 1000000008);
177+
}
178+
179+
#[test]
180+
fn test_crt() {
181+
let a = [44, 23, 13];
182+
let b = [13, 50, 22];
183+
assert_eq!(crt(&a, &b), (1773, 7150));
184+
let a = [12345, 67890, 99999];
185+
let b = [13, 444321, 95318];
186+
assert_eq!(crt(&a, &b), (103333581255, 550573258014));
187+
}
188+
189+
#[test]
190+
fn test_floor_sum() {
191+
assert_eq!(floor_sum(0, 1, 0, 0), 0);
192+
assert_eq!(floor_sum(1_000_000_000, 1, 1, 1), 500_000_000_500_000_000);
193+
assert_eq!(
194+
floor_sum(1_000_000_000, 1_000_000_000, 999_999_999, 999_999_999),
195+
499_999_999_500_000_000
196+
);
197+
assert_eq!(floor_sum(332955, 5590132, 2231, 999423), 22014575);
198+
}
199+
}

0 commit comments

Comments
 (0)