Skip to content

Commit 3ca8875

Browse files
Tests for modular arithmetic
1 parent a0ac66f commit 3ca8875

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package com.jwetherell.algorithms.mathematics.test;
2+
3+
import com.jwetherell.algorithms.mathematics.Modular;
4+
import org.junit.Test;
5+
import static org.junit.Assert.*;
6+
7+
public class ModularArithmetic {
8+
9+
@Test
10+
public void sumTest() {
11+
assertEquals(4,
12+
Modular.add(-3, 22, 5));
13+
14+
assertEquals(Long.MAX_VALUE-2,
15+
Modular.add(Long.MAX_VALUE-1, Long.MAX_VALUE-1, Long.MAX_VALUE));
16+
17+
assertEquals(2,
18+
Modular.add(1-Long.MAX_VALUE, 1-Long.MAX_VALUE, Long.MAX_VALUE));
19+
20+
21+
assertEquals(0,
22+
Modular.add(Long.MAX_VALUE/2, Long.MAX_VALUE/2 + 1, Long.MAX_VALUE));
23+
24+
assertEquals(0,
25+
Modular.add(-1000, -10000000, 10));
26+
27+
try {
28+
Modular.add(1, 1,0);
29+
assertTrue("No exception", false);
30+
} catch (Exception ignored) {
31+
}
32+
}
33+
34+
@Test
35+
public void subtractTest() {
36+
assertEquals(0,
37+
Modular.subtract(-22, 3, 5));
38+
39+
assertEquals(Long.MAX_VALUE-1,
40+
Modular.subtract(Long.MAX_VALUE-2, Long.MAX_VALUE-1, Long.MAX_VALUE));
41+
42+
assertEquals(Long.MAX_VALUE-1,
43+
Modular.subtract(1-Long.MAX_VALUE, 2, Long.MAX_VALUE));
44+
45+
assertEquals(0,
46+
Modular.subtract(-1000, -10000000, 10));
47+
48+
try {
49+
Modular.subtract(1, 1,0);
50+
assertTrue("No exception", false);
51+
} catch (Exception ignored) {
52+
}
53+
}
54+
55+
@Test
56+
public void multiplyTest() {
57+
assertEquals(10,
58+
Modular.multiply(Long.MAX_VALUE-2, Long.MAX_VALUE-5, Long.MAX_VALUE));
59+
60+
assertEquals(3,
61+
Modular.multiply(-5, -7, 32));
62+
63+
try {
64+
Modular.multiply(1, 1,0);
65+
assertTrue("No exception", false);
66+
} catch (Exception ignored) {
67+
}
68+
69+
}
70+
71+
@Test
72+
public void powerTest() {
73+
assertEquals(1,
74+
Modular.pow(3, 1000000006, 1000000007));
75+
76+
assertEquals(8,
77+
Modular.pow(2, 66, Long.MAX_VALUE));
78+
79+
assertEquals(1,
80+
Modular.pow(123, 0, 1111));
81+
82+
assertEquals(0,
83+
Modular.pow(0, 123, 2));
84+
85+
try {
86+
Modular.pow(5, 0,5);
87+
assertTrue("No exception", false);
88+
} catch (Exception ignored) {
89+
}
90+
91+
try {
92+
Modular.pow(5, -5,5);
93+
assertTrue("No exception", false);
94+
} catch (Exception ignored) {
95+
}
96+
97+
try {
98+
Modular.pow(5, 5,0);
99+
assertTrue("No exception", false);
100+
} catch (Exception ignored) {
101+
}
102+
}
103+
104+
@Test
105+
public void divideTest() {
106+
try {
107+
Modular.divide(11, 6, 120);
108+
assertTrue("No exception", false);
109+
} catch (Exception ignored) {
110+
}
111+
112+
try {
113+
Modular.divide(2, 2, 0);
114+
assertTrue("No exception", false);
115+
} catch (Exception ignored) {
116+
}
117+
118+
assertEquals(1,
119+
Modular.divide(7, 7, 125));
120+
121+
assertEquals(97,
122+
Modular.divide(Modular.multiply(97, 25, 1023), 25, 1023));
123+
124+
assertEquals(Long.MAX_VALUE-11,
125+
Modular.divide(Modular.multiply(Long.MAX_VALUE-11, Long.MAX_VALUE-12, Long.MAX_VALUE),
126+
Long.MAX_VALUE-12,
127+
Long.MAX_VALUE));
128+
}
129+
}

0 commit comments

Comments
 (0)