abst 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'abst'
4
+
5
+ class TC_Group < MiniTest::Unit::TestCase
6
+ def test_element_order
7
+ f_7 = Abst.residue_class_field(7 * Integer)
8
+ assert_equal(6, Abst.element_order(f_7.new(3), 6))
9
+ end
10
+ end
@@ -0,0 +1,161 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'abst'
4
+
5
+ class TC_Fundamental < MiniTest::Unit::TestCase
6
+ def test_to_fs
7
+ assert_equal('0', 0.to_fs)
8
+ assert_equal('1', 1.to_fs)
9
+ assert_equal('123 456 789', 123456789.to_fs)
10
+ assert_equal('1 234 567 890', 1234567890.to_fs)
11
+ end
12
+
13
+ def test_bit_size
14
+ assert_equal(0, 0.bit_size)
15
+ assert_equal(1, 1.bit_size)
16
+ assert_equal(2, 2.bit_size)
17
+ assert_equal(2, 3.bit_size)
18
+ assert_equal(3, 4.bit_size)
19
+ assert_equal(3, 5.bit_size)
20
+ assert_equal(10, 1023.bit_size)
21
+ assert_equal(11, 1024.bit_size)
22
+ assert_equal(11, 1025.bit_size)
23
+ end
24
+
25
+ def test_factorial
26
+ assert_equal(1, 0.factorial)
27
+ assert_equal(1, 1.factorial)
28
+ assert_equal(2, 2.factorial)
29
+ assert_equal(6, 3.factorial)
30
+ assert_equal(24, 4.factorial)
31
+ assert_equal(120, 5.factorial)
32
+ assert_equal(720, 6.factorial)
33
+ end
34
+
35
+ def test_pmod_factorial
36
+ assert_equal(1, 0.pmod_factorial(5))
37
+ assert_equal(1, 1.pmod_factorial(5))
38
+ assert_equal(0, 2.pmod_factorial(2))
39
+ assert_equal(1, 3.pmod_factorial(5))
40
+ assert_equal(7, 4.pmod_factorial(17))
41
+ assert_equal(27, 5.pmod_factorial(31))
42
+ assert_equal(0, 6.pmod_factorial(5))
43
+ end
44
+
45
+ def test_extended_pmod_factorial
46
+ assert_equal([1, 0], 0.extended_pmod_factorial(5))
47
+ assert_equal([1, 0], 1.extended_pmod_factorial(5))
48
+ assert_equal([1, 1], 2.extended_pmod_factorial(2))
49
+ assert_equal([2, 1], 3.extended_pmod_factorial(3))
50
+ assert_equal([7, 0], 4.extended_pmod_factorial(17))
51
+ assert_equal([1, 3], 5.extended_pmod_factorial(2))
52
+ assert_equal([4, 1], 6.extended_pmod_factorial(5))
53
+ end
54
+
55
+ def test_combination
56
+ assert_equal(1, 1.combination(1))
57
+ assert_equal(1, 1.combination(0))
58
+ assert_equal(45, 10.combination(2))
59
+ assert_equal(120, 10.combination(7))
60
+ end
61
+
62
+ def test_pmod_combination
63
+ assert_equal(1, 1.pmod_combination(1, 2))
64
+ assert_equal(1, 1.pmod_combination(0, 3))
65
+ assert_equal(0, 10.pmod_combination(2, 3))
66
+ assert_equal(3, 10.pmod_combination(7, 13))
67
+ assert_equal(0, (10 ** 18).pmod_combination(10 ** 9, 2437))
68
+ assert_equal(673, (10 ** 18).pmod_combination(10 ** 9, 3389))
69
+ end
70
+
71
+ def test_power_of?
72
+ assert_equal(true, 2.power_of?(2))
73
+ assert_equal(false, 3.power_of?(2))
74
+ assert_equal(true, 36.power_of?(6))
75
+ assert_equal(false, 100.power_of?(11))
76
+ end
77
+
78
+ def test_square?
79
+ assert_equal(1, 1.square?)
80
+ assert_equal(false, 2.square?)
81
+ assert_equal(false, 3.square?)
82
+ assert_equal(2, 4.square?)
83
+ assert_equal(false, 5.square?)
84
+ assert_equal(13, 169.square?)
85
+ assert_equal(false, 42342341.square?)
86
+
87
+ 10.times do
88
+ n = rand(10 ** 10) + 1
89
+ square = n ** 2
90
+ assert_equal(n, square.square?)
91
+ assert_equal(false, (square + 1).square?)
92
+ end
93
+ end
94
+
95
+ def test_squarefree?
96
+ assert_equal(true, 1.squarefree?)
97
+ assert_equal(true, 2.squarefree?)
98
+ assert_equal(true, 3.squarefree?)
99
+ assert_equal(false, 4.squarefree?)
100
+ assert_equal(true, 5.squarefree?)
101
+ assert_equal(true, 6.squarefree?)
102
+ assert_equal(true, 7.squarefree?)
103
+ assert_equal(false, 8.squarefree?)
104
+ assert_equal(true, (7 * 13).squarefree?)
105
+ assert_equal(false, (5 * 13 * 13).squarefree?)
106
+ end
107
+
108
+ def test_triangle?
109
+ assert_equal(1, 1.triangle?)
110
+ assert_equal(false, 2.triangle?)
111
+ assert_equal(2, 3.triangle?)
112
+ assert_equal(false, 4.triangle?)
113
+ assert_equal(false, 5.triangle?)
114
+ assert_equal(3, 6.triangle?)
115
+ assert_equal(false, 7.triangle?)
116
+ end
117
+
118
+ def test_pentagonal?
119
+ assert_equal(1, 1.pentagonal?)
120
+ assert_equal(false, 2.pentagonal?)
121
+ assert_equal(false, 3.pentagonal?)
122
+ assert_equal(false, 4.pentagonal?)
123
+ assert_equal(2, 5.pentagonal?)
124
+ assert_equal(false, 6.pentagonal?)
125
+ end
126
+
127
+ def test_hexagonal?
128
+ assert_equal(1, 1.hexagonal?)
129
+ assert_equal(false, 2.hexagonal?)
130
+ assert_equal(false, 3.hexagonal?)
131
+ assert_equal(false, 4.hexagonal?)
132
+ assert_equal(false, 5.hexagonal?)
133
+ assert_equal(2, 6.hexagonal?)
134
+ assert_equal(false, 7.hexagonal?)
135
+ end
136
+
137
+ def test_heptagonal?
138
+ assert_equal(1, 1.heptagonal?)
139
+ assert_equal(false, 2.heptagonal?)
140
+ assert_equal(false, 3.heptagonal?)
141
+ assert_equal(false, 4.heptagonal?)
142
+ assert_equal(false, 5.heptagonal?)
143
+ assert_equal(false, 6.heptagonal?)
144
+ assert_equal(2, 7.heptagonal?)
145
+ assert_equal(false, 8.heptagonal?)
146
+ assert_equal(3, 18.heptagonal?)
147
+ end
148
+
149
+ def test_octagonal?
150
+ assert_equal(1, 1.octagonal?)
151
+ assert_equal(false, 2.octagonal?)
152
+ assert_equal(false, 3.octagonal?)
153
+ assert_equal(false, 4.octagonal?)
154
+ assert_equal(false, 5.octagonal?)
155
+ assert_equal(false, 6.octagonal?)
156
+ assert_equal(false, 7.octagonal?)
157
+ assert_equal(2, 8.octagonal?)
158
+ assert_equal(false, 9.octagonal?)
159
+ assert_equal(3, 21.octagonal?)
160
+ end
161
+ end
@@ -0,0 +1,54 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'abst'
4
+
5
+ class TC_Matrix < MiniTest::Unit::TestCase
6
+ def test_Matrix
7
+ matrix = Abst::Matrix(Rational, 2, 3)
8
+ assert_equal("Rational", matrix.coef_class.name)
9
+ assert_equal(2, matrix.height)
10
+ assert_equal(3, matrix.width)
11
+
12
+ m = [[3, 5, 1], [9, 2, 3]]
13
+ assert_equal(m, Abst::Matrix(Rational, m).to_a)
14
+ end
15
+
16
+ def test_each
17
+ matrix = Abst::Matrix(Rational, 2, 2)
18
+ m = matrix.new([[3, 5], [1, 2]])
19
+ assert_equal([3, 5, 1, 2], m.each.to_a)
20
+ end
21
+
22
+ def test_add
23
+ matrix = Abst::Matrix(Rational, 2, 3)
24
+ m1 = matrix.new([[2, 3, 2], [4, 5, -7]])
25
+ m2 = matrix.new([[3, 1, 4], [2, -3, 1]])
26
+
27
+ assert_equal([[5, 4, 6], [6, 2, -6]], (m1 + m2).to_a)
28
+ end
29
+
30
+ def test_sub
31
+ matrix = Abst::Matrix(Rational, 2, 3)
32
+ m1 = matrix.new([[2, 3, 2], [4, 5, -7]])
33
+ m2 = matrix.new([[3, 1, 4], [2, -3, 1]])
34
+
35
+ assert_equal([[-1, 2, -2], [2, 8, -8]], (m1 - m2).to_a)
36
+ end
37
+
38
+ def test_solve
39
+ assert_equal([2].to_v, [[2, 4]].to_m.solve)
40
+ assert_equal([-5.5, 6.0].to_v, [[2, 3, 7], [4, 5, 8]].to_m.solve)
41
+ assert_equal([-22, 20].to_v, [[4, 5, 12], [2, 3, 16]].to_m.solve)
42
+ assert_equal([-2, 2, 1].to_v, [[1, 1, 1, 1], [1, 2, 3, 5], [2, 4, 8, 12]].to_m.solve)
43
+ assert_equal(nil, [[1, 2, 3, 12], [4, 5, 6, 13], [7, 8, 9, 14]].to_m.solve)
44
+ end
45
+ end
46
+
47
+ class TC_SquareMatrix < MiniTest::Unit::TestCase
48
+ def test_trace
49
+ matrix = Abst::Matrix(Rational, 2, 2)
50
+ m = matrix.new([[2, 3], [4, 5]])
51
+
52
+ assert_equal(7, m.trace)
53
+ end
54
+ end
@@ -0,0 +1,107 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'abst'
4
+
5
+ class TC_Polynomial < MiniTest::Unit::TestCase
6
+ def test_Polynomial
7
+ polynomial = Abst::Polynomial(Rational)
8
+ assert_equal("Rational", polynomial.coef_class.name)
9
+
10
+ poly = polynomial.new([1, Rational(2, 7), 3])
11
+ assert_equal([1, Rational(2, 7), 3], poly.to_a)
12
+
13
+ poly = Abst::Polynomial(Rational, [3, 5])
14
+ assert_equal([3, 5], poly.to_a)
15
+ end
16
+
17
+ def test_zero
18
+ polynomial = Abst::Polynomial(Rational)
19
+ assert_equal([0], polynomial.zero.to_a)
20
+ end
21
+
22
+ def test_one
23
+ polynomial = Abst::Polynomial(Rational)
24
+ assert_equal(polynomial.new([1]), polynomial.one)
25
+ end
26
+
27
+ def test_add
28
+ polynomial = Abst::Polynomial(Integer)
29
+ poly1 = polynomial.new([2, 3, 4])
30
+ poly2 = polynomial.new([-3, 12, -4])
31
+ poly3 = polynomial.new([-3, 12])
32
+ assert_equal([-1, 15], (poly1 + poly2).to_a)
33
+ assert_equal([-1, 15, 4], (poly1 + poly3).to_a)
34
+ assert_equal([4, 3, 4], (poly1 + 2).to_a)
35
+ end
36
+
37
+ def test_sub
38
+ polynomial = Abst::Polynomial(Integer)
39
+
40
+ poly1 = polynomial.new([2, 3, 4])
41
+ poly2 = polynomial.new([-3, 12, 4])
42
+ poly3 = polynomial.new([-3, 12])
43
+ assert_equal([5, -9], (poly1 - poly2).to_a)
44
+ assert_equal([5, -9, 4], (poly1 - poly3).to_a)
45
+ assert_equal([0, 3, 4], (poly1 - 2).to_a)
46
+ end
47
+
48
+ def test_mul
49
+ polynomial = Abst::Polynomial(Integer)
50
+ poly1 = polynomial.new([2, 3, 4])
51
+ poly2 = polynomial.new([-3, 12, -4])
52
+ expect = polynomial.new([-6, 15, 16, 36, -16])
53
+
54
+ assert_equal(expect, (poly1 * poly2))
55
+ end
56
+
57
+ def test_divmod
58
+ polynomial = Abst::Polynomial(Integer)
59
+
60
+ poly1 = polynomial.new([1, 2, 3])
61
+ poly2 = polynomial.new([1])
62
+ q, r = poly1.divmod(poly2)
63
+ assert_equal(poly1, q)
64
+ assert_equal(polynomial.zero, r)
65
+
66
+ poly3 = polynomial.new([4, 5, 0, 1])
67
+ poly4 = polynomial.new([3, 3, 1])
68
+ q, r = poly3.divmod(poly4)
69
+ assert_equal(polynomial.new([-3, 1]), q)
70
+ assert_equal(polynomial.new([13, 11]), r)
71
+ end
72
+
73
+ def test_eq
74
+ polynomial = Abst::Polynomial(Integer)
75
+ poly1 = polynomial.new([2, 3, 4])
76
+ poly2 = polynomial.new([2, 3, 4])
77
+ poly3 = polynomial.new([-3, 12, -4])
78
+
79
+ assert_equal(true, poly1 == poly2)
80
+ assert_equal(false, poly1 == poly3)
81
+ end
82
+
83
+ def test_degree
84
+ polynomial = Abst::Polynomial(Integer)
85
+ poly = polynomial.new([2, 3, 4, 0])
86
+ assert_equal(2, poly.degree)
87
+ end
88
+
89
+ def test_lc
90
+ polynomial = Abst::Polynomial(Integer)
91
+ poly = polynomial.new([2, 3, 4])
92
+ assert_equal(4, poly.lc)
93
+ end
94
+
95
+ def test_eval
96
+ polynomial = Abst::Polynomial(Integer)
97
+ poly = polynomial.new([2, -3, 4])
98
+ assert_equal(3, poly.eval(1))
99
+ assert_equal(12, poly.eval(2))
100
+ end
101
+
102
+ def test_to_a
103
+ polynomial = Abst::Polynomial(Integer)
104
+ poly = polynomial.new([2, -3, 4])
105
+ assert_equal([2, -3, 4], poly.to_a)
106
+ end
107
+ end
@@ -0,0 +1,153 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+ require 'abst'
4
+
5
+ class TC_Prime < MiniTest::Unit::TestCase
6
+ def test_primes_list
7
+ list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
8
+ assert_equal(list, Abst.primes_list[0...10])
9
+ end
10
+
11
+ def test_pseudoprime_test
12
+ assert_equal(true, Abst.pseudoprime_test(3, 2))
13
+ assert_equal(true, Abst.pseudoprime_test(5, 3))
14
+ assert_equal(true, Abst.pseudoprime_test(7, 4))
15
+ assert_equal(false, Abst.pseudoprime_test(4, 3))
16
+ assert_equal(false, Abst.pseudoprime_test(15, 8))
17
+ end
18
+
19
+ def test_strong_pseudoprime_test
20
+ assert_equal(true, Abst.strong_pseudoprime_test(3, 2))
21
+ assert_equal(true, Abst.strong_pseudoprime_test(5, 3))
22
+ assert_equal(true, Abst.strong_pseudoprime_test(7, 4))
23
+ assert_equal(false, Abst.strong_pseudoprime_test(12, 5))
24
+ end
25
+
26
+ def test_miller_rabin
27
+ assert_equal(true, Abst.miller_rabin(3))
28
+ assert_equal(false, Abst.miller_rabin(4))
29
+ assert_equal(true, Abst.miller_rabin(5))
30
+ assert_equal(false, Abst.miller_rabin(6))
31
+ assert_equal(true, Abst.miller_rabin(11))
32
+ assert_equal(false, Abst.miller_rabin(169))
33
+ end
34
+
35
+ def test_n_minus_1
36
+ assert_equal(true, Abst.n_minus_1(3))
37
+ assert_equal(false, Abst.n_minus_1(4))
38
+ assert_equal(true, Abst.n_minus_1(5))
39
+ assert_equal(false, Abst.n_minus_1(6))
40
+ assert_equal(true, Abst.n_minus_1(7))
41
+ assert_equal(false, Abst.n_minus_1(561))
42
+ assert_equal(true, Abst.n_minus_1(507526619771207))
43
+ end
44
+
45
+ def test_prime?
46
+ assert_equal(false, Abst.prime?(1))
47
+ assert_equal(true, Abst.prime?(2))
48
+ assert_equal(true, Abst.prime?(3))
49
+ assert_equal(false, Abst.prime?(4))
50
+ assert_equal(true, Abst.prime?(5))
51
+ assert_equal(false, Abst.prime?(6))
52
+ assert_equal(true, Abst.prime?(7))
53
+ assert_equal(false, Abst.prime?(8))
54
+ assert_equal(false, Abst.prime?(9))
55
+ assert_equal(false, Abst.prime?(10))
56
+ assert_equal(true, Abst.prime?(11))
57
+ assert_equal(false, Abst.prime?(12))
58
+ assert_equal(true, Abst.prime?(13))
59
+ assert_equal(true, Abst.prime?(17))
60
+ assert_equal(false, Abst.prime?(1_373_653))
61
+ end
62
+
63
+ def test_trial_division
64
+ assert_equal([[[2, 1]], 1], Abst.trial_division(2))
65
+ assert_equal([[[3, 1]], 1], Abst.trial_division(3))
66
+ assert_equal([[[2, 2]], 1], Abst.trial_division(4))
67
+ assert_equal([[[5, 1]], 1], Abst.trial_division(5))
68
+ assert_equal([[[2, 1], [3, 1]], 1], Abst.trial_division(6))
69
+ assert_equal([[[11, 1]], 1], Abst.trial_division(11))
70
+ assert_equal([[[13, 2]], 1], Abst.trial_division(169))
71
+ assert_equal([[[2, 2], [231053, 1], [415039, 1]], 708806692316951],
72
+ Abst.trial_division(4 * 231053 * 415039 * 70_880_669_231_6951, 500_000))
73
+ end
74
+
75
+ def test_differences_of_squares
76
+ assert_equal([985109, 2993579], Abst.differences_of_squares(2949001615111))
77
+ assert_equal([6576439, 8192167], Abst.differences_of_squares(53875286553313))
78
+ assert_equal([4121987, 9553081], Abst.differences_of_squares(39377675691947))
79
+ end
80
+
81
+ def test_pollard_rho
82
+ assert_equal(155240783, Abst.pollard_rho(3876131431000528283))
83
+ assert_equal(2252849497, Abst.pollard_rho(5409492426475365797, 1, 2, 100_000))
84
+ assert_equal(1264621003, Abst.pollard_rho(11781814522941624827, 1, 2, 100_000))
85
+ end
86
+
87
+ def test_p_minus_1
88
+ assert_equal(3, Abst.p_minus_1(6, 10_000, 2))
89
+ assert_equal(3292218043, Abst.p_minus_1(9530738504299322287, 10_000, 2))
90
+ assert_equal(6042787811, Abst.p_minus_1(23916353875143281737, 10_000, 2))
91
+ assert_equal(8228369521, Abst.p_minus_1(24559500716705748943, 10_000, 2))
92
+ assert_equal(7046628167, Abst.p_minus_1(43381522922949440477, 10_000, 2))
93
+ assert_equal(9571252001, Abst.p_minus_1(79670656009259581439, 10_000, 2))
94
+ assert_equal(6135173419, Abst.p_minus_1(19256936255213267029, 10_000, 2))
95
+ end
96
+
97
+ def test_factorize
98
+ assert_equal([[-1, 1]], Abst.factorize(-1))
99
+ assert_equal([[0, 1]], Abst.factorize(0))
100
+ assert_equal([[1, 1]], Abst.factorize(1))
101
+ assert_equal([[2, 1]], Abst.factorize(2))
102
+ assert_equal([[3, 1]], Abst.factorize(3))
103
+ assert_equal([[2, 2]], Abst.factorize(4))
104
+ assert_equal([[5, 1]], Abst.factorize(5))
105
+ assert_equal([[2, 2], [3, 1]], Abst.factorize(12))
106
+ assert_equal([[3, 4]], Abst.factorize(81))
107
+ assert_equal([[2, 10]], Abst.factorize(1024))
108
+ assert_equal([[-1, 1], [3, 1], [5, 3]], Abst.factorize(-375))
109
+ assert_equal([[3, 1], [224743, 2]], Abst.factorize(151528248147))
110
+ assert_equal([[1658414587, 1], [5856287651, 1]], Abst.factorize(5856287651 * 1658414587))
111
+ end
112
+
113
+ def test_eratosthenes_sieve
114
+ assert_equal([2, 3, 5, 7], Abst.eratosthenes_sieve(10).to_a)
115
+ assert_equal([2, 3, 5, 7, 11], Abst.eratosthenes_sieve(11).to_a)
116
+ assert_equal([2, 3, 5, 7, 11], Abst.eratosthenes_sieve(12).to_a)
117
+ assert_equal([2, 3, 5, 7, 11, 13, 17, 19], Abst.eratosthenes_sieve(20).to_a)
118
+ end
119
+
120
+ def test_next_prime
121
+ assert_equal(2, Abst.next_prime(-5))
122
+ assert_equal(2, Abst.next_prime(0))
123
+ assert_equal(2, Abst.next_prime(1))
124
+ assert_equal(3, Abst.next_prime(2))
125
+ assert_equal(5, Abst.next_prime(3))
126
+ assert_equal(5, Abst.next_prime(4))
127
+ assert_equal(7, Abst.next_prime(5))
128
+ assert_equal(7, Abst.next_prime(6))
129
+ assert_equal(11, Abst.next_prime(7))
130
+ assert_equal(29, Abst.next_prime(23))
131
+ assert_equal(101, Abst.next_prime(100))
132
+ assert_equal(599993, Abst.next_prime(599983))
133
+ assert_equal(900001, Abst.next_prime(899981))
134
+ end
135
+
136
+ def test_each_prime
137
+ assert_equal([2, 3, 5, 7], (0..10).each_prime.to_a)
138
+ assert_equal([11, 13, 17, 19], (11..20).each_prime.to_a)
139
+ assert_equal([23, 29, 31, 37], (21...41).each_prime.to_a)
140
+ assert_equal([23, 29, 31, 37, 41], (21..41).each_prime.to_a)
141
+ end
142
+
143
+ def test_phi
144
+ assert_equal(1, Abst.phi(1))
145
+ assert_equal(1, Abst.phi(2))
146
+ assert_equal(2, Abst.phi(3))
147
+ assert_equal(2, Abst.phi(4))
148
+ assert_equal(4, Abst.phi(5))
149
+ assert_equal(2, Abst.phi(6))
150
+ assert_equal(6, Abst.phi(7))
151
+ assert_equal(4, Abst.phi(8))
152
+ end
153
+ end