@@ -202,19 +202,77 @@ def approxEqual(a, b):
202202approxEqual ((8320894759108355333 / 688889843982879461528409053334 ), 1.2078701452470752e-11 )
203203approxEqual ((647075625851211057828684328038 / - 326063662711018305247049652642 ), - 1.9845070145847477 )
204204
205- # FIXME
206- # doc='binop //'
207- # assert (5744409969029584448//-1220411214895984398) == -5
208- # assert (801848568806426077475668423535//-8085312908136062722) == -99173473918
209- # assert (-5721542802125298347//-987715757830780227623113033880) == 0
210- # assert (457897615381227167341108005859//-353379489795893751557547859364) == -2
211-
212- # FIXME
213- #doc='binop %'
214- # assert (7341566843809298600%3978427562660778191) == 3363139281148520409
215- # assert (294375077667396199949508874162%7786366607165572976) == 345835433804354002
216- # assert (6316821303028268687%-707212250464589439185037502466) == -707212250458272617882009233779
217- # assert (-119459441634706255601601571546%17130399946665545258117887219) == 453357991952561205223638987
205+ doc = 'Int divide signs'
206+ assert (123 // 20 ) == 6
207+ assert (123 // - 20 ) == - 7
208+ assert (- 123 // 20 ) == - 7
209+ assert (- 123 // - 20 ) == 6
210+ assert (123 % 20 ) == 3
211+ assert (123 % - 20 ) == - 17
212+ assert (- 123 % 20 ) == 17
213+ assert (- 123 % - 20 ) == - 3
214+
215+ doc = 'Int divide signs exact'
216+ assert (200 // 20 ) == 10
217+ assert (200 // - 20 ) == - 10
218+ assert (- 200 // 20 ) == - 10
219+ assert (- 200 // - 20 ) == 10
220+ assert (200 % 20 ) == 0
221+ assert (200 % - 20 ) == 0
222+ assert (- 200 % 20 ) == 0
223+ assert (- 200 % - 20 ) == 0
224+
225+ doc = 'Int divide zero'
226+ assert (200 // 201 ) == 0
227+ assert (200 // - 201 ) == - 1
228+ assert (- 200 // 201 ) == - 1
229+ assert (- 200 // - 201 ) == 0
230+ assert (200 % 201 ) == 200
231+ assert (200 % - 201 ) == - 1
232+ assert (- 200 % 201 ) == 1
233+ assert (- 200 % - 201 ) == - 200
234+
235+ doc = 'BigInt divide zero'
236+ assert (2000000000000000000000 // 2000000000000000000001 ) == 0
237+ assert (2000000000000000000000 // - 2000000000000000000001 ) == - 1
238+ assert (- 2000000000000000000000 // 2000000000000000000001 ) == - 1
239+ assert (- 2000000000000000000000 // - 2000000000000000000001 ) == 0
240+ assert (2000000000000000000000 % 2000000000000000000001 ) == 2000000000000000000000
241+ assert (2000000000000000000000 % - 2000000000000000000001 ) == - 1
242+ assert (- 2000000000000000000000 % 2000000000000000000001 ) == 1
243+ assert (- 2000000000000000000000 % - 2000000000000000000001 ) == - 2000000000000000000000
244+
245+ doc = 'BigInt divide signs'
246+ assert (1000000000000000000000000000001 // 100000000000000000001 ) == 9999999999
247+ assert (1000000000000000000000000000001 // - 100000000000000000001 ) == - 10000000000
248+ assert (- 1000000000000000000000000000001 // 100000000000000000001 ) == - 10000000000
249+ assert (- 1000000000000000000000000000001 // - 100000000000000000001 ) == 9999999999
250+ assert (1000000000000000000000000000001 % 100000000000000000001 ) == 99999999990000000002
251+ assert (1000000000000000000000000000001 % - 100000000000000000001 ) == - 9999999999
252+ assert (- 1000000000000000000000000000001 % 100000000000000000001 ) == 9999999999
253+ assert (- 1000000000000000000000000000001 % - 100000000000000000001 ) == - 99999999990000000002
254+
255+ doc = 'BigInt divide signs equal'
256+ assert (1000000000000000000000000000000 // 100000000000000000000 ) == 10000000000
257+ assert (1000000000000000000000000000000 // - 100000000000000000000 ) == - 10000000000
258+ assert (- 1000000000000000000000000000000 // 100000000000000000000 ) == - 10000000000
259+ assert (- 1000000000000000000000000000000 // - 100000000000000000000 ) == 10000000000
260+ assert (1000000000000000000000000000000 % 100000000000000000000 ) == 0
261+ assert (1000000000000000000000000000000 % - 100000000000000000000 ) == 0
262+ assert (- 1000000000000000000000000000000 % 100000000000000000000 ) == 0
263+ assert (- 1000000000000000000000000000000 % - 100000000000000000000 ) == 0
264+
265+ doc = 'binop //'
266+ assert (5744409969029584448 // - 1220411214895984398 ) == - 5
267+ assert (801848568806426077475668423535 // - 8085312908136062722 ) == - 99173473918
268+ assert (- 5721542802125298347 // - 987715757830780227623113033880 ) == 0
269+ assert (457897615381227167341108005859 // - 353379489795893751557547859364 ) == - 2
270+
271+ doc = 'binop %'
272+ assert (7341566843809298600 % 3978427562660778191 ) == 3363139281148520409
273+ assert (294375077667396199949508874162 % 7786366607165572976 ) == 345835433804354002
274+ assert (6316821303028268687 % - 707212250464589439185037502466 ) == - 707212250458272617882009233779
275+ assert (- 119459441634706255601601571546 % 17130399946665545258117887219 ) == 453357991952561205223638987
218276
219277doc = 'binop &'
220278assert (- 6956530093671002017 & - 1100238534807351779 ) == - 8056622384673947619
@@ -326,35 +384,33 @@ def approxEqual(a, b):
326384a /= - 705476577911651649854533260835
327385approxEqual (a , 0.9120485356446241 )
328386
329- # FIXME
330- #doc='augop //'
331- # a = -2955145545873784447
332- # a //= -8398154603067315189
333- # assert a == 0
334- # a = 764874707978666366468709717939
335- # a //= -637453031923767022
336- # assert a == -1199891866026
337- # a = -3225133016360684087
338- # a //= -106830573980181067612866984034
339- # assert a == 0
340- # a = -1017486275496211203702167393
341- # a //= 707873786594465355113033731247
342- # assert a == -1
343-
344- # FIXME
345- # doc='augop %'
346- # a = -4898359889955701722
347- # a %= 2586537256564406544
348- # assert a == 274714623173111366
349- # a = 165600857868102801319021818388
350- # a %= -5550996453372617970
351- # assert a == -525692049140908922
352- # a = -1667139790609035866
353- # a %= 132512297800301099457101240885
354- # assert a == 132512297798633959666492205019
355- # a = 1223018728310354788098388057
356- # a %= 756727576419043673398940776835
357- # assert a == 1223018728310354788098388057
387+ doc = 'augop //'
388+ a = - 2955145545873784447
389+ a //= - 8398154603067315189
390+ assert a == 0
391+ a = 764874707978666366468709717939
392+ a //= - 637453031923767022
393+ assert a == - 1199891866026
394+ a = - 3225133016360684087
395+ a //= - 106830573980181067612866984034
396+ assert a == 0
397+ a = - 1017486275496211203702167393
398+ a //= 707873786594465355113033731247
399+ assert a == - 1
400+
401+ doc = 'augop %'
402+ a = - 4898359889955701722
403+ a %= 2586537256564406544
404+ assert a == 274714623173111366
405+ a = 165600857868102801319021818388
406+ a %= - 5550996453372617970
407+ assert a == - 525692049140908922
408+ a = - 1667139790609035866
409+ a %= 132512297800301099457101240885
410+ assert a == 132512297798633959666492205019
411+ a = 1223018728310354788098388057
412+ a %= 756727576419043673398940776835
413+ assert a == 1223018728310354788098388057
358414
359415doc = 'augop &'
360416a = - 926347478023783305
@@ -401,8 +457,8 @@ def approxEqual(a, b):
401457# FIXME
402458# powmod
403459# divmod
404- # lsl
405- # lsr
460+ # <<
461+ # >>
406462# round
407463# **
408464# **=
0 commit comments