@@ -454,14 +454,104 @@ def approxEqual(a, b):
454
454
a ^= - 236051837221964566609479775048
455
455
assert a == 737915270162409905551579208985
456
456
457
+ doc = "<< and >>"
458
+ assert (- 1 << 10 ) == - 1024
459
+ assert (- 1 >> 10 ) == - 1
460
+ assert (3 << 10 ) == 3072
461
+ assert (3 >> 10 ) == 0
462
+ assert (- 1 << 100 ) == - 1267650600228229401496703205376
463
+ assert (- 1267650600228229401496703205376 >> 50 ) == - 1125899906842624
464
+ assert (- 1267650600228229401496703205376 >> 90 ) == - 1024
465
+ assert (1 << 100 ) == 1267650600228229401496703205376
466
+ assert (1267650600228229401496703205376 >> 50 ) == 1125899906842624
467
+ assert (1267650600228229401496703205376 >> 90 ) == 1024
468
+ try :
469
+ 1 << 100000000000000000000000000000000000
470
+ except OverflowError :
471
+ pass
472
+ else :
473
+ assert False , "Overflow error not raised"
474
+
475
+ doc = "<<= and >>="
476
+ a = - 1
477
+ a <<= 10
478
+ assert a == - 1024
479
+ a = - 1
480
+ a >>= 10
481
+ assert a == - 1
482
+ a = 3
483
+ a <<= 10
484
+ assert a == 3072
485
+ a = 3
486
+ a >>= 10
487
+ assert a == 0
488
+ a = - 1
489
+ a <<= 100
490
+ assert a == - 1267650600228229401496703205376
491
+ a = - 1267650600228229401496703205376
492
+ a >>= 50
493
+ assert a == - 1125899906842624
494
+ a = - 1267650600228229401496703205376
495
+ a >>= 90
496
+ assert a == - 1024
497
+ a = 1
498
+ a <<= 100
499
+ assert a == 1267650600228229401496703205376
500
+ a = 1267650600228229401496703205376
501
+ a >>= 50
502
+ assert a == 1125899906842624
503
+ a = 1267650600228229401496703205376
504
+ a >>= 90
505
+ assert a == 1024
506
+ try :
507
+ a = 1
508
+ a <<= 100000000000000000000000000000000000
509
+ except OverflowError :
510
+ pass
511
+ else :
512
+ assert False , "Overflow error not raised"
513
+
514
+ doc = "**"
515
+ assert (2 ** 10 ) == 1024
516
+ assert ((- 2 )** 10 ) == 1024
517
+ approxEqual (2 ** (- 10 ), 0.0009765625 )
518
+ approxEqual ((- 2 )** (- 10 ), 0.0009765625 )
519
+ assert (3 ** 100 ) == 515377520732011331036461129765621272702107522001
520
+ approxEqual (515377520732011331036461129765621272702107522001 ** (- 1 ), 1.9403252174826328e-48 )
521
+ assert ((- 1 )** 100000000000000000000 ) == 1
522
+ assert ((- 1 )** 100000000000000000001 ) == - 1
523
+
524
+ doc = "**="
525
+ a = 2
526
+ a **= 10
527
+ assert a == 1024
528
+ a = - 2
529
+ a **= 10
530
+ assert a == 1024
531
+ a = 2
532
+ a **= - 10
533
+ approxEqual (a , 0.0009765625 )
534
+ a = - 2
535
+ a **= - 10
536
+ approxEqual (a , 0.0009765625 )
537
+
538
+ a = 3
539
+ a **= 100
540
+ assert a == 515377520732011331036461129765621272702107522001
541
+ a = 515377520732011331036461129765621272702107522001
542
+ a **= - 1
543
+ approxEqual (a , 1.9403252174826328e-48 )
544
+ a = - 1
545
+ a **= 100000000000000000000
546
+ assert a == 1
547
+ a = - 1
548
+ a **= 100000000000000000001
549
+ assert a == - 1
550
+
457
551
# FIXME
458
- # powmod
552
+ # pow
459
553
# divmod
460
- # <<
461
- # >>
462
554
# round
463
- # **
464
- # **=
465
555
466
556
doc = "finished"
467
557
0 commit comments