@@ -454,14 +454,104 @@ def approxEqual(a, b):
454454a ^= - 236051837221964566609479775048
455455assert a == 737915270162409905551579208985
456456
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+
457551# FIXME
458- # powmod
552+ # pow
459553# divmod
460- # <<
461- # >>
462554# round
463- # **
464- # **=
465555
466556doc = "finished"
467557
0 commit comments