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