@@ -43,7 +43,189 @@ def test_trunc(self):
43
43
self .assertEqual (math .trunc (RealAlgebraicNumber (- 128 ) / 10 ), - 12 )
44
44
self .assertEqual (math .trunc (- (RealAlgebraicNumber (123 )
45
45
** (RealAlgebraicNumber (1 ) / 2 ))), - 11 )
46
- # FIXME: add more tests
46
+
47
+ def test_floor (self ):
48
+ self .assertEqual (math .floor (RealAlgebraicNumber (123 )), 123 )
49
+ self .assertEqual (math .floor (RealAlgebraicNumber (123 ) / 10 ), 12 )
50
+ self .assertEqual (math .floor (RealAlgebraicNumber (128 ) / 10 ), 12 )
51
+ self .assertEqual (math .floor (RealAlgebraicNumber (123 )
52
+ ** (RealAlgebraicNumber (1 ) / 2 )), 11 )
53
+ self .assertEqual (math .floor (RealAlgebraicNumber (- 123 )), - 123 )
54
+ self .assertEqual (math .floor (RealAlgebraicNumber (- 123 ) / 10 ), - 13 )
55
+ self .assertEqual (math .floor (RealAlgebraicNumber (- 128 ) / 10 ), - 13 )
56
+ self .assertEqual (math .floor (- (RealAlgebraicNumber (123 )
57
+ ** (RealAlgebraicNumber (1 ) / 2 ))), - 12 )
58
+
59
+ def test_ceil (self ):
60
+ self .assertEqual (math .ceil (RealAlgebraicNumber (123 )), 123 )
61
+ self .assertEqual (math .ceil (RealAlgebraicNumber (123 ) / 10 ), 13 )
62
+ self .assertEqual (math .ceil (RealAlgebraicNumber (128 ) / 10 ), 13 )
63
+ self .assertEqual (math .ceil (RealAlgebraicNumber (123 )
64
+ ** (RealAlgebraicNumber (1 ) / 2 )), 12 )
65
+ self .assertEqual (math .ceil (RealAlgebraicNumber (- 123 )), - 123 )
66
+ self .assertEqual (math .ceil (RealAlgebraicNumber (- 123 ) / 10 ), - 12 )
67
+ self .assertEqual (math .ceil (RealAlgebraicNumber (- 128 ) / 10 ), - 12 )
68
+ self .assertEqual (math .ceil (- (RealAlgebraicNumber (123 )
69
+ ** (RealAlgebraicNumber (1 ) / 2 ))), - 11 )
70
+
71
+ def test_to_integer (self ):
72
+ self .assertEqual (RealAlgebraicNumber (123 ).to_integer (), 123 )
73
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).to_integer (), None )
74
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).to_integer (), None )
75
+ self .assertEqual ((RealAlgebraicNumber (123 )
76
+ ** (RealAlgebraicNumber (1 ) / 2 )).to_integer (), None )
77
+ self .assertEqual (RealAlgebraicNumber (- 123 ).to_integer (), - 123 )
78
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).to_integer (), None )
79
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).to_integer (), None )
80
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
81
+ ** (RealAlgebraicNumber (1 ) / 2 ))
82
+ ).to_integer (), None )
83
+
84
+ def test_to_rational (self ):
85
+ self .assertEqual (RealAlgebraicNumber (123 ).to_rational (), (123 , 1 ))
86
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).to_rational (),
87
+ (123 , 10 ))
88
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).to_rational (),
89
+ (64 , 5 ))
90
+ self .assertEqual ((RealAlgebraicNumber (123 )
91
+ ** (RealAlgebraicNumber (1 ) / 2 )).to_rational (), None )
92
+ self .assertEqual (RealAlgebraicNumber (- 123 ).to_rational (), (- 123 , 1 ))
93
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).to_rational (),
94
+ (- 123 , 10 ))
95
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).to_rational (),
96
+ (- 64 , 5 ))
97
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
98
+ ** (RealAlgebraicNumber (1 ) / 2 ))
99
+ ).to_rational (), None )
100
+
101
+ def test_minimal_polynomial (self ):
102
+ self .assertEqual (RealAlgebraicNumber (123 ).minimal_polynomial ,
103
+ [- 123 , 1 ])
104
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).minimal_polynomial ,
105
+ [- 123 , 10 ])
106
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).minimal_polynomial ,
107
+ [- 64 , 5 ])
108
+ self .assertEqual ((RealAlgebraicNumber (123 )
109
+ ** (RealAlgebraicNumber (1 ) / 2 )).minimal_polynomial ,
110
+ [- 123 , 0 , 1 ])
111
+ self .assertEqual (RealAlgebraicNumber (- 123 ).minimal_polynomial ,
112
+ [123 , 1 ])
113
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).minimal_polynomial ,
114
+ [123 , 10 ])
115
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).minimal_polynomial ,
116
+ [64 , 5 ])
117
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
118
+ ** (RealAlgebraicNumber (1 ) / 2 ))
119
+ ).minimal_polynomial ,
120
+ [- 123 , 0 , 1 ])
121
+
122
+ def test_degree (self ):
123
+ self .assertEqual (RealAlgebraicNumber (123 ).degree , 1 )
124
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).degree , 1 )
125
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).degree , 1 )
126
+ self .assertEqual ((RealAlgebraicNumber (123 )
127
+ ** (RealAlgebraicNumber (1 ) / 2 )).degree , 2 )
128
+ self .assertEqual (RealAlgebraicNumber (- 123 ).degree , 1 )
129
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).degree , 1 )
130
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).degree , 1 )
131
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
132
+ ** (RealAlgebraicNumber (1 ) / 2 ))
133
+ ).degree , 2 )
134
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
135
+ ** (RealAlgebraicNumber (1 ) / 3 ))
136
+ ).degree , 3 )
137
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
138
+ ** (RealAlgebraicNumber (1 ) / 4 ))
139
+ ).degree , 4 )
140
+
141
+ def test_is_integer (self ):
142
+ self .assertEqual (RealAlgebraicNumber (123 ).is_integer (), True )
143
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).is_integer (), False )
144
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).is_integer (), False )
145
+ self .assertEqual ((RealAlgebraicNumber (123 )
146
+ ** (RealAlgebraicNumber (1 ) / 2 )).is_integer (), False )
147
+ self .assertEqual (RealAlgebraicNumber (- 123 ).is_integer (), True )
148
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).is_integer (), False )
149
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).is_integer (), False )
150
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
151
+ ** (RealAlgebraicNumber (1 ) / 2 ))
152
+ ).is_integer (), False )
153
+
154
+ def test_is_rational (self ):
155
+ self .assertEqual (RealAlgebraicNumber (123 ).is_rational (), True )
156
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10 ).is_rational (), True )
157
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10 ).is_rational (), True )
158
+ self .assertEqual ((RealAlgebraicNumber (123 )
159
+ ** (RealAlgebraicNumber (1 ) / 2 )).is_rational (),
160
+ False )
161
+ self .assertEqual (RealAlgebraicNumber (- 123 ).is_rational (), True )
162
+ self .assertEqual ((RealAlgebraicNumber (- 123 ) / 10 ).is_rational (), True )
163
+ self .assertEqual ((RealAlgebraicNumber (- 128 ) / 10 ).is_rational (), True )
164
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
165
+ ** (RealAlgebraicNumber (1 ) / 2 ))
166
+ ).is_rational (), False )
167
+
168
+ def test_recip (self ):
169
+ self .assertEqual (RealAlgebraicNumber (123 ).recip ().minimal_polynomial ,
170
+ [- 1 , 123 ])
171
+ self .assertEqual ((RealAlgebraicNumber (123 ) / 10
172
+ ).recip ().minimal_polynomial ,
173
+ [- 10 , 123 ])
174
+ self .assertEqual ((RealAlgebraicNumber (128 ) / 10
175
+ ).recip ().minimal_polynomial ,
176
+ [- 5 , 64 ])
177
+ self .assertEqual ((- (RealAlgebraicNumber (123 )
178
+ ** (RealAlgebraicNumber (1 ) / 2 ))
179
+ ).recip ().minimal_polynomial ,
180
+ [1 , 0 , - 123 ])
181
+
182
+ def test_recip_zero (self ):
183
+ with self .assertRaises (ZeroDivisionError ):
184
+ RealAlgebraicNumber (0 ).recip ()
185
+
186
+ def test_add (self ):
187
+ self .assertEqual (RealAlgebraicNumber (1 ) + 2 , 3 )
188
+ self .assertEqual (1 + RealAlgebraicNumber (2 ), 3 )
189
+ self .assertEqual (RealAlgebraicNumber (1 ) + RealAlgebraicNumber (2 ), 3 )
190
+
191
+ def test_sub (self ):
192
+ self .assertEqual (RealAlgebraicNumber (1 ) - 2 , - 1 )
193
+ self .assertEqual (1 - RealAlgebraicNumber (2 ), - 1 )
194
+ self .assertEqual (RealAlgebraicNumber (1 ) - RealAlgebraicNumber (2 ), - 1 )
195
+
196
+ def test_mul (self ):
197
+ self .assertEqual (RealAlgebraicNumber (1 ) * 2 , 2 )
198
+ self .assertEqual (1 * RealAlgebraicNumber (2 ), 2 )
199
+ self .assertEqual (RealAlgebraicNumber (1 ) * RealAlgebraicNumber (2 ), 2 )
200
+
201
+ def test_div (self ):
202
+ self .assertEqual (RealAlgebraicNumber (1 ) / 2 ,
203
+ RealAlgebraicNumber (1 ) / 2 )
204
+ self .assertEqual (1 / RealAlgebraicNumber (2 ),
205
+ RealAlgebraicNumber (1 ) / 2 )
206
+ self .assertEqual (RealAlgebraicNumber (1 ) / RealAlgebraicNumber (2 ),
207
+ RealAlgebraicNumber (1 ) / 2 )
208
+
209
+ def test_div_zero (self ):
210
+ with self .assertRaises (ZeroDivisionError ):
211
+ RealAlgebraicNumber (1 ) / 0
212
+ with self .assertRaises (ZeroDivisionError ):
213
+ RealAlgebraicNumber (- 1 ) / 0
214
+ with self .assertRaises (ZeroDivisionError ):
215
+ RealAlgebraicNumber (0 ) / 0
216
+
217
+ def test_pow (self ):
218
+ self .assertEqual (RealAlgebraicNumber (1 ) ** 2 , 1 )
219
+ self .assertEqual (1 ** RealAlgebraicNumber (2 ), 1 )
220
+ self .assertEqual (RealAlgebraicNumber (1 ) ** RealAlgebraicNumber (2 ), 1 )
221
+
222
+ def test_neg (self ):
223
+ self .assertEqual (- RealAlgebraicNumber (1 ), - 1 )
224
+ self .assertEqual (- RealAlgebraicNumber (- 2 ), 2 )
225
+
226
+ def test_abs (self ):
227
+ self .assertEqual (abs (RealAlgebraicNumber (1 )), 1 )
228
+ self .assertEqual (abs (RealAlgebraicNumber (- 2 )), 2 )
47
229
48
230
49
231
if __name__ == '__main__' :
0 commit comments