diff --git a/package.json b/package.json index ee761c8..076022b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@aureooms/js-integer", "description": "Integers for JavaScript", - "version": "5.0.1", + "version": "5.1.0", "author": "Aurélien Ooms ", "ava": { "require": [ @@ -11,7 +11,7 @@ "files": [ "test/src/**/*" ], - "timeout": "1m", + "timeout": "3m", "concurrency": 8 }, "babel": { diff --git a/src/integer.js b/src/integer.js index a86ebdb..3139000 100644 --- a/src/integer.js +++ b/src/integer.js @@ -67,3 +67,51 @@ export function mod ( first , second ) { export function imod ( first , second ) { return first.imod(second) ; } + +export function addn ( first , second ) { + return first.addn(second) ; +} + +export function iaddn ( first , second ) { + return first.iaddn(second) ; +} + +export function subn ( first , second ) { + return first.subn(second) ; +} + +export function isubn ( first , second ) { + return first.isubn(second) ; +} + +export function muln ( first , second ) { + return first.muln(second) ; +} + +export function imuln ( first , second ) { + return first.imuln(second) ; +} + +export function pown ( first , second ) { + return first.pown(second) ; +} + +export function ipown ( first , second ) { + return first.ipown(second) ; +} + +export function divn ( first , second ) { + return first.divn(second) ; +} + +export function idivn ( first , second ) { + return first.idivn(second) ; +} + +export function modn ( first , second ) { + return first.modn(second) ; +} + +export function imodn ( first , second ) { + return first.imodn(second) ; +} diff --git a/test/generate.py b/test/generate.py index 0834874..6936ce5 100644 --- a/test/generate.py +++ b/test/generate.py @@ -1,28 +1,29 @@ import operator -hugenumbers = [ - 1 , - 17 , +MAX_NUMBER = 2**53 - 1 +MIN_NUMBER = -2**53 + +hugenumbers = sorted([ 91**7 , 2**30 , 3**50 -] +]) -smallnumbers = [ 1 , 3 , 7 , 9 , 11 , 17 , 22 , 24 , 27 , 29 ] +smallnumbers = sorted([ 1 , 3 , 7 , 9 , 11 , 17 , 22 , 24 , 27 , 29 , 1234 , 5678 ]) arithmetic = { 'add' : { - 'numbers' : hugenumbers , + 'numbers' : smallnumbers + hugenumbers , 'apply' : operator.add , 'str' : '+' } , 'sub' : { - 'numbers' : hugenumbers , + 'numbers' : smallnumbers + hugenumbers , 'apply' : operator.sub , 'str' : '-' } , 'mul' : { - 'numbers' : hugenumbers , + 'numbers' : smallnumbers + hugenumbers , 'apply' : operator.mul , 'str' : '*' } , @@ -32,30 +33,30 @@ 'str' : '^' } , 'div' : { - 'numbers' : hugenumbers , + 'numbers' : smallnumbers + hugenumbers , 'apply' : operator.floordiv , 'str' : '/' } , 'mod' : { - 'numbers' : hugenumbers , + 'numbers' : smallnumbers + hugenumbers , 'apply' : operator.mod , 'str' : '%' } } -def write ( f , numbers , name , t , opstr , a , ispow = True ) : +def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) : f.write("import test from 'ava' ;\n") f.write("import {{ parse , stringify , {} }} from '../../../../src' ;\n\n".format(name)) - if ispow : + if isn : f.write("""function macro ( t , A , B , C ) {{ const a = parse( A ) ; const c = {}( a , B ) ; t.is( stringify( a ) , {} ) ; t.is( stringify( c ) , C ) ; -}}\n\n""".format( name , a ) ) +}}\n\n""".format( name , 'C' if isi else 'A' ) ) else: @@ -66,67 +67,62 @@ def write ( f , numbers , name , t , opstr , a , ispow = True ) : t.is( stringify( a ) , {} ) ; t.is( stringify( b ) , B ) ; t.is( stringify( c ) , C ) ; -}}\n\n""".format( name , a ) ) +}}\n\n""".format( name , 'C' if isi else 'A' ) ) + + f.write("macro.title = ( _ , A , B , C ) => `{}(${{A}},${{B}}) = ${{C}}` ;\n\n".format(name)) - f.write("macro.title = ( _ , A , B , C ) => `${{A}} {} ${{B}} = ${{C}}` ;\n\n".format(opstr)) + if isn: + LINE = "test( macro , '{}' , {} , '{}' ) ;\n" + else: + LINE = "test( macro , '{}' , '{}' , '{}' ) ;\n" for a in numbers : for b in numbers : - if ispow: + x = a + y = b + c = t( x , y ) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,c)) - x = a - y = b - c = t( x , y ) - f.write("test( macro , '{}' , {} , '{}' ) ;\n".format(x,y,c)) + x = -a + y = b + c = t( x , y ) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,c)) - x = -a - y = b - c = t( x , y ) - f.write("test( macro , '{}' , {} , '{}' ) ;\n".format(x,y,c)) - - else: - - x = a - y = b - c = t( x , y ) - f.write("test( macro , '{}' , '{}' , '{}' ) ;\n".format(x,y,c)) - - x = -a - y = b - c = t( x , y ) - f.write("test( macro , '{}' , '{}' , '{}' ) ;\n".format(x,y,c)) + if not ispow: x = a y = -b c = t( x , y ) - f.write("test( macro , '{}' , '{}' , '{}' ) ;\n".format(x,y,c)) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,c)) x = -a y = -b c = t( x , y ) - f.write("test( macro , '{}' , '{}' , '{}' ) ;\n".format(x,y,c)) + if not isn or MIN_NUMBER <= y <= MAX_NUMBER: + f.write(LINE.format(x,y,c)) + +def open_and_write ( opname , t , nb , **kwargs ) : + with open( 'test/src/integer/arithmetic/{}.js'.format(opname) , 'w' ) as f : + write( f , nb , opname , t , **kwargs ) for name , op in arithmetic.items(): t = op['apply'] nb = op['numbers'] - # standard op - with open( 'test/src/integer/arithmetic/{}.js'.format(name) , 'w' ) as f : - - opstr = op['str'] - a = 'A' - - write( f , nb , name , t , opstr , a , ispow = name == 'pow' ) + ispow = name == 'pow' + # standard op + open_and_write( name , t , nb , ispow = ispow ) # in-place op - iname = 'i{}'.format(name) - with open( 'test/src/integer/arithmetic/{}.js'.format(iname) , 'w' ) as f : - - opstr = op['str'] + '=' - a = 'C' - - write( f , nb , iname , t , opstr , a , ispow = name == 'pow' ) + open_and_write( 'i' + name , t , nb , isi = True , ispow = ispow ) + # standard op with number arg + open_and_write( name + 'n' , t , nb , isn = True , ispow = ispow ) + # in-place op with number arg + open_and_write( 'i' + name + 'n' , t , nb , isi = True , isn = True , ispow = ispow ) diff --git a/test/src/integer/arithmetic/add.js b/test/src/integer/arithmetic/add.js index 3d098e2..0ce60fc 100644 --- a/test/src/integer/arithmetic/add.js +++ b/test/src/integer/arithmetic/add.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} + ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `add(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '2' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; test( macro , '-1' , '-1' , '-2' ) ; +test( macro , '1' , '3' , '4' ) ; +test( macro , '-1' , '3' , '2' ) ; +test( macro , '1' , '-3' , '-2' ) ; +test( macro , '-1' , '-3' , '-4' ) ; +test( macro , '1' , '7' , '8' ) ; +test( macro , '-1' , '7' , '6' ) ; +test( macro , '1' , '-7' , '-6' ) ; +test( macro , '-1' , '-7' , '-8' ) ; +test( macro , '1' , '9' , '10' ) ; +test( macro , '-1' , '9' , '8' ) ; +test( macro , '1' , '-9' , '-8' ) ; +test( macro , '-1' , '-9' , '-10' ) ; +test( macro , '1' , '11' , '12' ) ; +test( macro , '-1' , '11' , '10' ) ; +test( macro , '1' , '-11' , '-10' ) ; +test( macro , '-1' , '-11' , '-12' ) ; test( macro , '1' , '17' , '18' ) ; test( macro , '-1' , '17' , '16' ) ; test( macro , '1' , '-17' , '-16' ) ; test( macro , '-1' , '-17' , '-18' ) ; -test( macro , '1' , '51676101935731' , '51676101935732' ) ; -test( macro , '-1' , '51676101935731' , '51676101935730' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '-51676101935731' , '-51676101935732' ) ; +test( macro , '1' , '22' , '23' ) ; +test( macro , '-1' , '22' , '21' ) ; +test( macro , '1' , '-22' , '-21' ) ; +test( macro , '-1' , '-22' , '-23' ) ; +test( macro , '1' , '24' , '25' ) ; +test( macro , '-1' , '24' , '23' ) ; +test( macro , '1' , '-24' , '-23' ) ; +test( macro , '-1' , '-24' , '-25' ) ; +test( macro , '1' , '27' , '28' ) ; +test( macro , '-1' , '27' , '26' ) ; +test( macro , '1' , '-27' , '-26' ) ; +test( macro , '-1' , '-27' , '-28' ) ; +test( macro , '1' , '29' , '30' ) ; +test( macro , '-1' , '29' , '28' ) ; +test( macro , '1' , '-29' , '-28' ) ; +test( macro , '-1' , '-29' , '-30' ) ; +test( macro , '1' , '1234' , '1235' ) ; +test( macro , '-1' , '1234' , '1233' ) ; +test( macro , '1' , '-1234' , '-1233' ) ; +test( macro , '-1' , '-1234' , '-1235' ) ; +test( macro , '1' , '5678' , '5679' ) ; +test( macro , '-1' , '5678' , '5677' ) ; +test( macro , '1' , '-5678' , '-5677' ) ; +test( macro , '-1' , '-5678' , '-5679' ) ; test( macro , '1' , '1073741824' , '1073741825' ) ; test( macro , '-1' , '1073741824' , '1073741823' ) ; test( macro , '1' , '-1073741824' , '-1073741823' ) ; test( macro , '-1' , '-1073741824' , '-1073741825' ) ; +test( macro , '1' , '51676101935731' , '51676101935732' ) ; +test( macro , '-1' , '51676101935731' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '-51676101935732' ) ; test( macro , '1' , '717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-717897987691852588770250' ) ; +test( macro , '3' , '1' , '4' ) ; +test( macro , '-3' , '1' , '-2' ) ; +test( macro , '3' , '-1' , '2' ) ; +test( macro , '-3' , '-1' , '-4' ) ; +test( macro , '3' , '3' , '6' ) ; +test( macro , '-3' , '3' , '0' ) ; +test( macro , '3' , '-3' , '0' ) ; +test( macro , '-3' , '-3' , '-6' ) ; +test( macro , '3' , '7' , '10' ) ; +test( macro , '-3' , '7' , '4' ) ; +test( macro , '3' , '-7' , '-4' ) ; +test( macro , '-3' , '-7' , '-10' ) ; +test( macro , '3' , '9' , '12' ) ; +test( macro , '-3' , '9' , '6' ) ; +test( macro , '3' , '-9' , '-6' ) ; +test( macro , '-3' , '-9' , '-12' ) ; +test( macro , '3' , '11' , '14' ) ; +test( macro , '-3' , '11' , '8' ) ; +test( macro , '3' , '-11' , '-8' ) ; +test( macro , '-3' , '-11' , '-14' ) ; +test( macro , '3' , '17' , '20' ) ; +test( macro , '-3' , '17' , '14' ) ; +test( macro , '3' , '-17' , '-14' ) ; +test( macro , '-3' , '-17' , '-20' ) ; +test( macro , '3' , '22' , '25' ) ; +test( macro , '-3' , '22' , '19' ) ; +test( macro , '3' , '-22' , '-19' ) ; +test( macro , '-3' , '-22' , '-25' ) ; +test( macro , '3' , '24' , '27' ) ; +test( macro , '-3' , '24' , '21' ) ; +test( macro , '3' , '-24' , '-21' ) ; +test( macro , '-3' , '-24' , '-27' ) ; +test( macro , '3' , '27' , '30' ) ; +test( macro , '-3' , '27' , '24' ) ; +test( macro , '3' , '-27' , '-24' ) ; +test( macro , '-3' , '-27' , '-30' ) ; +test( macro , '3' , '29' , '32' ) ; +test( macro , '-3' , '29' , '26' ) ; +test( macro , '3' , '-29' , '-26' ) ; +test( macro , '-3' , '-29' , '-32' ) ; +test( macro , '3' , '1234' , '1237' ) ; +test( macro , '-3' , '1234' , '1231' ) ; +test( macro , '3' , '-1234' , '-1231' ) ; +test( macro , '-3' , '-1234' , '-1237' ) ; +test( macro , '3' , '5678' , '5681' ) ; +test( macro , '-3' , '5678' , '5675' ) ; +test( macro , '3' , '-5678' , '-5675' ) ; +test( macro , '-3' , '-5678' , '-5681' ) ; +test( macro , '3' , '1073741824' , '1073741827' ) ; +test( macro , '-3' , '1073741824' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '-1073741827' ) ; +test( macro , '3' , '51676101935731' , '51676101935734' ) ; +test( macro , '-3' , '51676101935731' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '-51676101935734' ) ; +test( macro , '3' , '717897987691852588770249' , '717897987691852588770252' ) ; +test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '7' , '1' , '8' ) ; +test( macro , '-7' , '1' , '-6' ) ; +test( macro , '7' , '-1' , '6' ) ; +test( macro , '-7' , '-1' , '-8' ) ; +test( macro , '7' , '3' , '10' ) ; +test( macro , '-7' , '3' , '-4' ) ; +test( macro , '7' , '-3' , '4' ) ; +test( macro , '-7' , '-3' , '-10' ) ; +test( macro , '7' , '7' , '14' ) ; +test( macro , '-7' , '7' , '0' ) ; +test( macro , '7' , '-7' , '0' ) ; +test( macro , '-7' , '-7' , '-14' ) ; +test( macro , '7' , '9' , '16' ) ; +test( macro , '-7' , '9' , '2' ) ; +test( macro , '7' , '-9' , '-2' ) ; +test( macro , '-7' , '-9' , '-16' ) ; +test( macro , '7' , '11' , '18' ) ; +test( macro , '-7' , '11' , '4' ) ; +test( macro , '7' , '-11' , '-4' ) ; +test( macro , '-7' , '-11' , '-18' ) ; +test( macro , '7' , '17' , '24' ) ; +test( macro , '-7' , '17' , '10' ) ; +test( macro , '7' , '-17' , '-10' ) ; +test( macro , '-7' , '-17' , '-24' ) ; +test( macro , '7' , '22' , '29' ) ; +test( macro , '-7' , '22' , '15' ) ; +test( macro , '7' , '-22' , '-15' ) ; +test( macro , '-7' , '-22' , '-29' ) ; +test( macro , '7' , '24' , '31' ) ; +test( macro , '-7' , '24' , '17' ) ; +test( macro , '7' , '-24' , '-17' ) ; +test( macro , '-7' , '-24' , '-31' ) ; +test( macro , '7' , '27' , '34' ) ; +test( macro , '-7' , '27' , '20' ) ; +test( macro , '7' , '-27' , '-20' ) ; +test( macro , '-7' , '-27' , '-34' ) ; +test( macro , '7' , '29' , '36' ) ; +test( macro , '-7' , '29' , '22' ) ; +test( macro , '7' , '-29' , '-22' ) ; +test( macro , '-7' , '-29' , '-36' ) ; +test( macro , '7' , '1234' , '1241' ) ; +test( macro , '-7' , '1234' , '1227' ) ; +test( macro , '7' , '-1234' , '-1227' ) ; +test( macro , '-7' , '-1234' , '-1241' ) ; +test( macro , '7' , '5678' , '5685' ) ; +test( macro , '-7' , '5678' , '5671' ) ; +test( macro , '7' , '-5678' , '-5671' ) ; +test( macro , '-7' , '-5678' , '-5685' ) ; +test( macro , '7' , '1073741824' , '1073741831' ) ; +test( macro , '-7' , '1073741824' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '-1073741831' ) ; +test( macro , '7' , '51676101935731' , '51676101935738' ) ; +test( macro , '-7' , '51676101935731' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '-51676101935738' ) ; +test( macro , '7' , '717897987691852588770249' , '717897987691852588770256' ) ; +test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '9' , '1' , '10' ) ; +test( macro , '-9' , '1' , '-8' ) ; +test( macro , '9' , '-1' , '8' ) ; +test( macro , '-9' , '-1' , '-10' ) ; +test( macro , '9' , '3' , '12' ) ; +test( macro , '-9' , '3' , '-6' ) ; +test( macro , '9' , '-3' , '6' ) ; +test( macro , '-9' , '-3' , '-12' ) ; +test( macro , '9' , '7' , '16' ) ; +test( macro , '-9' , '7' , '-2' ) ; +test( macro , '9' , '-7' , '2' ) ; +test( macro , '-9' , '-7' , '-16' ) ; +test( macro , '9' , '9' , '18' ) ; +test( macro , '-9' , '9' , '0' ) ; +test( macro , '9' , '-9' , '0' ) ; +test( macro , '-9' , '-9' , '-18' ) ; +test( macro , '9' , '11' , '20' ) ; +test( macro , '-9' , '11' , '2' ) ; +test( macro , '9' , '-11' , '-2' ) ; +test( macro , '-9' , '-11' , '-20' ) ; +test( macro , '9' , '17' , '26' ) ; +test( macro , '-9' , '17' , '8' ) ; +test( macro , '9' , '-17' , '-8' ) ; +test( macro , '-9' , '-17' , '-26' ) ; +test( macro , '9' , '22' , '31' ) ; +test( macro , '-9' , '22' , '13' ) ; +test( macro , '9' , '-22' , '-13' ) ; +test( macro , '-9' , '-22' , '-31' ) ; +test( macro , '9' , '24' , '33' ) ; +test( macro , '-9' , '24' , '15' ) ; +test( macro , '9' , '-24' , '-15' ) ; +test( macro , '-9' , '-24' , '-33' ) ; +test( macro , '9' , '27' , '36' ) ; +test( macro , '-9' , '27' , '18' ) ; +test( macro , '9' , '-27' , '-18' ) ; +test( macro , '-9' , '-27' , '-36' ) ; +test( macro , '9' , '29' , '38' ) ; +test( macro , '-9' , '29' , '20' ) ; +test( macro , '9' , '-29' , '-20' ) ; +test( macro , '-9' , '-29' , '-38' ) ; +test( macro , '9' , '1234' , '1243' ) ; +test( macro , '-9' , '1234' , '1225' ) ; +test( macro , '9' , '-1234' , '-1225' ) ; +test( macro , '-9' , '-1234' , '-1243' ) ; +test( macro , '9' , '5678' , '5687' ) ; +test( macro , '-9' , '5678' , '5669' ) ; +test( macro , '9' , '-5678' , '-5669' ) ; +test( macro , '-9' , '-5678' , '-5687' ) ; +test( macro , '9' , '1073741824' , '1073741833' ) ; +test( macro , '-9' , '1073741824' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '-1073741833' ) ; +test( macro , '9' , '51676101935731' , '51676101935740' ) ; +test( macro , '-9' , '51676101935731' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '-51676101935740' ) ; +test( macro , '9' , '717897987691852588770249' , '717897987691852588770258' ) ; +test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '11' , '1' , '12' ) ; +test( macro , '-11' , '1' , '-10' ) ; +test( macro , '11' , '-1' , '10' ) ; +test( macro , '-11' , '-1' , '-12' ) ; +test( macro , '11' , '3' , '14' ) ; +test( macro , '-11' , '3' , '-8' ) ; +test( macro , '11' , '-3' , '8' ) ; +test( macro , '-11' , '-3' , '-14' ) ; +test( macro , '11' , '7' , '18' ) ; +test( macro , '-11' , '7' , '-4' ) ; +test( macro , '11' , '-7' , '4' ) ; +test( macro , '-11' , '-7' , '-18' ) ; +test( macro , '11' , '9' , '20' ) ; +test( macro , '-11' , '9' , '-2' ) ; +test( macro , '11' , '-9' , '2' ) ; +test( macro , '-11' , '-9' , '-20' ) ; +test( macro , '11' , '11' , '22' ) ; +test( macro , '-11' , '11' , '0' ) ; +test( macro , '11' , '-11' , '0' ) ; +test( macro , '-11' , '-11' , '-22' ) ; +test( macro , '11' , '17' , '28' ) ; +test( macro , '-11' , '17' , '6' ) ; +test( macro , '11' , '-17' , '-6' ) ; +test( macro , '-11' , '-17' , '-28' ) ; +test( macro , '11' , '22' , '33' ) ; +test( macro , '-11' , '22' , '11' ) ; +test( macro , '11' , '-22' , '-11' ) ; +test( macro , '-11' , '-22' , '-33' ) ; +test( macro , '11' , '24' , '35' ) ; +test( macro , '-11' , '24' , '13' ) ; +test( macro , '11' , '-24' , '-13' ) ; +test( macro , '-11' , '-24' , '-35' ) ; +test( macro , '11' , '27' , '38' ) ; +test( macro , '-11' , '27' , '16' ) ; +test( macro , '11' , '-27' , '-16' ) ; +test( macro , '-11' , '-27' , '-38' ) ; +test( macro , '11' , '29' , '40' ) ; +test( macro , '-11' , '29' , '18' ) ; +test( macro , '11' , '-29' , '-18' ) ; +test( macro , '-11' , '-29' , '-40' ) ; +test( macro , '11' , '1234' , '1245' ) ; +test( macro , '-11' , '1234' , '1223' ) ; +test( macro , '11' , '-1234' , '-1223' ) ; +test( macro , '-11' , '-1234' , '-1245' ) ; +test( macro , '11' , '5678' , '5689' ) ; +test( macro , '-11' , '5678' , '5667' ) ; +test( macro , '11' , '-5678' , '-5667' ) ; +test( macro , '-11' , '-5678' , '-5689' ) ; +test( macro , '11' , '1073741824' , '1073741835' ) ; +test( macro , '-11' , '1073741824' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '-1073741835' ) ; +test( macro , '11' , '51676101935731' , '51676101935742' ) ; +test( macro , '-11' , '51676101935731' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '-51676101935742' ) ; +test( macro , '11' , '717897987691852588770249' , '717897987691852588770260' ) ; +test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '-717897987691852588770260' ) ; test( macro , '17' , '1' , '18' ) ; test( macro , '-17' , '1' , '-16' ) ; test( macro , '17' , '-1' , '16' ) ; test( macro , '-17' , '-1' , '-18' ) ; +test( macro , '17' , '3' , '20' ) ; +test( macro , '-17' , '3' , '-14' ) ; +test( macro , '17' , '-3' , '14' ) ; +test( macro , '-17' , '-3' , '-20' ) ; +test( macro , '17' , '7' , '24' ) ; +test( macro , '-17' , '7' , '-10' ) ; +test( macro , '17' , '-7' , '10' ) ; +test( macro , '-17' , '-7' , '-24' ) ; +test( macro , '17' , '9' , '26' ) ; +test( macro , '-17' , '9' , '-8' ) ; +test( macro , '17' , '-9' , '8' ) ; +test( macro , '-17' , '-9' , '-26' ) ; +test( macro , '17' , '11' , '28' ) ; +test( macro , '-17' , '11' , '-6' ) ; +test( macro , '17' , '-11' , '6' ) ; +test( macro , '-17' , '-11' , '-28' ) ; test( macro , '17' , '17' , '34' ) ; test( macro , '-17' , '17' , '0' ) ; test( macro , '17' , '-17' , '0' ) ; test( macro , '-17' , '-17' , '-34' ) ; -test( macro , '17' , '51676101935731' , '51676101935748' ) ; -test( macro , '-17' , '51676101935731' , '51676101935714' ) ; -test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '-51676101935731' , '-51676101935748' ) ; +test( macro , '17' , '22' , '39' ) ; +test( macro , '-17' , '22' , '5' ) ; +test( macro , '17' , '-22' , '-5' ) ; +test( macro , '-17' , '-22' , '-39' ) ; +test( macro , '17' , '24' , '41' ) ; +test( macro , '-17' , '24' , '7' ) ; +test( macro , '17' , '-24' , '-7' ) ; +test( macro , '-17' , '-24' , '-41' ) ; +test( macro , '17' , '27' , '44' ) ; +test( macro , '-17' , '27' , '10' ) ; +test( macro , '17' , '-27' , '-10' ) ; +test( macro , '-17' , '-27' , '-44' ) ; +test( macro , '17' , '29' , '46' ) ; +test( macro , '-17' , '29' , '12' ) ; +test( macro , '17' , '-29' , '-12' ) ; +test( macro , '-17' , '-29' , '-46' ) ; +test( macro , '17' , '1234' , '1251' ) ; +test( macro , '-17' , '1234' , '1217' ) ; +test( macro , '17' , '-1234' , '-1217' ) ; +test( macro , '-17' , '-1234' , '-1251' ) ; +test( macro , '17' , '5678' , '5695' ) ; +test( macro , '-17' , '5678' , '5661' ) ; +test( macro , '17' , '-5678' , '-5661' ) ; +test( macro , '-17' , '-5678' , '-5695' ) ; test( macro , '17' , '1073741824' , '1073741841' ) ; test( macro , '-17' , '1073741824' , '1073741807' ) ; test( macro , '17' , '-1073741824' , '-1073741807' ) ; test( macro , '-17' , '-1073741824' , '-1073741841' ) ; +test( macro , '17' , '51676101935731' , '51676101935748' ) ; +test( macro , '-17' , '51676101935731' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '-51676101935748' ) ; test( macro , '17' , '717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-717897987691852588770266' ) ; -test( macro , '51676101935731' , '1' , '51676101935732' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; -test( macro , '51676101935731' , '-1' , '51676101935730' ) ; -test( macro , '-51676101935731' , '-1' , '-51676101935732' ) ; -test( macro , '51676101935731' , '17' , '51676101935748' ) ; -test( macro , '-51676101935731' , '17' , '-51676101935714' ) ; -test( macro , '51676101935731' , '-17' , '51676101935714' ) ; -test( macro , '-51676101935731' , '-17' , '-51676101935748' ) ; -test( macro , '51676101935731' , '51676101935731' , '103352203871462' ) ; -test( macro , '-51676101935731' , '51676101935731' , '0' ) ; -test( macro , '51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '-103352203871462' ) ; -test( macro , '51676101935731' , '1073741824' , '51677175677555' ) ; -test( macro , '-51676101935731' , '1073741824' , '-51675028193907' ) ; -test( macro , '51676101935731' , '-1073741824' , '51675028193907' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-51677175677555' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '717897987743528690705980' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '22' , '1' , '23' ) ; +test( macro , '-22' , '1' , '-21' ) ; +test( macro , '22' , '-1' , '21' ) ; +test( macro , '-22' , '-1' , '-23' ) ; +test( macro , '22' , '3' , '25' ) ; +test( macro , '-22' , '3' , '-19' ) ; +test( macro , '22' , '-3' , '19' ) ; +test( macro , '-22' , '-3' , '-25' ) ; +test( macro , '22' , '7' , '29' ) ; +test( macro , '-22' , '7' , '-15' ) ; +test( macro , '22' , '-7' , '15' ) ; +test( macro , '-22' , '-7' , '-29' ) ; +test( macro , '22' , '9' , '31' ) ; +test( macro , '-22' , '9' , '-13' ) ; +test( macro , '22' , '-9' , '13' ) ; +test( macro , '-22' , '-9' , '-31' ) ; +test( macro , '22' , '11' , '33' ) ; +test( macro , '-22' , '11' , '-11' ) ; +test( macro , '22' , '-11' , '11' ) ; +test( macro , '-22' , '-11' , '-33' ) ; +test( macro , '22' , '17' , '39' ) ; +test( macro , '-22' , '17' , '-5' ) ; +test( macro , '22' , '-17' , '5' ) ; +test( macro , '-22' , '-17' , '-39' ) ; +test( macro , '22' , '22' , '44' ) ; +test( macro , '-22' , '22' , '0' ) ; +test( macro , '22' , '-22' , '0' ) ; +test( macro , '-22' , '-22' , '-44' ) ; +test( macro , '22' , '24' , '46' ) ; +test( macro , '-22' , '24' , '2' ) ; +test( macro , '22' , '-24' , '-2' ) ; +test( macro , '-22' , '-24' , '-46' ) ; +test( macro , '22' , '27' , '49' ) ; +test( macro , '-22' , '27' , '5' ) ; +test( macro , '22' , '-27' , '-5' ) ; +test( macro , '-22' , '-27' , '-49' ) ; +test( macro , '22' , '29' , '51' ) ; +test( macro , '-22' , '29' , '7' ) ; +test( macro , '22' , '-29' , '-7' ) ; +test( macro , '-22' , '-29' , '-51' ) ; +test( macro , '22' , '1234' , '1256' ) ; +test( macro , '-22' , '1234' , '1212' ) ; +test( macro , '22' , '-1234' , '-1212' ) ; +test( macro , '-22' , '-1234' , '-1256' ) ; +test( macro , '22' , '5678' , '5700' ) ; +test( macro , '-22' , '5678' , '5656' ) ; +test( macro , '22' , '-5678' , '-5656' ) ; +test( macro , '-22' , '-5678' , '-5700' ) ; +test( macro , '22' , '1073741824' , '1073741846' ) ; +test( macro , '-22' , '1073741824' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '-1073741846' ) ; +test( macro , '22' , '51676101935731' , '51676101935753' ) ; +test( macro , '-22' , '51676101935731' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '-51676101935753' ) ; +test( macro , '22' , '717897987691852588770249' , '717897987691852588770271' ) ; +test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '24' , '1' , '25' ) ; +test( macro , '-24' , '1' , '-23' ) ; +test( macro , '24' , '-1' , '23' ) ; +test( macro , '-24' , '-1' , '-25' ) ; +test( macro , '24' , '3' , '27' ) ; +test( macro , '-24' , '3' , '-21' ) ; +test( macro , '24' , '-3' , '21' ) ; +test( macro , '-24' , '-3' , '-27' ) ; +test( macro , '24' , '7' , '31' ) ; +test( macro , '-24' , '7' , '-17' ) ; +test( macro , '24' , '-7' , '17' ) ; +test( macro , '-24' , '-7' , '-31' ) ; +test( macro , '24' , '9' , '33' ) ; +test( macro , '-24' , '9' , '-15' ) ; +test( macro , '24' , '-9' , '15' ) ; +test( macro , '-24' , '-9' , '-33' ) ; +test( macro , '24' , '11' , '35' ) ; +test( macro , '-24' , '11' , '-13' ) ; +test( macro , '24' , '-11' , '13' ) ; +test( macro , '-24' , '-11' , '-35' ) ; +test( macro , '24' , '17' , '41' ) ; +test( macro , '-24' , '17' , '-7' ) ; +test( macro , '24' , '-17' , '7' ) ; +test( macro , '-24' , '-17' , '-41' ) ; +test( macro , '24' , '22' , '46' ) ; +test( macro , '-24' , '22' , '-2' ) ; +test( macro , '24' , '-22' , '2' ) ; +test( macro , '-24' , '-22' , '-46' ) ; +test( macro , '24' , '24' , '48' ) ; +test( macro , '-24' , '24' , '0' ) ; +test( macro , '24' , '-24' , '0' ) ; +test( macro , '-24' , '-24' , '-48' ) ; +test( macro , '24' , '27' , '51' ) ; +test( macro , '-24' , '27' , '3' ) ; +test( macro , '24' , '-27' , '-3' ) ; +test( macro , '-24' , '-27' , '-51' ) ; +test( macro , '24' , '29' , '53' ) ; +test( macro , '-24' , '29' , '5' ) ; +test( macro , '24' , '-29' , '-5' ) ; +test( macro , '-24' , '-29' , '-53' ) ; +test( macro , '24' , '1234' , '1258' ) ; +test( macro , '-24' , '1234' , '1210' ) ; +test( macro , '24' , '-1234' , '-1210' ) ; +test( macro , '-24' , '-1234' , '-1258' ) ; +test( macro , '24' , '5678' , '5702' ) ; +test( macro , '-24' , '5678' , '5654' ) ; +test( macro , '24' , '-5678' , '-5654' ) ; +test( macro , '-24' , '-5678' , '-5702' ) ; +test( macro , '24' , '1073741824' , '1073741848' ) ; +test( macro , '-24' , '1073741824' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '-1073741848' ) ; +test( macro , '24' , '51676101935731' , '51676101935755' ) ; +test( macro , '-24' , '51676101935731' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '-51676101935755' ) ; +test( macro , '24' , '717897987691852588770249' , '717897987691852588770273' ) ; +test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '27' , '1' , '28' ) ; +test( macro , '-27' , '1' , '-26' ) ; +test( macro , '27' , '-1' , '26' ) ; +test( macro , '-27' , '-1' , '-28' ) ; +test( macro , '27' , '3' , '30' ) ; +test( macro , '-27' , '3' , '-24' ) ; +test( macro , '27' , '-3' , '24' ) ; +test( macro , '-27' , '-3' , '-30' ) ; +test( macro , '27' , '7' , '34' ) ; +test( macro , '-27' , '7' , '-20' ) ; +test( macro , '27' , '-7' , '20' ) ; +test( macro , '-27' , '-7' , '-34' ) ; +test( macro , '27' , '9' , '36' ) ; +test( macro , '-27' , '9' , '-18' ) ; +test( macro , '27' , '-9' , '18' ) ; +test( macro , '-27' , '-9' , '-36' ) ; +test( macro , '27' , '11' , '38' ) ; +test( macro , '-27' , '11' , '-16' ) ; +test( macro , '27' , '-11' , '16' ) ; +test( macro , '-27' , '-11' , '-38' ) ; +test( macro , '27' , '17' , '44' ) ; +test( macro , '-27' , '17' , '-10' ) ; +test( macro , '27' , '-17' , '10' ) ; +test( macro , '-27' , '-17' , '-44' ) ; +test( macro , '27' , '22' , '49' ) ; +test( macro , '-27' , '22' , '-5' ) ; +test( macro , '27' , '-22' , '5' ) ; +test( macro , '-27' , '-22' , '-49' ) ; +test( macro , '27' , '24' , '51' ) ; +test( macro , '-27' , '24' , '-3' ) ; +test( macro , '27' , '-24' , '3' ) ; +test( macro , '-27' , '-24' , '-51' ) ; +test( macro , '27' , '27' , '54' ) ; +test( macro , '-27' , '27' , '0' ) ; +test( macro , '27' , '-27' , '0' ) ; +test( macro , '-27' , '-27' , '-54' ) ; +test( macro , '27' , '29' , '56' ) ; +test( macro , '-27' , '29' , '2' ) ; +test( macro , '27' , '-29' , '-2' ) ; +test( macro , '-27' , '-29' , '-56' ) ; +test( macro , '27' , '1234' , '1261' ) ; +test( macro , '-27' , '1234' , '1207' ) ; +test( macro , '27' , '-1234' , '-1207' ) ; +test( macro , '-27' , '-1234' , '-1261' ) ; +test( macro , '27' , '5678' , '5705' ) ; +test( macro , '-27' , '5678' , '5651' ) ; +test( macro , '27' , '-5678' , '-5651' ) ; +test( macro , '-27' , '-5678' , '-5705' ) ; +test( macro , '27' , '1073741824' , '1073741851' ) ; +test( macro , '-27' , '1073741824' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '-1073741851' ) ; +test( macro , '27' , '51676101935731' , '51676101935758' ) ; +test( macro , '-27' , '51676101935731' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '-51676101935758' ) ; +test( macro , '27' , '717897987691852588770249' , '717897987691852588770276' ) ; +test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '29' , '1' , '30' ) ; +test( macro , '-29' , '1' , '-28' ) ; +test( macro , '29' , '-1' , '28' ) ; +test( macro , '-29' , '-1' , '-30' ) ; +test( macro , '29' , '3' , '32' ) ; +test( macro , '-29' , '3' , '-26' ) ; +test( macro , '29' , '-3' , '26' ) ; +test( macro , '-29' , '-3' , '-32' ) ; +test( macro , '29' , '7' , '36' ) ; +test( macro , '-29' , '7' , '-22' ) ; +test( macro , '29' , '-7' , '22' ) ; +test( macro , '-29' , '-7' , '-36' ) ; +test( macro , '29' , '9' , '38' ) ; +test( macro , '-29' , '9' , '-20' ) ; +test( macro , '29' , '-9' , '20' ) ; +test( macro , '-29' , '-9' , '-38' ) ; +test( macro , '29' , '11' , '40' ) ; +test( macro , '-29' , '11' , '-18' ) ; +test( macro , '29' , '-11' , '18' ) ; +test( macro , '-29' , '-11' , '-40' ) ; +test( macro , '29' , '17' , '46' ) ; +test( macro , '-29' , '17' , '-12' ) ; +test( macro , '29' , '-17' , '12' ) ; +test( macro , '-29' , '-17' , '-46' ) ; +test( macro , '29' , '22' , '51' ) ; +test( macro , '-29' , '22' , '-7' ) ; +test( macro , '29' , '-22' , '7' ) ; +test( macro , '-29' , '-22' , '-51' ) ; +test( macro , '29' , '24' , '53' ) ; +test( macro , '-29' , '24' , '-5' ) ; +test( macro , '29' , '-24' , '5' ) ; +test( macro , '-29' , '-24' , '-53' ) ; +test( macro , '29' , '27' , '56' ) ; +test( macro , '-29' , '27' , '-2' ) ; +test( macro , '29' , '-27' , '2' ) ; +test( macro , '-29' , '-27' , '-56' ) ; +test( macro , '29' , '29' , '58' ) ; +test( macro , '-29' , '29' , '0' ) ; +test( macro , '29' , '-29' , '0' ) ; +test( macro , '-29' , '-29' , '-58' ) ; +test( macro , '29' , '1234' , '1263' ) ; +test( macro , '-29' , '1234' , '1205' ) ; +test( macro , '29' , '-1234' , '-1205' ) ; +test( macro , '-29' , '-1234' , '-1263' ) ; +test( macro , '29' , '5678' , '5707' ) ; +test( macro , '-29' , '5678' , '5649' ) ; +test( macro , '29' , '-5678' , '-5649' ) ; +test( macro , '-29' , '-5678' , '-5707' ) ; +test( macro , '29' , '1073741824' , '1073741853' ) ; +test( macro , '-29' , '1073741824' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '-1073741853' ) ; +test( macro , '29' , '51676101935731' , '51676101935760' ) ; +test( macro , '-29' , '51676101935731' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '-51676101935760' ) ; +test( macro , '29' , '717897987691852588770249' , '717897987691852588770278' ) ; +test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '1234' , '1' , '1235' ) ; +test( macro , '-1234' , '1' , '-1233' ) ; +test( macro , '1234' , '-1' , '1233' ) ; +test( macro , '-1234' , '-1' , '-1235' ) ; +test( macro , '1234' , '3' , '1237' ) ; +test( macro , '-1234' , '3' , '-1231' ) ; +test( macro , '1234' , '-3' , '1231' ) ; +test( macro , '-1234' , '-3' , '-1237' ) ; +test( macro , '1234' , '7' , '1241' ) ; +test( macro , '-1234' , '7' , '-1227' ) ; +test( macro , '1234' , '-7' , '1227' ) ; +test( macro , '-1234' , '-7' , '-1241' ) ; +test( macro , '1234' , '9' , '1243' ) ; +test( macro , '-1234' , '9' , '-1225' ) ; +test( macro , '1234' , '-9' , '1225' ) ; +test( macro , '-1234' , '-9' , '-1243' ) ; +test( macro , '1234' , '11' , '1245' ) ; +test( macro , '-1234' , '11' , '-1223' ) ; +test( macro , '1234' , '-11' , '1223' ) ; +test( macro , '-1234' , '-11' , '-1245' ) ; +test( macro , '1234' , '17' , '1251' ) ; +test( macro , '-1234' , '17' , '-1217' ) ; +test( macro , '1234' , '-17' , '1217' ) ; +test( macro , '-1234' , '-17' , '-1251' ) ; +test( macro , '1234' , '22' , '1256' ) ; +test( macro , '-1234' , '22' , '-1212' ) ; +test( macro , '1234' , '-22' , '1212' ) ; +test( macro , '-1234' , '-22' , '-1256' ) ; +test( macro , '1234' , '24' , '1258' ) ; +test( macro , '-1234' , '24' , '-1210' ) ; +test( macro , '1234' , '-24' , '1210' ) ; +test( macro , '-1234' , '-24' , '-1258' ) ; +test( macro , '1234' , '27' , '1261' ) ; +test( macro , '-1234' , '27' , '-1207' ) ; +test( macro , '1234' , '-27' , '1207' ) ; +test( macro , '-1234' , '-27' , '-1261' ) ; +test( macro , '1234' , '29' , '1263' ) ; +test( macro , '-1234' , '29' , '-1205' ) ; +test( macro , '1234' , '-29' , '1205' ) ; +test( macro , '-1234' , '-29' , '-1263' ) ; +test( macro , '1234' , '1234' , '2468' ) ; +test( macro , '-1234' , '1234' , '0' ) ; +test( macro , '1234' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1234' , '-2468' ) ; +test( macro , '1234' , '5678' , '6912' ) ; +test( macro , '-1234' , '5678' , '4444' ) ; +test( macro , '1234' , '-5678' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '-6912' ) ; +test( macro , '1234' , '1073741824' , '1073743058' ) ; +test( macro , '-1234' , '1073741824' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '-1073743058' ) ; +test( macro , '1234' , '51676101935731' , '51676101936965' ) ; +test( macro , '-1234' , '51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '-51676101936965' ) ; +test( macro , '1234' , '717897987691852588770249' , '717897987691852588771483' ) ; +test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '5678' , '1' , '5679' ) ; +test( macro , '-5678' , '1' , '-5677' ) ; +test( macro , '5678' , '-1' , '5677' ) ; +test( macro , '-5678' , '-1' , '-5679' ) ; +test( macro , '5678' , '3' , '5681' ) ; +test( macro , '-5678' , '3' , '-5675' ) ; +test( macro , '5678' , '-3' , '5675' ) ; +test( macro , '-5678' , '-3' , '-5681' ) ; +test( macro , '5678' , '7' , '5685' ) ; +test( macro , '-5678' , '7' , '-5671' ) ; +test( macro , '5678' , '-7' , '5671' ) ; +test( macro , '-5678' , '-7' , '-5685' ) ; +test( macro , '5678' , '9' , '5687' ) ; +test( macro , '-5678' , '9' , '-5669' ) ; +test( macro , '5678' , '-9' , '5669' ) ; +test( macro , '-5678' , '-9' , '-5687' ) ; +test( macro , '5678' , '11' , '5689' ) ; +test( macro , '-5678' , '11' , '-5667' ) ; +test( macro , '5678' , '-11' , '5667' ) ; +test( macro , '-5678' , '-11' , '-5689' ) ; +test( macro , '5678' , '17' , '5695' ) ; +test( macro , '-5678' , '17' , '-5661' ) ; +test( macro , '5678' , '-17' , '5661' ) ; +test( macro , '-5678' , '-17' , '-5695' ) ; +test( macro , '5678' , '22' , '5700' ) ; +test( macro , '-5678' , '22' , '-5656' ) ; +test( macro , '5678' , '-22' , '5656' ) ; +test( macro , '-5678' , '-22' , '-5700' ) ; +test( macro , '5678' , '24' , '5702' ) ; +test( macro , '-5678' , '24' , '-5654' ) ; +test( macro , '5678' , '-24' , '5654' ) ; +test( macro , '-5678' , '-24' , '-5702' ) ; +test( macro , '5678' , '27' , '5705' ) ; +test( macro , '-5678' , '27' , '-5651' ) ; +test( macro , '5678' , '-27' , '5651' ) ; +test( macro , '-5678' , '-27' , '-5705' ) ; +test( macro , '5678' , '29' , '5707' ) ; +test( macro , '-5678' , '29' , '-5649' ) ; +test( macro , '5678' , '-29' , '5649' ) ; +test( macro , '-5678' , '-29' , '-5707' ) ; +test( macro , '5678' , '1234' , '6912' ) ; +test( macro , '-5678' , '1234' , '-4444' ) ; +test( macro , '5678' , '-1234' , '4444' ) ; +test( macro , '-5678' , '-1234' , '-6912' ) ; +test( macro , '5678' , '5678' , '11356' ) ; +test( macro , '-5678' , '5678' , '0' ) ; +test( macro , '5678' , '-5678' , '0' ) ; +test( macro , '-5678' , '-5678' , '-11356' ) ; +test( macro , '5678' , '1073741824' , '1073747502' ) ; +test( macro , '-5678' , '1073741824' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '-1073747502' ) ; +test( macro , '5678' , '51676101935731' , '51676101941409' ) ; +test( macro , '-5678' , '51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '-51676101941409' ) ; +test( macro , '5678' , '717897987691852588770249' , '717897987691852588775927' ) ; +test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '-717897987691852588775927' ) ; test( macro , '1073741824' , '1' , '1073741825' ) ; test( macro , '-1073741824' , '1' , '-1073741823' ) ; test( macro , '1073741824' , '-1' , '1073741823' ) ; test( macro , '-1073741824' , '-1' , '-1073741825' ) ; +test( macro , '1073741824' , '3' , '1073741827' ) ; +test( macro , '-1073741824' , '3' , '-1073741821' ) ; +test( macro , '1073741824' , '-3' , '1073741821' ) ; +test( macro , '-1073741824' , '-3' , '-1073741827' ) ; +test( macro , '1073741824' , '7' , '1073741831' ) ; +test( macro , '-1073741824' , '7' , '-1073741817' ) ; +test( macro , '1073741824' , '-7' , '1073741817' ) ; +test( macro , '-1073741824' , '-7' , '-1073741831' ) ; +test( macro , '1073741824' , '9' , '1073741833' ) ; +test( macro , '-1073741824' , '9' , '-1073741815' ) ; +test( macro , '1073741824' , '-9' , '1073741815' ) ; +test( macro , '-1073741824' , '-9' , '-1073741833' ) ; +test( macro , '1073741824' , '11' , '1073741835' ) ; +test( macro , '-1073741824' , '11' , '-1073741813' ) ; +test( macro , '1073741824' , '-11' , '1073741813' ) ; +test( macro , '-1073741824' , '-11' , '-1073741835' ) ; test( macro , '1073741824' , '17' , '1073741841' ) ; test( macro , '-1073741824' , '17' , '-1073741807' ) ; test( macro , '1073741824' , '-17' , '1073741807' ) ; test( macro , '-1073741824' , '-17' , '-1073741841' ) ; -test( macro , '1073741824' , '51676101935731' , '51677175677555' ) ; -test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; -test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '-51676101935731' , '-51677175677555' ) ; +test( macro , '1073741824' , '22' , '1073741846' ) ; +test( macro , '-1073741824' , '22' , '-1073741802' ) ; +test( macro , '1073741824' , '-22' , '1073741802' ) ; +test( macro , '-1073741824' , '-22' , '-1073741846' ) ; +test( macro , '1073741824' , '24' , '1073741848' ) ; +test( macro , '-1073741824' , '24' , '-1073741800' ) ; +test( macro , '1073741824' , '-24' , '1073741800' ) ; +test( macro , '-1073741824' , '-24' , '-1073741848' ) ; +test( macro , '1073741824' , '27' , '1073741851' ) ; +test( macro , '-1073741824' , '27' , '-1073741797' ) ; +test( macro , '1073741824' , '-27' , '1073741797' ) ; +test( macro , '-1073741824' , '-27' , '-1073741851' ) ; +test( macro , '1073741824' , '29' , '1073741853' ) ; +test( macro , '-1073741824' , '29' , '-1073741795' ) ; +test( macro , '1073741824' , '-29' , '1073741795' ) ; +test( macro , '-1073741824' , '-29' , '-1073741853' ) ; +test( macro , '1073741824' , '1234' , '1073743058' ) ; +test( macro , '-1073741824' , '1234' , '-1073740590' ) ; +test( macro , '1073741824' , '-1234' , '1073740590' ) ; +test( macro , '-1073741824' , '-1234' , '-1073743058' ) ; +test( macro , '1073741824' , '5678' , '1073747502' ) ; +test( macro , '-1073741824' , '5678' , '-1073736146' ) ; +test( macro , '1073741824' , '-5678' , '1073736146' ) ; +test( macro , '-1073741824' , '-5678' , '-1073747502' ) ; test( macro , '1073741824' , '1073741824' , '2147483648' ) ; test( macro , '-1073741824' , '1073741824' , '0' ) ; test( macro , '1073741824' , '-1073741824' , '0' ) ; test( macro , '-1073741824' , '-1073741824' , '-2147483648' ) ; +test( macro , '1073741824' , '51676101935731' , '51677175677555' ) ; +test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '-51677175677555' ) ; test( macro , '1073741824' , '717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-717897987691853662512073' ) ; +test( macro , '51676101935731' , '1' , '51676101935732' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; +test( macro , '51676101935731' , '-1' , '51676101935730' ) ; +test( macro , '-51676101935731' , '-1' , '-51676101935732' ) ; +test( macro , '51676101935731' , '3' , '51676101935734' ) ; +test( macro , '-51676101935731' , '3' , '-51676101935728' ) ; +test( macro , '51676101935731' , '-3' , '51676101935728' ) ; +test( macro , '-51676101935731' , '-3' , '-51676101935734' ) ; +test( macro , '51676101935731' , '7' , '51676101935738' ) ; +test( macro , '-51676101935731' , '7' , '-51676101935724' ) ; +test( macro , '51676101935731' , '-7' , '51676101935724' ) ; +test( macro , '-51676101935731' , '-7' , '-51676101935738' ) ; +test( macro , '51676101935731' , '9' , '51676101935740' ) ; +test( macro , '-51676101935731' , '9' , '-51676101935722' ) ; +test( macro , '51676101935731' , '-9' , '51676101935722' ) ; +test( macro , '-51676101935731' , '-9' , '-51676101935740' ) ; +test( macro , '51676101935731' , '11' , '51676101935742' ) ; +test( macro , '-51676101935731' , '11' , '-51676101935720' ) ; +test( macro , '51676101935731' , '-11' , '51676101935720' ) ; +test( macro , '-51676101935731' , '-11' , '-51676101935742' ) ; +test( macro , '51676101935731' , '17' , '51676101935748' ) ; +test( macro , '-51676101935731' , '17' , '-51676101935714' ) ; +test( macro , '51676101935731' , '-17' , '51676101935714' ) ; +test( macro , '-51676101935731' , '-17' , '-51676101935748' ) ; +test( macro , '51676101935731' , '22' , '51676101935753' ) ; +test( macro , '-51676101935731' , '22' , '-51676101935709' ) ; +test( macro , '51676101935731' , '-22' , '51676101935709' ) ; +test( macro , '-51676101935731' , '-22' , '-51676101935753' ) ; +test( macro , '51676101935731' , '24' , '51676101935755' ) ; +test( macro , '-51676101935731' , '24' , '-51676101935707' ) ; +test( macro , '51676101935731' , '-24' , '51676101935707' ) ; +test( macro , '-51676101935731' , '-24' , '-51676101935755' ) ; +test( macro , '51676101935731' , '27' , '51676101935758' ) ; +test( macro , '-51676101935731' , '27' , '-51676101935704' ) ; +test( macro , '51676101935731' , '-27' , '51676101935704' ) ; +test( macro , '-51676101935731' , '-27' , '-51676101935758' ) ; +test( macro , '51676101935731' , '29' , '51676101935760' ) ; +test( macro , '-51676101935731' , '29' , '-51676101935702' ) ; +test( macro , '51676101935731' , '-29' , '51676101935702' ) ; +test( macro , '-51676101935731' , '-29' , '-51676101935760' ) ; +test( macro , '51676101935731' , '1234' , '51676101936965' ) ; +test( macro , '-51676101935731' , '1234' , '-51676101934497' ) ; +test( macro , '51676101935731' , '-1234' , '51676101934497' ) ; +test( macro , '-51676101935731' , '-1234' , '-51676101936965' ) ; +test( macro , '51676101935731' , '5678' , '51676101941409' ) ; +test( macro , '-51676101935731' , '5678' , '-51676101930053' ) ; +test( macro , '51676101935731' , '-5678' , '51676101930053' ) ; +test( macro , '-51676101935731' , '-5678' , '-51676101941409' ) ; +test( macro , '51676101935731' , '1073741824' , '51677175677555' ) ; +test( macro , '-51676101935731' , '1073741824' , '-51675028193907' ) ; +test( macro , '51676101935731' , '-1073741824' , '51675028193907' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-51677175677555' ) ; +test( macro , '51676101935731' , '51676101935731' , '103352203871462' ) ; +test( macro , '-51676101935731' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '-103352203871462' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '717897987743528690705980' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '-1' , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , '3' , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , '3' , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , '-3' , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , '-3' , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , '7' , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , '7' , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , '-7' , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , '9' , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , '9' , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , '-9' , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , '-9' , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , '11' , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , '11' , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , '-11' , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-717897987691852588770260' ) ; test( macro , '717897987691852588770249' , '17' , '717897987691852588770266' ) ; test( macro , '-717897987691852588770249' , '17' , '-717897987691852588770232' ) ; test( macro , '717897987691852588770249' , '-17' , '717897987691852588770232' ) ; test( macro , '-717897987691852588770249' , '-17' , '-717897987691852588770266' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '717897987743528690705980' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987640176486834518' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '717897987640176486834518' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '22' , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , '22' , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , '-22' , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , '24' , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , '24' , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , '-24' , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , '27' , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , '27' , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , '-27' , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , '-27' , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , '29' , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , '29' , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , '-29' , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , '1234' , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , '-1234' , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , '5678' , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , '-5678' , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-717897987691852588775927' ) ; test( macro , '717897987691852588770249' , '1073741824' , '717897987691853662512073' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-717897987691851515028425' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '717897987691851515028425' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987743528690705980' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '1435795975383705177540498' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '0' ) ; diff --git a/test/src/integer/arithmetic/addn.js b/test/src/integer/arithmetic/addn.js new file mode 100644 index 0000000..0d05811 --- /dev/null +++ b/test/src/integer/arithmetic/addn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , addn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = addn( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `addn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '2' ) ; +test( macro , '-1' , 1 , '0' ) ; +test( macro , '1' , -1 , '0' ) ; +test( macro , '-1' , -1 , '-2' ) ; +test( macro , '1' , 3 , '4' ) ; +test( macro , '-1' , 3 , '2' ) ; +test( macro , '1' , -3 , '-2' ) ; +test( macro , '-1' , -3 , '-4' ) ; +test( macro , '1' , 7 , '8' ) ; +test( macro , '-1' , 7 , '6' ) ; +test( macro , '1' , -7 , '-6' ) ; +test( macro , '-1' , -7 , '-8' ) ; +test( macro , '1' , 9 , '10' ) ; +test( macro , '-1' , 9 , '8' ) ; +test( macro , '1' , -9 , '-8' ) ; +test( macro , '-1' , -9 , '-10' ) ; +test( macro , '1' , 11 , '12' ) ; +test( macro , '-1' , 11 , '10' ) ; +test( macro , '1' , -11 , '-10' ) ; +test( macro , '-1' , -11 , '-12' ) ; +test( macro , '1' , 17 , '18' ) ; +test( macro , '-1' , 17 , '16' ) ; +test( macro , '1' , -17 , '-16' ) ; +test( macro , '-1' , -17 , '-18' ) ; +test( macro , '1' , 22 , '23' ) ; +test( macro , '-1' , 22 , '21' ) ; +test( macro , '1' , -22 , '-21' ) ; +test( macro , '-1' , -22 , '-23' ) ; +test( macro , '1' , 24 , '25' ) ; +test( macro , '-1' , 24 , '23' ) ; +test( macro , '1' , -24 , '-23' ) ; +test( macro , '-1' , -24 , '-25' ) ; +test( macro , '1' , 27 , '28' ) ; +test( macro , '-1' , 27 , '26' ) ; +test( macro , '1' , -27 , '-26' ) ; +test( macro , '-1' , -27 , '-28' ) ; +test( macro , '1' , 29 , '30' ) ; +test( macro , '-1' , 29 , '28' ) ; +test( macro , '1' , -29 , '-28' ) ; +test( macro , '-1' , -29 , '-30' ) ; +test( macro , '1' , 1234 , '1235' ) ; +test( macro , '-1' , 1234 , '1233' ) ; +test( macro , '1' , -1234 , '-1233' ) ; +test( macro , '-1' , -1234 , '-1235' ) ; +test( macro , '1' , 5678 , '5679' ) ; +test( macro , '-1' , 5678 , '5677' ) ; +test( macro , '1' , -5678 , '-5677' ) ; +test( macro , '-1' , -5678 , '-5679' ) ; +test( macro , '1' , 1073741824 , '1073741825' ) ; +test( macro , '-1' , 1073741824 , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '-1073741825' ) ; +test( macro , '1' , 51676101935731 , '51676101935732' ) ; +test( macro , '-1' , 51676101935731 , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '-51676101935732' ) ; +test( macro , '3' , 1 , '4' ) ; +test( macro , '-3' , 1 , '-2' ) ; +test( macro , '3' , -1 , '2' ) ; +test( macro , '-3' , -1 , '-4' ) ; +test( macro , '3' , 3 , '6' ) ; +test( macro , '-3' , 3 , '0' ) ; +test( macro , '3' , -3 , '0' ) ; +test( macro , '-3' , -3 , '-6' ) ; +test( macro , '3' , 7 , '10' ) ; +test( macro , '-3' , 7 , '4' ) ; +test( macro , '3' , -7 , '-4' ) ; +test( macro , '-3' , -7 , '-10' ) ; +test( macro , '3' , 9 , '12' ) ; +test( macro , '-3' , 9 , '6' ) ; +test( macro , '3' , -9 , '-6' ) ; +test( macro , '-3' , -9 , '-12' ) ; +test( macro , '3' , 11 , '14' ) ; +test( macro , '-3' , 11 , '8' ) ; +test( macro , '3' , -11 , '-8' ) ; +test( macro , '-3' , -11 , '-14' ) ; +test( macro , '3' , 17 , '20' ) ; +test( macro , '-3' , 17 , '14' ) ; +test( macro , '3' , -17 , '-14' ) ; +test( macro , '-3' , -17 , '-20' ) ; +test( macro , '3' , 22 , '25' ) ; +test( macro , '-3' , 22 , '19' ) ; +test( macro , '3' , -22 , '-19' ) ; +test( macro , '-3' , -22 , '-25' ) ; +test( macro , '3' , 24 , '27' ) ; +test( macro , '-3' , 24 , '21' ) ; +test( macro , '3' , -24 , '-21' ) ; +test( macro , '-3' , -24 , '-27' ) ; +test( macro , '3' , 27 , '30' ) ; +test( macro , '-3' , 27 , '24' ) ; +test( macro , '3' , -27 , '-24' ) ; +test( macro , '-3' , -27 , '-30' ) ; +test( macro , '3' , 29 , '32' ) ; +test( macro , '-3' , 29 , '26' ) ; +test( macro , '3' , -29 , '-26' ) ; +test( macro , '-3' , -29 , '-32' ) ; +test( macro , '3' , 1234 , '1237' ) ; +test( macro , '-3' , 1234 , '1231' ) ; +test( macro , '3' , -1234 , '-1231' ) ; +test( macro , '-3' , -1234 , '-1237' ) ; +test( macro , '3' , 5678 , '5681' ) ; +test( macro , '-3' , 5678 , '5675' ) ; +test( macro , '3' , -5678 , '-5675' ) ; +test( macro , '-3' , -5678 , '-5681' ) ; +test( macro , '3' , 1073741824 , '1073741827' ) ; +test( macro , '-3' , 1073741824 , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '-1073741827' ) ; +test( macro , '3' , 51676101935731 , '51676101935734' ) ; +test( macro , '-3' , 51676101935731 , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '-51676101935734' ) ; +test( macro , '7' , 1 , '8' ) ; +test( macro , '-7' , 1 , '-6' ) ; +test( macro , '7' , -1 , '6' ) ; +test( macro , '-7' , -1 , '-8' ) ; +test( macro , '7' , 3 , '10' ) ; +test( macro , '-7' , 3 , '-4' ) ; +test( macro , '7' , -3 , '4' ) ; +test( macro , '-7' , -3 , '-10' ) ; +test( macro , '7' , 7 , '14' ) ; +test( macro , '-7' , 7 , '0' ) ; +test( macro , '7' , -7 , '0' ) ; +test( macro , '-7' , -7 , '-14' ) ; +test( macro , '7' , 9 , '16' ) ; +test( macro , '-7' , 9 , '2' ) ; +test( macro , '7' , -9 , '-2' ) ; +test( macro , '-7' , -9 , '-16' ) ; +test( macro , '7' , 11 , '18' ) ; +test( macro , '-7' , 11 , '4' ) ; +test( macro , '7' , -11 , '-4' ) ; +test( macro , '-7' , -11 , '-18' ) ; +test( macro , '7' , 17 , '24' ) ; +test( macro , '-7' , 17 , '10' ) ; +test( macro , '7' , -17 , '-10' ) ; +test( macro , '-7' , -17 , '-24' ) ; +test( macro , '7' , 22 , '29' ) ; +test( macro , '-7' , 22 , '15' ) ; +test( macro , '7' , -22 , '-15' ) ; +test( macro , '-7' , -22 , '-29' ) ; +test( macro , '7' , 24 , '31' ) ; +test( macro , '-7' , 24 , '17' ) ; +test( macro , '7' , -24 , '-17' ) ; +test( macro , '-7' , -24 , '-31' ) ; +test( macro , '7' , 27 , '34' ) ; +test( macro , '-7' , 27 , '20' ) ; +test( macro , '7' , -27 , '-20' ) ; +test( macro , '-7' , -27 , '-34' ) ; +test( macro , '7' , 29 , '36' ) ; +test( macro , '-7' , 29 , '22' ) ; +test( macro , '7' , -29 , '-22' ) ; +test( macro , '-7' , -29 , '-36' ) ; +test( macro , '7' , 1234 , '1241' ) ; +test( macro , '-7' , 1234 , '1227' ) ; +test( macro , '7' , -1234 , '-1227' ) ; +test( macro , '-7' , -1234 , '-1241' ) ; +test( macro , '7' , 5678 , '5685' ) ; +test( macro , '-7' , 5678 , '5671' ) ; +test( macro , '7' , -5678 , '-5671' ) ; +test( macro , '-7' , -5678 , '-5685' ) ; +test( macro , '7' , 1073741824 , '1073741831' ) ; +test( macro , '-7' , 1073741824 , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '-1073741831' ) ; +test( macro , '7' , 51676101935731 , '51676101935738' ) ; +test( macro , '-7' , 51676101935731 , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '-51676101935738' ) ; +test( macro , '9' , 1 , '10' ) ; +test( macro , '-9' , 1 , '-8' ) ; +test( macro , '9' , -1 , '8' ) ; +test( macro , '-9' , -1 , '-10' ) ; +test( macro , '9' , 3 , '12' ) ; +test( macro , '-9' , 3 , '-6' ) ; +test( macro , '9' , -3 , '6' ) ; +test( macro , '-9' , -3 , '-12' ) ; +test( macro , '9' , 7 , '16' ) ; +test( macro , '-9' , 7 , '-2' ) ; +test( macro , '9' , -7 , '2' ) ; +test( macro , '-9' , -7 , '-16' ) ; +test( macro , '9' , 9 , '18' ) ; +test( macro , '-9' , 9 , '0' ) ; +test( macro , '9' , -9 , '0' ) ; +test( macro , '-9' , -9 , '-18' ) ; +test( macro , '9' , 11 , '20' ) ; +test( macro , '-9' , 11 , '2' ) ; +test( macro , '9' , -11 , '-2' ) ; +test( macro , '-9' , -11 , '-20' ) ; +test( macro , '9' , 17 , '26' ) ; +test( macro , '-9' , 17 , '8' ) ; +test( macro , '9' , -17 , '-8' ) ; +test( macro , '-9' , -17 , '-26' ) ; +test( macro , '9' , 22 , '31' ) ; +test( macro , '-9' , 22 , '13' ) ; +test( macro , '9' , -22 , '-13' ) ; +test( macro , '-9' , -22 , '-31' ) ; +test( macro , '9' , 24 , '33' ) ; +test( macro , '-9' , 24 , '15' ) ; +test( macro , '9' , -24 , '-15' ) ; +test( macro , '-9' , -24 , '-33' ) ; +test( macro , '9' , 27 , '36' ) ; +test( macro , '-9' , 27 , '18' ) ; +test( macro , '9' , -27 , '-18' ) ; +test( macro , '-9' , -27 , '-36' ) ; +test( macro , '9' , 29 , '38' ) ; +test( macro , '-9' , 29 , '20' ) ; +test( macro , '9' , -29 , '-20' ) ; +test( macro , '-9' , -29 , '-38' ) ; +test( macro , '9' , 1234 , '1243' ) ; +test( macro , '-9' , 1234 , '1225' ) ; +test( macro , '9' , -1234 , '-1225' ) ; +test( macro , '-9' , -1234 , '-1243' ) ; +test( macro , '9' , 5678 , '5687' ) ; +test( macro , '-9' , 5678 , '5669' ) ; +test( macro , '9' , -5678 , '-5669' ) ; +test( macro , '-9' , -5678 , '-5687' ) ; +test( macro , '9' , 1073741824 , '1073741833' ) ; +test( macro , '-9' , 1073741824 , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '-1073741833' ) ; +test( macro , '9' , 51676101935731 , '51676101935740' ) ; +test( macro , '-9' , 51676101935731 , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '-51676101935740' ) ; +test( macro , '11' , 1 , '12' ) ; +test( macro , '-11' , 1 , '-10' ) ; +test( macro , '11' , -1 , '10' ) ; +test( macro , '-11' , -1 , '-12' ) ; +test( macro , '11' , 3 , '14' ) ; +test( macro , '-11' , 3 , '-8' ) ; +test( macro , '11' , -3 , '8' ) ; +test( macro , '-11' , -3 , '-14' ) ; +test( macro , '11' , 7 , '18' ) ; +test( macro , '-11' , 7 , '-4' ) ; +test( macro , '11' , -7 , '4' ) ; +test( macro , '-11' , -7 , '-18' ) ; +test( macro , '11' , 9 , '20' ) ; +test( macro , '-11' , 9 , '-2' ) ; +test( macro , '11' , -9 , '2' ) ; +test( macro , '-11' , -9 , '-20' ) ; +test( macro , '11' , 11 , '22' ) ; +test( macro , '-11' , 11 , '0' ) ; +test( macro , '11' , -11 , '0' ) ; +test( macro , '-11' , -11 , '-22' ) ; +test( macro , '11' , 17 , '28' ) ; +test( macro , '-11' , 17 , '6' ) ; +test( macro , '11' , -17 , '-6' ) ; +test( macro , '-11' , -17 , '-28' ) ; +test( macro , '11' , 22 , '33' ) ; +test( macro , '-11' , 22 , '11' ) ; +test( macro , '11' , -22 , '-11' ) ; +test( macro , '-11' , -22 , '-33' ) ; +test( macro , '11' , 24 , '35' ) ; +test( macro , '-11' , 24 , '13' ) ; +test( macro , '11' , -24 , '-13' ) ; +test( macro , '-11' , -24 , '-35' ) ; +test( macro , '11' , 27 , '38' ) ; +test( macro , '-11' , 27 , '16' ) ; +test( macro , '11' , -27 , '-16' ) ; +test( macro , '-11' , -27 , '-38' ) ; +test( macro , '11' , 29 , '40' ) ; +test( macro , '-11' , 29 , '18' ) ; +test( macro , '11' , -29 , '-18' ) ; +test( macro , '-11' , -29 , '-40' ) ; +test( macro , '11' , 1234 , '1245' ) ; +test( macro , '-11' , 1234 , '1223' ) ; +test( macro , '11' , -1234 , '-1223' ) ; +test( macro , '-11' , -1234 , '-1245' ) ; +test( macro , '11' , 5678 , '5689' ) ; +test( macro , '-11' , 5678 , '5667' ) ; +test( macro , '11' , -5678 , '-5667' ) ; +test( macro , '-11' , -5678 , '-5689' ) ; +test( macro , '11' , 1073741824 , '1073741835' ) ; +test( macro , '-11' , 1073741824 , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '-1073741835' ) ; +test( macro , '11' , 51676101935731 , '51676101935742' ) ; +test( macro , '-11' , 51676101935731 , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '-51676101935742' ) ; +test( macro , '17' , 1 , '18' ) ; +test( macro , '-17' , 1 , '-16' ) ; +test( macro , '17' , -1 , '16' ) ; +test( macro , '-17' , -1 , '-18' ) ; +test( macro , '17' , 3 , '20' ) ; +test( macro , '-17' , 3 , '-14' ) ; +test( macro , '17' , -3 , '14' ) ; +test( macro , '-17' , -3 , '-20' ) ; +test( macro , '17' , 7 , '24' ) ; +test( macro , '-17' , 7 , '-10' ) ; +test( macro , '17' , -7 , '10' ) ; +test( macro , '-17' , -7 , '-24' ) ; +test( macro , '17' , 9 , '26' ) ; +test( macro , '-17' , 9 , '-8' ) ; +test( macro , '17' , -9 , '8' ) ; +test( macro , '-17' , -9 , '-26' ) ; +test( macro , '17' , 11 , '28' ) ; +test( macro , '-17' , 11 , '-6' ) ; +test( macro , '17' , -11 , '6' ) ; +test( macro , '-17' , -11 , '-28' ) ; +test( macro , '17' , 17 , '34' ) ; +test( macro , '-17' , 17 , '0' ) ; +test( macro , '17' , -17 , '0' ) ; +test( macro , '-17' , -17 , '-34' ) ; +test( macro , '17' , 22 , '39' ) ; +test( macro , '-17' , 22 , '5' ) ; +test( macro , '17' , -22 , '-5' ) ; +test( macro , '-17' , -22 , '-39' ) ; +test( macro , '17' , 24 , '41' ) ; +test( macro , '-17' , 24 , '7' ) ; +test( macro , '17' , -24 , '-7' ) ; +test( macro , '-17' , -24 , '-41' ) ; +test( macro , '17' , 27 , '44' ) ; +test( macro , '-17' , 27 , '10' ) ; +test( macro , '17' , -27 , '-10' ) ; +test( macro , '-17' , -27 , '-44' ) ; +test( macro , '17' , 29 , '46' ) ; +test( macro , '-17' , 29 , '12' ) ; +test( macro , '17' , -29 , '-12' ) ; +test( macro , '-17' , -29 , '-46' ) ; +test( macro , '17' , 1234 , '1251' ) ; +test( macro , '-17' , 1234 , '1217' ) ; +test( macro , '17' , -1234 , '-1217' ) ; +test( macro , '-17' , -1234 , '-1251' ) ; +test( macro , '17' , 5678 , '5695' ) ; +test( macro , '-17' , 5678 , '5661' ) ; +test( macro , '17' , -5678 , '-5661' ) ; +test( macro , '-17' , -5678 , '-5695' ) ; +test( macro , '17' , 1073741824 , '1073741841' ) ; +test( macro , '-17' , 1073741824 , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '-1073741841' ) ; +test( macro , '17' , 51676101935731 , '51676101935748' ) ; +test( macro , '-17' , 51676101935731 , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '-51676101935748' ) ; +test( macro , '22' , 1 , '23' ) ; +test( macro , '-22' , 1 , '-21' ) ; +test( macro , '22' , -1 , '21' ) ; +test( macro , '-22' , -1 , '-23' ) ; +test( macro , '22' , 3 , '25' ) ; +test( macro , '-22' , 3 , '-19' ) ; +test( macro , '22' , -3 , '19' ) ; +test( macro , '-22' , -3 , '-25' ) ; +test( macro , '22' , 7 , '29' ) ; +test( macro , '-22' , 7 , '-15' ) ; +test( macro , '22' , -7 , '15' ) ; +test( macro , '-22' , -7 , '-29' ) ; +test( macro , '22' , 9 , '31' ) ; +test( macro , '-22' , 9 , '-13' ) ; +test( macro , '22' , -9 , '13' ) ; +test( macro , '-22' , -9 , '-31' ) ; +test( macro , '22' , 11 , '33' ) ; +test( macro , '-22' , 11 , '-11' ) ; +test( macro , '22' , -11 , '11' ) ; +test( macro , '-22' , -11 , '-33' ) ; +test( macro , '22' , 17 , '39' ) ; +test( macro , '-22' , 17 , '-5' ) ; +test( macro , '22' , -17 , '5' ) ; +test( macro , '-22' , -17 , '-39' ) ; +test( macro , '22' , 22 , '44' ) ; +test( macro , '-22' , 22 , '0' ) ; +test( macro , '22' , -22 , '0' ) ; +test( macro , '-22' , -22 , '-44' ) ; +test( macro , '22' , 24 , '46' ) ; +test( macro , '-22' , 24 , '2' ) ; +test( macro , '22' , -24 , '-2' ) ; +test( macro , '-22' , -24 , '-46' ) ; +test( macro , '22' , 27 , '49' ) ; +test( macro , '-22' , 27 , '5' ) ; +test( macro , '22' , -27 , '-5' ) ; +test( macro , '-22' , -27 , '-49' ) ; +test( macro , '22' , 29 , '51' ) ; +test( macro , '-22' , 29 , '7' ) ; +test( macro , '22' , -29 , '-7' ) ; +test( macro , '-22' , -29 , '-51' ) ; +test( macro , '22' , 1234 , '1256' ) ; +test( macro , '-22' , 1234 , '1212' ) ; +test( macro , '22' , -1234 , '-1212' ) ; +test( macro , '-22' , -1234 , '-1256' ) ; +test( macro , '22' , 5678 , '5700' ) ; +test( macro , '-22' , 5678 , '5656' ) ; +test( macro , '22' , -5678 , '-5656' ) ; +test( macro , '-22' , -5678 , '-5700' ) ; +test( macro , '22' , 1073741824 , '1073741846' ) ; +test( macro , '-22' , 1073741824 , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '-1073741846' ) ; +test( macro , '22' , 51676101935731 , '51676101935753' ) ; +test( macro , '-22' , 51676101935731 , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '-51676101935753' ) ; +test( macro , '24' , 1 , '25' ) ; +test( macro , '-24' , 1 , '-23' ) ; +test( macro , '24' , -1 , '23' ) ; +test( macro , '-24' , -1 , '-25' ) ; +test( macro , '24' , 3 , '27' ) ; +test( macro , '-24' , 3 , '-21' ) ; +test( macro , '24' , -3 , '21' ) ; +test( macro , '-24' , -3 , '-27' ) ; +test( macro , '24' , 7 , '31' ) ; +test( macro , '-24' , 7 , '-17' ) ; +test( macro , '24' , -7 , '17' ) ; +test( macro , '-24' , -7 , '-31' ) ; +test( macro , '24' , 9 , '33' ) ; +test( macro , '-24' , 9 , '-15' ) ; +test( macro , '24' , -9 , '15' ) ; +test( macro , '-24' , -9 , '-33' ) ; +test( macro , '24' , 11 , '35' ) ; +test( macro , '-24' , 11 , '-13' ) ; +test( macro , '24' , -11 , '13' ) ; +test( macro , '-24' , -11 , '-35' ) ; +test( macro , '24' , 17 , '41' ) ; +test( macro , '-24' , 17 , '-7' ) ; +test( macro , '24' , -17 , '7' ) ; +test( macro , '-24' , -17 , '-41' ) ; +test( macro , '24' , 22 , '46' ) ; +test( macro , '-24' , 22 , '-2' ) ; +test( macro , '24' , -22 , '2' ) ; +test( macro , '-24' , -22 , '-46' ) ; +test( macro , '24' , 24 , '48' ) ; +test( macro , '-24' , 24 , '0' ) ; +test( macro , '24' , -24 , '0' ) ; +test( macro , '-24' , -24 , '-48' ) ; +test( macro , '24' , 27 , '51' ) ; +test( macro , '-24' , 27 , '3' ) ; +test( macro , '24' , -27 , '-3' ) ; +test( macro , '-24' , -27 , '-51' ) ; +test( macro , '24' , 29 , '53' ) ; +test( macro , '-24' , 29 , '5' ) ; +test( macro , '24' , -29 , '-5' ) ; +test( macro , '-24' , -29 , '-53' ) ; +test( macro , '24' , 1234 , '1258' ) ; +test( macro , '-24' , 1234 , '1210' ) ; +test( macro , '24' , -1234 , '-1210' ) ; +test( macro , '-24' , -1234 , '-1258' ) ; +test( macro , '24' , 5678 , '5702' ) ; +test( macro , '-24' , 5678 , '5654' ) ; +test( macro , '24' , -5678 , '-5654' ) ; +test( macro , '-24' , -5678 , '-5702' ) ; +test( macro , '24' , 1073741824 , '1073741848' ) ; +test( macro , '-24' , 1073741824 , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '-1073741848' ) ; +test( macro , '24' , 51676101935731 , '51676101935755' ) ; +test( macro , '-24' , 51676101935731 , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '-51676101935755' ) ; +test( macro , '27' , 1 , '28' ) ; +test( macro , '-27' , 1 , '-26' ) ; +test( macro , '27' , -1 , '26' ) ; +test( macro , '-27' , -1 , '-28' ) ; +test( macro , '27' , 3 , '30' ) ; +test( macro , '-27' , 3 , '-24' ) ; +test( macro , '27' , -3 , '24' ) ; +test( macro , '-27' , -3 , '-30' ) ; +test( macro , '27' , 7 , '34' ) ; +test( macro , '-27' , 7 , '-20' ) ; +test( macro , '27' , -7 , '20' ) ; +test( macro , '-27' , -7 , '-34' ) ; +test( macro , '27' , 9 , '36' ) ; +test( macro , '-27' , 9 , '-18' ) ; +test( macro , '27' , -9 , '18' ) ; +test( macro , '-27' , -9 , '-36' ) ; +test( macro , '27' , 11 , '38' ) ; +test( macro , '-27' , 11 , '-16' ) ; +test( macro , '27' , -11 , '16' ) ; +test( macro , '-27' , -11 , '-38' ) ; +test( macro , '27' , 17 , '44' ) ; +test( macro , '-27' , 17 , '-10' ) ; +test( macro , '27' , -17 , '10' ) ; +test( macro , '-27' , -17 , '-44' ) ; +test( macro , '27' , 22 , '49' ) ; +test( macro , '-27' , 22 , '-5' ) ; +test( macro , '27' , -22 , '5' ) ; +test( macro , '-27' , -22 , '-49' ) ; +test( macro , '27' , 24 , '51' ) ; +test( macro , '-27' , 24 , '-3' ) ; +test( macro , '27' , -24 , '3' ) ; +test( macro , '-27' , -24 , '-51' ) ; +test( macro , '27' , 27 , '54' ) ; +test( macro , '-27' , 27 , '0' ) ; +test( macro , '27' , -27 , '0' ) ; +test( macro , '-27' , -27 , '-54' ) ; +test( macro , '27' , 29 , '56' ) ; +test( macro , '-27' , 29 , '2' ) ; +test( macro , '27' , -29 , '-2' ) ; +test( macro , '-27' , -29 , '-56' ) ; +test( macro , '27' , 1234 , '1261' ) ; +test( macro , '-27' , 1234 , '1207' ) ; +test( macro , '27' , -1234 , '-1207' ) ; +test( macro , '-27' , -1234 , '-1261' ) ; +test( macro , '27' , 5678 , '5705' ) ; +test( macro , '-27' , 5678 , '5651' ) ; +test( macro , '27' , -5678 , '-5651' ) ; +test( macro , '-27' , -5678 , '-5705' ) ; +test( macro , '27' , 1073741824 , '1073741851' ) ; +test( macro , '-27' , 1073741824 , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '-1073741851' ) ; +test( macro , '27' , 51676101935731 , '51676101935758' ) ; +test( macro , '-27' , 51676101935731 , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '-51676101935758' ) ; +test( macro , '29' , 1 , '30' ) ; +test( macro , '-29' , 1 , '-28' ) ; +test( macro , '29' , -1 , '28' ) ; +test( macro , '-29' , -1 , '-30' ) ; +test( macro , '29' , 3 , '32' ) ; +test( macro , '-29' , 3 , '-26' ) ; +test( macro , '29' , -3 , '26' ) ; +test( macro , '-29' , -3 , '-32' ) ; +test( macro , '29' , 7 , '36' ) ; +test( macro , '-29' , 7 , '-22' ) ; +test( macro , '29' , -7 , '22' ) ; +test( macro , '-29' , -7 , '-36' ) ; +test( macro , '29' , 9 , '38' ) ; +test( macro , '-29' , 9 , '-20' ) ; +test( macro , '29' , -9 , '20' ) ; +test( macro , '-29' , -9 , '-38' ) ; +test( macro , '29' , 11 , '40' ) ; +test( macro , '-29' , 11 , '-18' ) ; +test( macro , '29' , -11 , '18' ) ; +test( macro , '-29' , -11 , '-40' ) ; +test( macro , '29' , 17 , '46' ) ; +test( macro , '-29' , 17 , '-12' ) ; +test( macro , '29' , -17 , '12' ) ; +test( macro , '-29' , -17 , '-46' ) ; +test( macro , '29' , 22 , '51' ) ; +test( macro , '-29' , 22 , '-7' ) ; +test( macro , '29' , -22 , '7' ) ; +test( macro , '-29' , -22 , '-51' ) ; +test( macro , '29' , 24 , '53' ) ; +test( macro , '-29' , 24 , '-5' ) ; +test( macro , '29' , -24 , '5' ) ; +test( macro , '-29' , -24 , '-53' ) ; +test( macro , '29' , 27 , '56' ) ; +test( macro , '-29' , 27 , '-2' ) ; +test( macro , '29' , -27 , '2' ) ; +test( macro , '-29' , -27 , '-56' ) ; +test( macro , '29' , 29 , '58' ) ; +test( macro , '-29' , 29 , '0' ) ; +test( macro , '29' , -29 , '0' ) ; +test( macro , '-29' , -29 , '-58' ) ; +test( macro , '29' , 1234 , '1263' ) ; +test( macro , '-29' , 1234 , '1205' ) ; +test( macro , '29' , -1234 , '-1205' ) ; +test( macro , '-29' , -1234 , '-1263' ) ; +test( macro , '29' , 5678 , '5707' ) ; +test( macro , '-29' , 5678 , '5649' ) ; +test( macro , '29' , -5678 , '-5649' ) ; +test( macro , '-29' , -5678 , '-5707' ) ; +test( macro , '29' , 1073741824 , '1073741853' ) ; +test( macro , '-29' , 1073741824 , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '-1073741853' ) ; +test( macro , '29' , 51676101935731 , '51676101935760' ) ; +test( macro , '-29' , 51676101935731 , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '-51676101935760' ) ; +test( macro , '1234' , 1 , '1235' ) ; +test( macro , '-1234' , 1 , '-1233' ) ; +test( macro , '1234' , -1 , '1233' ) ; +test( macro , '-1234' , -1 , '-1235' ) ; +test( macro , '1234' , 3 , '1237' ) ; +test( macro , '-1234' , 3 , '-1231' ) ; +test( macro , '1234' , -3 , '1231' ) ; +test( macro , '-1234' , -3 , '-1237' ) ; +test( macro , '1234' , 7 , '1241' ) ; +test( macro , '-1234' , 7 , '-1227' ) ; +test( macro , '1234' , -7 , '1227' ) ; +test( macro , '-1234' , -7 , '-1241' ) ; +test( macro , '1234' , 9 , '1243' ) ; +test( macro , '-1234' , 9 , '-1225' ) ; +test( macro , '1234' , -9 , '1225' ) ; +test( macro , '-1234' , -9 , '-1243' ) ; +test( macro , '1234' , 11 , '1245' ) ; +test( macro , '-1234' , 11 , '-1223' ) ; +test( macro , '1234' , -11 , '1223' ) ; +test( macro , '-1234' , -11 , '-1245' ) ; +test( macro , '1234' , 17 , '1251' ) ; +test( macro , '-1234' , 17 , '-1217' ) ; +test( macro , '1234' , -17 , '1217' ) ; +test( macro , '-1234' , -17 , '-1251' ) ; +test( macro , '1234' , 22 , '1256' ) ; +test( macro , '-1234' , 22 , '-1212' ) ; +test( macro , '1234' , -22 , '1212' ) ; +test( macro , '-1234' , -22 , '-1256' ) ; +test( macro , '1234' , 24 , '1258' ) ; +test( macro , '-1234' , 24 , '-1210' ) ; +test( macro , '1234' , -24 , '1210' ) ; +test( macro , '-1234' , -24 , '-1258' ) ; +test( macro , '1234' , 27 , '1261' ) ; +test( macro , '-1234' , 27 , '-1207' ) ; +test( macro , '1234' , -27 , '1207' ) ; +test( macro , '-1234' , -27 , '-1261' ) ; +test( macro , '1234' , 29 , '1263' ) ; +test( macro , '-1234' , 29 , '-1205' ) ; +test( macro , '1234' , -29 , '1205' ) ; +test( macro , '-1234' , -29 , '-1263' ) ; +test( macro , '1234' , 1234 , '2468' ) ; +test( macro , '-1234' , 1234 , '0' ) ; +test( macro , '1234' , -1234 , '0' ) ; +test( macro , '-1234' , -1234 , '-2468' ) ; +test( macro , '1234' , 5678 , '6912' ) ; +test( macro , '-1234' , 5678 , '4444' ) ; +test( macro , '1234' , -5678 , '-4444' ) ; +test( macro , '-1234' , -5678 , '-6912' ) ; +test( macro , '1234' , 1073741824 , '1073743058' ) ; +test( macro , '-1234' , 1073741824 , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '-1073743058' ) ; +test( macro , '1234' , 51676101935731 , '51676101936965' ) ; +test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '-51676101936965' ) ; +test( macro , '5678' , 1 , '5679' ) ; +test( macro , '-5678' , 1 , '-5677' ) ; +test( macro , '5678' , -1 , '5677' ) ; +test( macro , '-5678' , -1 , '-5679' ) ; +test( macro , '5678' , 3 , '5681' ) ; +test( macro , '-5678' , 3 , '-5675' ) ; +test( macro , '5678' , -3 , '5675' ) ; +test( macro , '-5678' , -3 , '-5681' ) ; +test( macro , '5678' , 7 , '5685' ) ; +test( macro , '-5678' , 7 , '-5671' ) ; +test( macro , '5678' , -7 , '5671' ) ; +test( macro , '-5678' , -7 , '-5685' ) ; +test( macro , '5678' , 9 , '5687' ) ; +test( macro , '-5678' , 9 , '-5669' ) ; +test( macro , '5678' , -9 , '5669' ) ; +test( macro , '-5678' , -9 , '-5687' ) ; +test( macro , '5678' , 11 , '5689' ) ; +test( macro , '-5678' , 11 , '-5667' ) ; +test( macro , '5678' , -11 , '5667' ) ; +test( macro , '-5678' , -11 , '-5689' ) ; +test( macro , '5678' , 17 , '5695' ) ; +test( macro , '-5678' , 17 , '-5661' ) ; +test( macro , '5678' , -17 , '5661' ) ; +test( macro , '-5678' , -17 , '-5695' ) ; +test( macro , '5678' , 22 , '5700' ) ; +test( macro , '-5678' , 22 , '-5656' ) ; +test( macro , '5678' , -22 , '5656' ) ; +test( macro , '-5678' , -22 , '-5700' ) ; +test( macro , '5678' , 24 , '5702' ) ; +test( macro , '-5678' , 24 , '-5654' ) ; +test( macro , '5678' , -24 , '5654' ) ; +test( macro , '-5678' , -24 , '-5702' ) ; +test( macro , '5678' , 27 , '5705' ) ; +test( macro , '-5678' , 27 , '-5651' ) ; +test( macro , '5678' , -27 , '5651' ) ; +test( macro , '-5678' , -27 , '-5705' ) ; +test( macro , '5678' , 29 , '5707' ) ; +test( macro , '-5678' , 29 , '-5649' ) ; +test( macro , '5678' , -29 , '5649' ) ; +test( macro , '-5678' , -29 , '-5707' ) ; +test( macro , '5678' , 1234 , '6912' ) ; +test( macro , '-5678' , 1234 , '-4444' ) ; +test( macro , '5678' , -1234 , '4444' ) ; +test( macro , '-5678' , -1234 , '-6912' ) ; +test( macro , '5678' , 5678 , '11356' ) ; +test( macro , '-5678' , 5678 , '0' ) ; +test( macro , '5678' , -5678 , '0' ) ; +test( macro , '-5678' , -5678 , '-11356' ) ; +test( macro , '5678' , 1073741824 , '1073747502' ) ; +test( macro , '-5678' , 1073741824 , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '-1073747502' ) ; +test( macro , '5678' , 51676101935731 , '51676101941409' ) ; +test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '-51676101941409' ) ; +test( macro , '1073741824' , 1 , '1073741825' ) ; +test( macro , '-1073741824' , 1 , '-1073741823' ) ; +test( macro , '1073741824' , -1 , '1073741823' ) ; +test( macro , '-1073741824' , -1 , '-1073741825' ) ; +test( macro , '1073741824' , 3 , '1073741827' ) ; +test( macro , '-1073741824' , 3 , '-1073741821' ) ; +test( macro , '1073741824' , -3 , '1073741821' ) ; +test( macro , '-1073741824' , -3 , '-1073741827' ) ; +test( macro , '1073741824' , 7 , '1073741831' ) ; +test( macro , '-1073741824' , 7 , '-1073741817' ) ; +test( macro , '1073741824' , -7 , '1073741817' ) ; +test( macro , '-1073741824' , -7 , '-1073741831' ) ; +test( macro , '1073741824' , 9 , '1073741833' ) ; +test( macro , '-1073741824' , 9 , '-1073741815' ) ; +test( macro , '1073741824' , -9 , '1073741815' ) ; +test( macro , '-1073741824' , -9 , '-1073741833' ) ; +test( macro , '1073741824' , 11 , '1073741835' ) ; +test( macro , '-1073741824' , 11 , '-1073741813' ) ; +test( macro , '1073741824' , -11 , '1073741813' ) ; +test( macro , '-1073741824' , -11 , '-1073741835' ) ; +test( macro , '1073741824' , 17 , '1073741841' ) ; +test( macro , '-1073741824' , 17 , '-1073741807' ) ; +test( macro , '1073741824' , -17 , '1073741807' ) ; +test( macro , '-1073741824' , -17 , '-1073741841' ) ; +test( macro , '1073741824' , 22 , '1073741846' ) ; +test( macro , '-1073741824' , 22 , '-1073741802' ) ; +test( macro , '1073741824' , -22 , '1073741802' ) ; +test( macro , '-1073741824' , -22 , '-1073741846' ) ; +test( macro , '1073741824' , 24 , '1073741848' ) ; +test( macro , '-1073741824' , 24 , '-1073741800' ) ; +test( macro , '1073741824' , -24 , '1073741800' ) ; +test( macro , '-1073741824' , -24 , '-1073741848' ) ; +test( macro , '1073741824' , 27 , '1073741851' ) ; +test( macro , '-1073741824' , 27 , '-1073741797' ) ; +test( macro , '1073741824' , -27 , '1073741797' ) ; +test( macro , '-1073741824' , -27 , '-1073741851' ) ; +test( macro , '1073741824' , 29 , '1073741853' ) ; +test( macro , '-1073741824' , 29 , '-1073741795' ) ; +test( macro , '1073741824' , -29 , '1073741795' ) ; +test( macro , '-1073741824' , -29 , '-1073741853' ) ; +test( macro , '1073741824' , 1234 , '1073743058' ) ; +test( macro , '-1073741824' , 1234 , '-1073740590' ) ; +test( macro , '1073741824' , -1234 , '1073740590' ) ; +test( macro , '-1073741824' , -1234 , '-1073743058' ) ; +test( macro , '1073741824' , 5678 , '1073747502' ) ; +test( macro , '-1073741824' , 5678 , '-1073736146' ) ; +test( macro , '1073741824' , -5678 , '1073736146' ) ; +test( macro , '-1073741824' , -5678 , '-1073747502' ) ; +test( macro , '1073741824' , 1073741824 , '2147483648' ) ; +test( macro , '-1073741824' , 1073741824 , '0' ) ; +test( macro , '1073741824' , -1073741824 , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '-2147483648' ) ; +test( macro , '1073741824' , 51676101935731 , '51677175677555' ) ; +test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '-51677175677555' ) ; +test( macro , '51676101935731' , 1 , '51676101935732' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935730' ) ; +test( macro , '51676101935731' , -1 , '51676101935730' ) ; +test( macro , '-51676101935731' , -1 , '-51676101935732' ) ; +test( macro , '51676101935731' , 3 , '51676101935734' ) ; +test( macro , '-51676101935731' , 3 , '-51676101935728' ) ; +test( macro , '51676101935731' , -3 , '51676101935728' ) ; +test( macro , '-51676101935731' , -3 , '-51676101935734' ) ; +test( macro , '51676101935731' , 7 , '51676101935738' ) ; +test( macro , '-51676101935731' , 7 , '-51676101935724' ) ; +test( macro , '51676101935731' , -7 , '51676101935724' ) ; +test( macro , '-51676101935731' , -7 , '-51676101935738' ) ; +test( macro , '51676101935731' , 9 , '51676101935740' ) ; +test( macro , '-51676101935731' , 9 , '-51676101935722' ) ; +test( macro , '51676101935731' , -9 , '51676101935722' ) ; +test( macro , '-51676101935731' , -9 , '-51676101935740' ) ; +test( macro , '51676101935731' , 11 , '51676101935742' ) ; +test( macro , '-51676101935731' , 11 , '-51676101935720' ) ; +test( macro , '51676101935731' , -11 , '51676101935720' ) ; +test( macro , '-51676101935731' , -11 , '-51676101935742' ) ; +test( macro , '51676101935731' , 17 , '51676101935748' ) ; +test( macro , '-51676101935731' , 17 , '-51676101935714' ) ; +test( macro , '51676101935731' , -17 , '51676101935714' ) ; +test( macro , '-51676101935731' , -17 , '-51676101935748' ) ; +test( macro , '51676101935731' , 22 , '51676101935753' ) ; +test( macro , '-51676101935731' , 22 , '-51676101935709' ) ; +test( macro , '51676101935731' , -22 , '51676101935709' ) ; +test( macro , '-51676101935731' , -22 , '-51676101935753' ) ; +test( macro , '51676101935731' , 24 , '51676101935755' ) ; +test( macro , '-51676101935731' , 24 , '-51676101935707' ) ; +test( macro , '51676101935731' , -24 , '51676101935707' ) ; +test( macro , '-51676101935731' , -24 , '-51676101935755' ) ; +test( macro , '51676101935731' , 27 , '51676101935758' ) ; +test( macro , '-51676101935731' , 27 , '-51676101935704' ) ; +test( macro , '51676101935731' , -27 , '51676101935704' ) ; +test( macro , '-51676101935731' , -27 , '-51676101935758' ) ; +test( macro , '51676101935731' , 29 , '51676101935760' ) ; +test( macro , '-51676101935731' , 29 , '-51676101935702' ) ; +test( macro , '51676101935731' , -29 , '51676101935702' ) ; +test( macro , '-51676101935731' , -29 , '-51676101935760' ) ; +test( macro , '51676101935731' , 1234 , '51676101936965' ) ; +test( macro , '-51676101935731' , 1234 , '-51676101934497' ) ; +test( macro , '51676101935731' , -1234 , '51676101934497' ) ; +test( macro , '-51676101935731' , -1234 , '-51676101936965' ) ; +test( macro , '51676101935731' , 5678 , '51676101941409' ) ; +test( macro , '-51676101935731' , 5678 , '-51676101930053' ) ; +test( macro , '51676101935731' , -5678 , '51676101930053' ) ; +test( macro , '-51676101935731' , -5678 , '-51676101941409' ) ; +test( macro , '51676101935731' , 1073741824 , '51677175677555' ) ; +test( macro , '-51676101935731' , 1073741824 , '-51675028193907' ) ; +test( macro , '51676101935731' , -1073741824 , '51675028193907' ) ; +test( macro , '-51676101935731' , -1073741824 , '-51677175677555' ) ; +test( macro , '51676101935731' , 51676101935731 , '103352203871462' ) ; +test( macro , '-51676101935731' , 51676101935731 , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '-103352203871462' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770250' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , -1 , '717897987691852588770248' ) ; +test( macro , '-717897987691852588770249' , -1 , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , 3 , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , 3 , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , -3 , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , -3 , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , 7 , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , 7 , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , -7 , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , -7 , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , 9 , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , 9 , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , -9 , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , -9 , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , 11 , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , 11 , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , -11 , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , -11 , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , 17 , '717897987691852588770266' ) ; +test( macro , '-717897987691852588770249' , 17 , '-717897987691852588770232' ) ; +test( macro , '717897987691852588770249' , -17 , '717897987691852588770232' ) ; +test( macro , '-717897987691852588770249' , -17 , '-717897987691852588770266' ) ; +test( macro , '717897987691852588770249' , 22 , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , 22 , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , -22 , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , -22 , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , 24 , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , 24 , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , -24 , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , -24 , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , 27 , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , 27 , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , -27 , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , -27 , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , 29 , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , 29 , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , -29 , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , -29 , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , 1234 , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , -1234 , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , 5678 , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , -5678 , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '717897987691853662512073' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '717897987691851515028425' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-717897987743528690705980' ) ; diff --git a/test/src/integer/arithmetic/div.js b/test/src/integer/arithmetic/div.js index 2fbc6d7..fbf0e01 100644 --- a/test/src/integer/arithmetic/div.js +++ b/test/src/integer/arithmetic/div.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} / ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `div(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; test( macro , '-1' , '-1' , '1' ) ; +test( macro , '1' , '3' , '0' ) ; +test( macro , '-1' , '3' , '-1' ) ; +test( macro , '1' , '-3' , '-1' ) ; +test( macro , '-1' , '-3' , '0' ) ; +test( macro , '1' , '7' , '0' ) ; +test( macro , '-1' , '7' , '-1' ) ; +test( macro , '1' , '-7' , '-1' ) ; +test( macro , '-1' , '-7' , '0' ) ; +test( macro , '1' , '9' , '0' ) ; +test( macro , '-1' , '9' , '-1' ) ; +test( macro , '1' , '-9' , '-1' ) ; +test( macro , '-1' , '-9' , '0' ) ; +test( macro , '1' , '11' , '0' ) ; +test( macro , '-1' , '11' , '-1' ) ; +test( macro , '1' , '-11' , '-1' ) ; +test( macro , '-1' , '-11' , '0' ) ; test( macro , '1' , '17' , '0' ) ; test( macro , '-1' , '17' , '-1' ) ; test( macro , '1' , '-17' , '-1' ) ; test( macro , '-1' , '-17' , '0' ) ; -test( macro , '1' , '51676101935731' , '0' ) ; -test( macro , '-1' , '51676101935731' , '-1' ) ; -test( macro , '1' , '-51676101935731' , '-1' ) ; -test( macro , '-1' , '-51676101935731' , '0' ) ; +test( macro , '1' , '22' , '0' ) ; +test( macro , '-1' , '22' , '-1' ) ; +test( macro , '1' , '-22' , '-1' ) ; +test( macro , '-1' , '-22' , '0' ) ; +test( macro , '1' , '24' , '0' ) ; +test( macro , '-1' , '24' , '-1' ) ; +test( macro , '1' , '-24' , '-1' ) ; +test( macro , '-1' , '-24' , '0' ) ; +test( macro , '1' , '27' , '0' ) ; +test( macro , '-1' , '27' , '-1' ) ; +test( macro , '1' , '-27' , '-1' ) ; +test( macro , '-1' , '-27' , '0' ) ; +test( macro , '1' , '29' , '0' ) ; +test( macro , '-1' , '29' , '-1' ) ; +test( macro , '1' , '-29' , '-1' ) ; +test( macro , '-1' , '-29' , '0' ) ; +test( macro , '1' , '1234' , '0' ) ; +test( macro , '-1' , '1234' , '-1' ) ; +test( macro , '1' , '-1234' , '-1' ) ; +test( macro , '-1' , '-1234' , '0' ) ; +test( macro , '1' , '5678' , '0' ) ; +test( macro , '-1' , '5678' , '-1' ) ; +test( macro , '1' , '-5678' , '-1' ) ; +test( macro , '-1' , '-5678' , '0' ) ; test( macro , '1' , '1073741824' , '0' ) ; test( macro , '-1' , '1073741824' , '-1' ) ; test( macro , '1' , '-1073741824' , '-1' ) ; test( macro , '-1' , '-1073741824' , '0' ) ; +test( macro , '1' , '51676101935731' , '0' ) ; +test( macro , '-1' , '51676101935731' , '-1' ) ; +test( macro , '1' , '-51676101935731' , '-1' ) ; +test( macro , '-1' , '-51676101935731' , '0' ) ; test( macro , '1' , '717897987691852588770249' , '0' ) ; test( macro , '-1' , '717897987691852588770249' , '-1' ) ; test( macro , '1' , '-717897987691852588770249' , '-1' ) ; test( macro , '-1' , '-717897987691852588770249' , '0' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '-1' , '-3' ) ; +test( macro , '-3' , '-1' , '3' ) ; +test( macro , '3' , '3' , '1' ) ; +test( macro , '-3' , '3' , '-1' ) ; +test( macro , '3' , '-3' , '-1' ) ; +test( macro , '-3' , '-3' , '1' ) ; +test( macro , '3' , '7' , '0' ) ; +test( macro , '-3' , '7' , '-1' ) ; +test( macro , '3' , '-7' , '-1' ) ; +test( macro , '-3' , '-7' , '0' ) ; +test( macro , '3' , '9' , '0' ) ; +test( macro , '-3' , '9' , '-1' ) ; +test( macro , '3' , '-9' , '-1' ) ; +test( macro , '-3' , '-9' , '0' ) ; +test( macro , '3' , '11' , '0' ) ; +test( macro , '-3' , '11' , '-1' ) ; +test( macro , '3' , '-11' , '-1' ) ; +test( macro , '-3' , '-11' , '0' ) ; +test( macro , '3' , '17' , '0' ) ; +test( macro , '-3' , '17' , '-1' ) ; +test( macro , '3' , '-17' , '-1' ) ; +test( macro , '-3' , '-17' , '0' ) ; +test( macro , '3' , '22' , '0' ) ; +test( macro , '-3' , '22' , '-1' ) ; +test( macro , '3' , '-22' , '-1' ) ; +test( macro , '-3' , '-22' , '0' ) ; +test( macro , '3' , '24' , '0' ) ; +test( macro , '-3' , '24' , '-1' ) ; +test( macro , '3' , '-24' , '-1' ) ; +test( macro , '-3' , '-24' , '0' ) ; +test( macro , '3' , '27' , '0' ) ; +test( macro , '-3' , '27' , '-1' ) ; +test( macro , '3' , '-27' , '-1' ) ; +test( macro , '-3' , '-27' , '0' ) ; +test( macro , '3' , '29' , '0' ) ; +test( macro , '-3' , '29' , '-1' ) ; +test( macro , '3' , '-29' , '-1' ) ; +test( macro , '-3' , '-29' , '0' ) ; +test( macro , '3' , '1234' , '0' ) ; +test( macro , '-3' , '1234' , '-1' ) ; +test( macro , '3' , '-1234' , '-1' ) ; +test( macro , '-3' , '-1234' , '0' ) ; +test( macro , '3' , '5678' , '0' ) ; +test( macro , '-3' , '5678' , '-1' ) ; +test( macro , '3' , '-5678' , '-1' ) ; +test( macro , '-3' , '-5678' , '0' ) ; +test( macro , '3' , '1073741824' , '0' ) ; +test( macro , '-3' , '1073741824' , '-1' ) ; +test( macro , '3' , '-1073741824' , '-1' ) ; +test( macro , '-3' , '-1073741824' , '0' ) ; +test( macro , '3' , '51676101935731' , '0' ) ; +test( macro , '-3' , '51676101935731' , '-1' ) ; +test( macro , '3' , '-51676101935731' , '-1' ) ; +test( macro , '-3' , '-51676101935731' , '0' ) ; +test( macro , '3' , '717897987691852588770249' , '0' ) ; +test( macro , '-3' , '717897987691852588770249' , '-1' ) ; +test( macro , '3' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-3' , '-717897987691852588770249' , '0' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '-1' , '-7' ) ; +test( macro , '-7' , '-1' , '7' ) ; +test( macro , '7' , '3' , '2' ) ; +test( macro , '-7' , '3' , '-3' ) ; +test( macro , '7' , '-3' , '-3' ) ; +test( macro , '-7' , '-3' , '2' ) ; +test( macro , '7' , '7' , '1' ) ; +test( macro , '-7' , '7' , '-1' ) ; +test( macro , '7' , '-7' , '-1' ) ; +test( macro , '-7' , '-7' , '1' ) ; +test( macro , '7' , '9' , '0' ) ; +test( macro , '-7' , '9' , '-1' ) ; +test( macro , '7' , '-9' , '-1' ) ; +test( macro , '-7' , '-9' , '0' ) ; +test( macro , '7' , '11' , '0' ) ; +test( macro , '-7' , '11' , '-1' ) ; +test( macro , '7' , '-11' , '-1' ) ; +test( macro , '-7' , '-11' , '0' ) ; +test( macro , '7' , '17' , '0' ) ; +test( macro , '-7' , '17' , '-1' ) ; +test( macro , '7' , '-17' , '-1' ) ; +test( macro , '-7' , '-17' , '0' ) ; +test( macro , '7' , '22' , '0' ) ; +test( macro , '-7' , '22' , '-1' ) ; +test( macro , '7' , '-22' , '-1' ) ; +test( macro , '-7' , '-22' , '0' ) ; +test( macro , '7' , '24' , '0' ) ; +test( macro , '-7' , '24' , '-1' ) ; +test( macro , '7' , '-24' , '-1' ) ; +test( macro , '-7' , '-24' , '0' ) ; +test( macro , '7' , '27' , '0' ) ; +test( macro , '-7' , '27' , '-1' ) ; +test( macro , '7' , '-27' , '-1' ) ; +test( macro , '-7' , '-27' , '0' ) ; +test( macro , '7' , '29' , '0' ) ; +test( macro , '-7' , '29' , '-1' ) ; +test( macro , '7' , '-29' , '-1' ) ; +test( macro , '-7' , '-29' , '0' ) ; +test( macro , '7' , '1234' , '0' ) ; +test( macro , '-7' , '1234' , '-1' ) ; +test( macro , '7' , '-1234' , '-1' ) ; +test( macro , '-7' , '-1234' , '0' ) ; +test( macro , '7' , '5678' , '0' ) ; +test( macro , '-7' , '5678' , '-1' ) ; +test( macro , '7' , '-5678' , '-1' ) ; +test( macro , '-7' , '-5678' , '0' ) ; +test( macro , '7' , '1073741824' , '0' ) ; +test( macro , '-7' , '1073741824' , '-1' ) ; +test( macro , '7' , '-1073741824' , '-1' ) ; +test( macro , '-7' , '-1073741824' , '0' ) ; +test( macro , '7' , '51676101935731' , '0' ) ; +test( macro , '-7' , '51676101935731' , '-1' ) ; +test( macro , '7' , '-51676101935731' , '-1' ) ; +test( macro , '-7' , '-51676101935731' , '0' ) ; +test( macro , '7' , '717897987691852588770249' , '0' ) ; +test( macro , '-7' , '717897987691852588770249' , '-1' ) ; +test( macro , '7' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-7' , '-717897987691852588770249' , '0' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '-1' , '-9' ) ; +test( macro , '-9' , '-1' , '9' ) ; +test( macro , '9' , '3' , '3' ) ; +test( macro , '-9' , '3' , '-3' ) ; +test( macro , '9' , '-3' , '-3' ) ; +test( macro , '-9' , '-3' , '3' ) ; +test( macro , '9' , '7' , '1' ) ; +test( macro , '-9' , '7' , '-2' ) ; +test( macro , '9' , '-7' , '-2' ) ; +test( macro , '-9' , '-7' , '1' ) ; +test( macro , '9' , '9' , '1' ) ; +test( macro , '-9' , '9' , '-1' ) ; +test( macro , '9' , '-9' , '-1' ) ; +test( macro , '-9' , '-9' , '1' ) ; +test( macro , '9' , '11' , '0' ) ; +test( macro , '-9' , '11' , '-1' ) ; +test( macro , '9' , '-11' , '-1' ) ; +test( macro , '-9' , '-11' , '0' ) ; +test( macro , '9' , '17' , '0' ) ; +test( macro , '-9' , '17' , '-1' ) ; +test( macro , '9' , '-17' , '-1' ) ; +test( macro , '-9' , '-17' , '0' ) ; +test( macro , '9' , '22' , '0' ) ; +test( macro , '-9' , '22' , '-1' ) ; +test( macro , '9' , '-22' , '-1' ) ; +test( macro , '-9' , '-22' , '0' ) ; +test( macro , '9' , '24' , '0' ) ; +test( macro , '-9' , '24' , '-1' ) ; +test( macro , '9' , '-24' , '-1' ) ; +test( macro , '-9' , '-24' , '0' ) ; +test( macro , '9' , '27' , '0' ) ; +test( macro , '-9' , '27' , '-1' ) ; +test( macro , '9' , '-27' , '-1' ) ; +test( macro , '-9' , '-27' , '0' ) ; +test( macro , '9' , '29' , '0' ) ; +test( macro , '-9' , '29' , '-1' ) ; +test( macro , '9' , '-29' , '-1' ) ; +test( macro , '-9' , '-29' , '0' ) ; +test( macro , '9' , '1234' , '0' ) ; +test( macro , '-9' , '1234' , '-1' ) ; +test( macro , '9' , '-1234' , '-1' ) ; +test( macro , '-9' , '-1234' , '0' ) ; +test( macro , '9' , '5678' , '0' ) ; +test( macro , '-9' , '5678' , '-1' ) ; +test( macro , '9' , '-5678' , '-1' ) ; +test( macro , '-9' , '-5678' , '0' ) ; +test( macro , '9' , '1073741824' , '0' ) ; +test( macro , '-9' , '1073741824' , '-1' ) ; +test( macro , '9' , '-1073741824' , '-1' ) ; +test( macro , '-9' , '-1073741824' , '0' ) ; +test( macro , '9' , '51676101935731' , '0' ) ; +test( macro , '-9' , '51676101935731' , '-1' ) ; +test( macro , '9' , '-51676101935731' , '-1' ) ; +test( macro , '-9' , '-51676101935731' , '0' ) ; +test( macro , '9' , '717897987691852588770249' , '0' ) ; +test( macro , '-9' , '717897987691852588770249' , '-1' ) ; +test( macro , '9' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-9' , '-717897987691852588770249' , '0' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '-1' , '-11' ) ; +test( macro , '-11' , '-1' , '11' ) ; +test( macro , '11' , '3' , '3' ) ; +test( macro , '-11' , '3' , '-4' ) ; +test( macro , '11' , '-3' , '-4' ) ; +test( macro , '-11' , '-3' , '3' ) ; +test( macro , '11' , '7' , '1' ) ; +test( macro , '-11' , '7' , '-2' ) ; +test( macro , '11' , '-7' , '-2' ) ; +test( macro , '-11' , '-7' , '1' ) ; +test( macro , '11' , '9' , '1' ) ; +test( macro , '-11' , '9' , '-2' ) ; +test( macro , '11' , '-9' , '-2' ) ; +test( macro , '-11' , '-9' , '1' ) ; +test( macro , '11' , '11' , '1' ) ; +test( macro , '-11' , '11' , '-1' ) ; +test( macro , '11' , '-11' , '-1' ) ; +test( macro , '-11' , '-11' , '1' ) ; +test( macro , '11' , '17' , '0' ) ; +test( macro , '-11' , '17' , '-1' ) ; +test( macro , '11' , '-17' , '-1' ) ; +test( macro , '-11' , '-17' , '0' ) ; +test( macro , '11' , '22' , '0' ) ; +test( macro , '-11' , '22' , '-1' ) ; +test( macro , '11' , '-22' , '-1' ) ; +test( macro , '-11' , '-22' , '0' ) ; +test( macro , '11' , '24' , '0' ) ; +test( macro , '-11' , '24' , '-1' ) ; +test( macro , '11' , '-24' , '-1' ) ; +test( macro , '-11' , '-24' , '0' ) ; +test( macro , '11' , '27' , '0' ) ; +test( macro , '-11' , '27' , '-1' ) ; +test( macro , '11' , '-27' , '-1' ) ; +test( macro , '-11' , '-27' , '0' ) ; +test( macro , '11' , '29' , '0' ) ; +test( macro , '-11' , '29' , '-1' ) ; +test( macro , '11' , '-29' , '-1' ) ; +test( macro , '-11' , '-29' , '0' ) ; +test( macro , '11' , '1234' , '0' ) ; +test( macro , '-11' , '1234' , '-1' ) ; +test( macro , '11' , '-1234' , '-1' ) ; +test( macro , '-11' , '-1234' , '0' ) ; +test( macro , '11' , '5678' , '0' ) ; +test( macro , '-11' , '5678' , '-1' ) ; +test( macro , '11' , '-5678' , '-1' ) ; +test( macro , '-11' , '-5678' , '0' ) ; +test( macro , '11' , '1073741824' , '0' ) ; +test( macro , '-11' , '1073741824' , '-1' ) ; +test( macro , '11' , '-1073741824' , '-1' ) ; +test( macro , '-11' , '-1073741824' , '0' ) ; +test( macro , '11' , '51676101935731' , '0' ) ; +test( macro , '-11' , '51676101935731' , '-1' ) ; +test( macro , '11' , '-51676101935731' , '-1' ) ; +test( macro , '-11' , '-51676101935731' , '0' ) ; +test( macro , '11' , '717897987691852588770249' , '0' ) ; +test( macro , '-11' , '717897987691852588770249' , '-1' ) ; +test( macro , '11' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-11' , '-717897987691852588770249' , '0' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; test( macro , '-17' , '-1' , '17' ) ; +test( macro , '17' , '3' , '5' ) ; +test( macro , '-17' , '3' , '-6' ) ; +test( macro , '17' , '-3' , '-6' ) ; +test( macro , '-17' , '-3' , '5' ) ; +test( macro , '17' , '7' , '2' ) ; +test( macro , '-17' , '7' , '-3' ) ; +test( macro , '17' , '-7' , '-3' ) ; +test( macro , '-17' , '-7' , '2' ) ; +test( macro , '17' , '9' , '1' ) ; +test( macro , '-17' , '9' , '-2' ) ; +test( macro , '17' , '-9' , '-2' ) ; +test( macro , '-17' , '-9' , '1' ) ; +test( macro , '17' , '11' , '1' ) ; +test( macro , '-17' , '11' , '-2' ) ; +test( macro , '17' , '-11' , '-2' ) ; +test( macro , '-17' , '-11' , '1' ) ; test( macro , '17' , '17' , '1' ) ; test( macro , '-17' , '17' , '-1' ) ; test( macro , '17' , '-17' , '-1' ) ; test( macro , '-17' , '-17' , '1' ) ; -test( macro , '17' , '51676101935731' , '0' ) ; -test( macro , '-17' , '51676101935731' , '-1' ) ; -test( macro , '17' , '-51676101935731' , '-1' ) ; -test( macro , '-17' , '-51676101935731' , '0' ) ; +test( macro , '17' , '22' , '0' ) ; +test( macro , '-17' , '22' , '-1' ) ; +test( macro , '17' , '-22' , '-1' ) ; +test( macro , '-17' , '-22' , '0' ) ; +test( macro , '17' , '24' , '0' ) ; +test( macro , '-17' , '24' , '-1' ) ; +test( macro , '17' , '-24' , '-1' ) ; +test( macro , '-17' , '-24' , '0' ) ; +test( macro , '17' , '27' , '0' ) ; +test( macro , '-17' , '27' , '-1' ) ; +test( macro , '17' , '-27' , '-1' ) ; +test( macro , '-17' , '-27' , '0' ) ; +test( macro , '17' , '29' , '0' ) ; +test( macro , '-17' , '29' , '-1' ) ; +test( macro , '17' , '-29' , '-1' ) ; +test( macro , '-17' , '-29' , '0' ) ; +test( macro , '17' , '1234' , '0' ) ; +test( macro , '-17' , '1234' , '-1' ) ; +test( macro , '17' , '-1234' , '-1' ) ; +test( macro , '-17' , '-1234' , '0' ) ; +test( macro , '17' , '5678' , '0' ) ; +test( macro , '-17' , '5678' , '-1' ) ; +test( macro , '17' , '-5678' , '-1' ) ; +test( macro , '-17' , '-5678' , '0' ) ; test( macro , '17' , '1073741824' , '0' ) ; test( macro , '-17' , '1073741824' , '-1' ) ; test( macro , '17' , '-1073741824' , '-1' ) ; test( macro , '-17' , '-1073741824' , '0' ) ; +test( macro , '17' , '51676101935731' , '0' ) ; +test( macro , '-17' , '51676101935731' , '-1' ) ; +test( macro , '17' , '-51676101935731' , '-1' ) ; +test( macro , '-17' , '-51676101935731' , '0' ) ; test( macro , '17' , '717897987691852588770249' , '0' ) ; test( macro , '-17' , '717897987691852588770249' , '-1' ) ; test( macro , '17' , '-717897987691852588770249' , '-1' ) ; test( macro , '-17' , '-717897987691852588770249' , '0' ) ; -test( macro , '51676101935731' , '1' , '51676101935731' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; -test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; -test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; -test( macro , '51676101935731' , '17' , '3039770702101' ) ; -test( macro , '-51676101935731' , '17' , '-3039770702102' ) ; -test( macro , '51676101935731' , '-17' , '-3039770702102' ) ; -test( macro , '-51676101935731' , '-17' , '3039770702101' ) ; -test( macro , '51676101935731' , '51676101935731' , '1' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-1' ) ; -test( macro , '51676101935731' , '-51676101935731' , '-1' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '1' ) ; -test( macro , '51676101935731' , '1073741824' , '48127' ) ; -test( macro , '-51676101935731' , '1073741824' , '-48128' ) ; -test( macro , '51676101935731' , '-1073741824' , '-48128' ) ; -test( macro , '-51676101935731' , '-1073741824' , '48127' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '0' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-1' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-1' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '0' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '-1' , '-22' ) ; +test( macro , '-22' , '-1' , '22' ) ; +test( macro , '22' , '3' , '7' ) ; +test( macro , '-22' , '3' , '-8' ) ; +test( macro , '22' , '-3' , '-8' ) ; +test( macro , '-22' , '-3' , '7' ) ; +test( macro , '22' , '7' , '3' ) ; +test( macro , '-22' , '7' , '-4' ) ; +test( macro , '22' , '-7' , '-4' ) ; +test( macro , '-22' , '-7' , '3' ) ; +test( macro , '22' , '9' , '2' ) ; +test( macro , '-22' , '9' , '-3' ) ; +test( macro , '22' , '-9' , '-3' ) ; +test( macro , '-22' , '-9' , '2' ) ; +test( macro , '22' , '11' , '2' ) ; +test( macro , '-22' , '11' , '-2' ) ; +test( macro , '22' , '-11' , '-2' ) ; +test( macro , '-22' , '-11' , '2' ) ; +test( macro , '22' , '17' , '1' ) ; +test( macro , '-22' , '17' , '-2' ) ; +test( macro , '22' , '-17' , '-2' ) ; +test( macro , '-22' , '-17' , '1' ) ; +test( macro , '22' , '22' , '1' ) ; +test( macro , '-22' , '22' , '-1' ) ; +test( macro , '22' , '-22' , '-1' ) ; +test( macro , '-22' , '-22' , '1' ) ; +test( macro , '22' , '24' , '0' ) ; +test( macro , '-22' , '24' , '-1' ) ; +test( macro , '22' , '-24' , '-1' ) ; +test( macro , '-22' , '-24' , '0' ) ; +test( macro , '22' , '27' , '0' ) ; +test( macro , '-22' , '27' , '-1' ) ; +test( macro , '22' , '-27' , '-1' ) ; +test( macro , '-22' , '-27' , '0' ) ; +test( macro , '22' , '29' , '0' ) ; +test( macro , '-22' , '29' , '-1' ) ; +test( macro , '22' , '-29' , '-1' ) ; +test( macro , '-22' , '-29' , '0' ) ; +test( macro , '22' , '1234' , '0' ) ; +test( macro , '-22' , '1234' , '-1' ) ; +test( macro , '22' , '-1234' , '-1' ) ; +test( macro , '-22' , '-1234' , '0' ) ; +test( macro , '22' , '5678' , '0' ) ; +test( macro , '-22' , '5678' , '-1' ) ; +test( macro , '22' , '-5678' , '-1' ) ; +test( macro , '-22' , '-5678' , '0' ) ; +test( macro , '22' , '1073741824' , '0' ) ; +test( macro , '-22' , '1073741824' , '-1' ) ; +test( macro , '22' , '-1073741824' , '-1' ) ; +test( macro , '-22' , '-1073741824' , '0' ) ; +test( macro , '22' , '51676101935731' , '0' ) ; +test( macro , '-22' , '51676101935731' , '-1' ) ; +test( macro , '22' , '-51676101935731' , '-1' ) ; +test( macro , '-22' , '-51676101935731' , '0' ) ; +test( macro , '22' , '717897987691852588770249' , '0' ) ; +test( macro , '-22' , '717897987691852588770249' , '-1' ) ; +test( macro , '22' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-22' , '-717897987691852588770249' , '0' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '-1' , '-24' ) ; +test( macro , '-24' , '-1' , '24' ) ; +test( macro , '24' , '3' , '8' ) ; +test( macro , '-24' , '3' , '-8' ) ; +test( macro , '24' , '-3' , '-8' ) ; +test( macro , '-24' , '-3' , '8' ) ; +test( macro , '24' , '7' , '3' ) ; +test( macro , '-24' , '7' , '-4' ) ; +test( macro , '24' , '-7' , '-4' ) ; +test( macro , '-24' , '-7' , '3' ) ; +test( macro , '24' , '9' , '2' ) ; +test( macro , '-24' , '9' , '-3' ) ; +test( macro , '24' , '-9' , '-3' ) ; +test( macro , '-24' , '-9' , '2' ) ; +test( macro , '24' , '11' , '2' ) ; +test( macro , '-24' , '11' , '-3' ) ; +test( macro , '24' , '-11' , '-3' ) ; +test( macro , '-24' , '-11' , '2' ) ; +test( macro , '24' , '17' , '1' ) ; +test( macro , '-24' , '17' , '-2' ) ; +test( macro , '24' , '-17' , '-2' ) ; +test( macro , '-24' , '-17' , '1' ) ; +test( macro , '24' , '22' , '1' ) ; +test( macro , '-24' , '22' , '-2' ) ; +test( macro , '24' , '-22' , '-2' ) ; +test( macro , '-24' , '-22' , '1' ) ; +test( macro , '24' , '24' , '1' ) ; +test( macro , '-24' , '24' , '-1' ) ; +test( macro , '24' , '-24' , '-1' ) ; +test( macro , '-24' , '-24' , '1' ) ; +test( macro , '24' , '27' , '0' ) ; +test( macro , '-24' , '27' , '-1' ) ; +test( macro , '24' , '-27' , '-1' ) ; +test( macro , '-24' , '-27' , '0' ) ; +test( macro , '24' , '29' , '0' ) ; +test( macro , '-24' , '29' , '-1' ) ; +test( macro , '24' , '-29' , '-1' ) ; +test( macro , '-24' , '-29' , '0' ) ; +test( macro , '24' , '1234' , '0' ) ; +test( macro , '-24' , '1234' , '-1' ) ; +test( macro , '24' , '-1234' , '-1' ) ; +test( macro , '-24' , '-1234' , '0' ) ; +test( macro , '24' , '5678' , '0' ) ; +test( macro , '-24' , '5678' , '-1' ) ; +test( macro , '24' , '-5678' , '-1' ) ; +test( macro , '-24' , '-5678' , '0' ) ; +test( macro , '24' , '1073741824' , '0' ) ; +test( macro , '-24' , '1073741824' , '-1' ) ; +test( macro , '24' , '-1073741824' , '-1' ) ; +test( macro , '-24' , '-1073741824' , '0' ) ; +test( macro , '24' , '51676101935731' , '0' ) ; +test( macro , '-24' , '51676101935731' , '-1' ) ; +test( macro , '24' , '-51676101935731' , '-1' ) ; +test( macro , '-24' , '-51676101935731' , '0' ) ; +test( macro , '24' , '717897987691852588770249' , '0' ) ; +test( macro , '-24' , '717897987691852588770249' , '-1' ) ; +test( macro , '24' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-24' , '-717897987691852588770249' , '0' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '-1' , '-27' ) ; +test( macro , '-27' , '-1' , '27' ) ; +test( macro , '27' , '3' , '9' ) ; +test( macro , '-27' , '3' , '-9' ) ; +test( macro , '27' , '-3' , '-9' ) ; +test( macro , '-27' , '-3' , '9' ) ; +test( macro , '27' , '7' , '3' ) ; +test( macro , '-27' , '7' , '-4' ) ; +test( macro , '27' , '-7' , '-4' ) ; +test( macro , '-27' , '-7' , '3' ) ; +test( macro , '27' , '9' , '3' ) ; +test( macro , '-27' , '9' , '-3' ) ; +test( macro , '27' , '-9' , '-3' ) ; +test( macro , '-27' , '-9' , '3' ) ; +test( macro , '27' , '11' , '2' ) ; +test( macro , '-27' , '11' , '-3' ) ; +test( macro , '27' , '-11' , '-3' ) ; +test( macro , '-27' , '-11' , '2' ) ; +test( macro , '27' , '17' , '1' ) ; +test( macro , '-27' , '17' , '-2' ) ; +test( macro , '27' , '-17' , '-2' ) ; +test( macro , '-27' , '-17' , '1' ) ; +test( macro , '27' , '22' , '1' ) ; +test( macro , '-27' , '22' , '-2' ) ; +test( macro , '27' , '-22' , '-2' ) ; +test( macro , '-27' , '-22' , '1' ) ; +test( macro , '27' , '24' , '1' ) ; +test( macro , '-27' , '24' , '-2' ) ; +test( macro , '27' , '-24' , '-2' ) ; +test( macro , '-27' , '-24' , '1' ) ; +test( macro , '27' , '27' , '1' ) ; +test( macro , '-27' , '27' , '-1' ) ; +test( macro , '27' , '-27' , '-1' ) ; +test( macro , '-27' , '-27' , '1' ) ; +test( macro , '27' , '29' , '0' ) ; +test( macro , '-27' , '29' , '-1' ) ; +test( macro , '27' , '-29' , '-1' ) ; +test( macro , '-27' , '-29' , '0' ) ; +test( macro , '27' , '1234' , '0' ) ; +test( macro , '-27' , '1234' , '-1' ) ; +test( macro , '27' , '-1234' , '-1' ) ; +test( macro , '-27' , '-1234' , '0' ) ; +test( macro , '27' , '5678' , '0' ) ; +test( macro , '-27' , '5678' , '-1' ) ; +test( macro , '27' , '-5678' , '-1' ) ; +test( macro , '-27' , '-5678' , '0' ) ; +test( macro , '27' , '1073741824' , '0' ) ; +test( macro , '-27' , '1073741824' , '-1' ) ; +test( macro , '27' , '-1073741824' , '-1' ) ; +test( macro , '-27' , '-1073741824' , '0' ) ; +test( macro , '27' , '51676101935731' , '0' ) ; +test( macro , '-27' , '51676101935731' , '-1' ) ; +test( macro , '27' , '-51676101935731' , '-1' ) ; +test( macro , '-27' , '-51676101935731' , '0' ) ; +test( macro , '27' , '717897987691852588770249' , '0' ) ; +test( macro , '-27' , '717897987691852588770249' , '-1' ) ; +test( macro , '27' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-27' , '-717897987691852588770249' , '0' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '-1' , '-29' ) ; +test( macro , '-29' , '-1' , '29' ) ; +test( macro , '29' , '3' , '9' ) ; +test( macro , '-29' , '3' , '-10' ) ; +test( macro , '29' , '-3' , '-10' ) ; +test( macro , '-29' , '-3' , '9' ) ; +test( macro , '29' , '7' , '4' ) ; +test( macro , '-29' , '7' , '-5' ) ; +test( macro , '29' , '-7' , '-5' ) ; +test( macro , '-29' , '-7' , '4' ) ; +test( macro , '29' , '9' , '3' ) ; +test( macro , '-29' , '9' , '-4' ) ; +test( macro , '29' , '-9' , '-4' ) ; +test( macro , '-29' , '-9' , '3' ) ; +test( macro , '29' , '11' , '2' ) ; +test( macro , '-29' , '11' , '-3' ) ; +test( macro , '29' , '-11' , '-3' ) ; +test( macro , '-29' , '-11' , '2' ) ; +test( macro , '29' , '17' , '1' ) ; +test( macro , '-29' , '17' , '-2' ) ; +test( macro , '29' , '-17' , '-2' ) ; +test( macro , '-29' , '-17' , '1' ) ; +test( macro , '29' , '22' , '1' ) ; +test( macro , '-29' , '22' , '-2' ) ; +test( macro , '29' , '-22' , '-2' ) ; +test( macro , '-29' , '-22' , '1' ) ; +test( macro , '29' , '24' , '1' ) ; +test( macro , '-29' , '24' , '-2' ) ; +test( macro , '29' , '-24' , '-2' ) ; +test( macro , '-29' , '-24' , '1' ) ; +test( macro , '29' , '27' , '1' ) ; +test( macro , '-29' , '27' , '-2' ) ; +test( macro , '29' , '-27' , '-2' ) ; +test( macro , '-29' , '-27' , '1' ) ; +test( macro , '29' , '29' , '1' ) ; +test( macro , '-29' , '29' , '-1' ) ; +test( macro , '29' , '-29' , '-1' ) ; +test( macro , '-29' , '-29' , '1' ) ; +test( macro , '29' , '1234' , '0' ) ; +test( macro , '-29' , '1234' , '-1' ) ; +test( macro , '29' , '-1234' , '-1' ) ; +test( macro , '-29' , '-1234' , '0' ) ; +test( macro , '29' , '5678' , '0' ) ; +test( macro , '-29' , '5678' , '-1' ) ; +test( macro , '29' , '-5678' , '-1' ) ; +test( macro , '-29' , '-5678' , '0' ) ; +test( macro , '29' , '1073741824' , '0' ) ; +test( macro , '-29' , '1073741824' , '-1' ) ; +test( macro , '29' , '-1073741824' , '-1' ) ; +test( macro , '-29' , '-1073741824' , '0' ) ; +test( macro , '29' , '51676101935731' , '0' ) ; +test( macro , '-29' , '51676101935731' , '-1' ) ; +test( macro , '29' , '-51676101935731' , '-1' ) ; +test( macro , '-29' , '-51676101935731' , '0' ) ; +test( macro , '29' , '717897987691852588770249' , '0' ) ; +test( macro , '-29' , '717897987691852588770249' , '-1' ) ; +test( macro , '29' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-29' , '-717897987691852588770249' , '0' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '-1' , '-1234' ) ; +test( macro , '-1234' , '-1' , '1234' ) ; +test( macro , '1234' , '3' , '411' ) ; +test( macro , '-1234' , '3' , '-412' ) ; +test( macro , '1234' , '-3' , '-412' ) ; +test( macro , '-1234' , '-3' , '411' ) ; +test( macro , '1234' , '7' , '176' ) ; +test( macro , '-1234' , '7' , '-177' ) ; +test( macro , '1234' , '-7' , '-177' ) ; +test( macro , '-1234' , '-7' , '176' ) ; +test( macro , '1234' , '9' , '137' ) ; +test( macro , '-1234' , '9' , '-138' ) ; +test( macro , '1234' , '-9' , '-138' ) ; +test( macro , '-1234' , '-9' , '137' ) ; +test( macro , '1234' , '11' , '112' ) ; +test( macro , '-1234' , '11' , '-113' ) ; +test( macro , '1234' , '-11' , '-113' ) ; +test( macro , '-1234' , '-11' , '112' ) ; +test( macro , '1234' , '17' , '72' ) ; +test( macro , '-1234' , '17' , '-73' ) ; +test( macro , '1234' , '-17' , '-73' ) ; +test( macro , '-1234' , '-17' , '72' ) ; +test( macro , '1234' , '22' , '56' ) ; +test( macro , '-1234' , '22' , '-57' ) ; +test( macro , '1234' , '-22' , '-57' ) ; +test( macro , '-1234' , '-22' , '56' ) ; +test( macro , '1234' , '24' , '51' ) ; +test( macro , '-1234' , '24' , '-52' ) ; +test( macro , '1234' , '-24' , '-52' ) ; +test( macro , '-1234' , '-24' , '51' ) ; +test( macro , '1234' , '27' , '45' ) ; +test( macro , '-1234' , '27' , '-46' ) ; +test( macro , '1234' , '-27' , '-46' ) ; +test( macro , '-1234' , '-27' , '45' ) ; +test( macro , '1234' , '29' , '42' ) ; +test( macro , '-1234' , '29' , '-43' ) ; +test( macro , '1234' , '-29' , '-43' ) ; +test( macro , '-1234' , '-29' , '42' ) ; +test( macro , '1234' , '1234' , '1' ) ; +test( macro , '-1234' , '1234' , '-1' ) ; +test( macro , '1234' , '-1234' , '-1' ) ; +test( macro , '-1234' , '-1234' , '1' ) ; +test( macro , '1234' , '5678' , '0' ) ; +test( macro , '-1234' , '5678' , '-1' ) ; +test( macro , '1234' , '-5678' , '-1' ) ; +test( macro , '-1234' , '-5678' , '0' ) ; +test( macro , '1234' , '1073741824' , '0' ) ; +test( macro , '-1234' , '1073741824' , '-1' ) ; +test( macro , '1234' , '-1073741824' , '-1' ) ; +test( macro , '-1234' , '-1073741824' , '0' ) ; +test( macro , '1234' , '51676101935731' , '0' ) ; +test( macro , '-1234' , '51676101935731' , '-1' ) ; +test( macro , '1234' , '-51676101935731' , '-1' ) ; +test( macro , '-1234' , '-51676101935731' , '0' ) ; +test( macro , '1234' , '717897987691852588770249' , '0' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-1' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '0' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '-1' , '-5678' ) ; +test( macro , '-5678' , '-1' , '5678' ) ; +test( macro , '5678' , '3' , '1892' ) ; +test( macro , '-5678' , '3' , '-1893' ) ; +test( macro , '5678' , '-3' , '-1893' ) ; +test( macro , '-5678' , '-3' , '1892' ) ; +test( macro , '5678' , '7' , '811' ) ; +test( macro , '-5678' , '7' , '-812' ) ; +test( macro , '5678' , '-7' , '-812' ) ; +test( macro , '-5678' , '-7' , '811' ) ; +test( macro , '5678' , '9' , '630' ) ; +test( macro , '-5678' , '9' , '-631' ) ; +test( macro , '5678' , '-9' , '-631' ) ; +test( macro , '-5678' , '-9' , '630' ) ; +test( macro , '5678' , '11' , '516' ) ; +test( macro , '-5678' , '11' , '-517' ) ; +test( macro , '5678' , '-11' , '-517' ) ; +test( macro , '-5678' , '-11' , '516' ) ; +test( macro , '5678' , '17' , '334' ) ; +test( macro , '-5678' , '17' , '-334' ) ; +test( macro , '5678' , '-17' , '-334' ) ; +test( macro , '-5678' , '-17' , '334' ) ; +test( macro , '5678' , '22' , '258' ) ; +test( macro , '-5678' , '22' , '-259' ) ; +test( macro , '5678' , '-22' , '-259' ) ; +test( macro , '-5678' , '-22' , '258' ) ; +test( macro , '5678' , '24' , '236' ) ; +test( macro , '-5678' , '24' , '-237' ) ; +test( macro , '5678' , '-24' , '-237' ) ; +test( macro , '-5678' , '-24' , '236' ) ; +test( macro , '5678' , '27' , '210' ) ; +test( macro , '-5678' , '27' , '-211' ) ; +test( macro , '5678' , '-27' , '-211' ) ; +test( macro , '-5678' , '-27' , '210' ) ; +test( macro , '5678' , '29' , '195' ) ; +test( macro , '-5678' , '29' , '-196' ) ; +test( macro , '5678' , '-29' , '-196' ) ; +test( macro , '-5678' , '-29' , '195' ) ; +test( macro , '5678' , '1234' , '4' ) ; +test( macro , '-5678' , '1234' , '-5' ) ; +test( macro , '5678' , '-1234' , '-5' ) ; +test( macro , '-5678' , '-1234' , '4' ) ; +test( macro , '5678' , '5678' , '1' ) ; +test( macro , '-5678' , '5678' , '-1' ) ; +test( macro , '5678' , '-5678' , '-1' ) ; +test( macro , '-5678' , '-5678' , '1' ) ; +test( macro , '5678' , '1073741824' , '0' ) ; +test( macro , '-5678' , '1073741824' , '-1' ) ; +test( macro , '5678' , '-1073741824' , '-1' ) ; +test( macro , '-5678' , '-1073741824' , '0' ) ; +test( macro , '5678' , '51676101935731' , '0' ) ; +test( macro , '-5678' , '51676101935731' , '-1' ) ; +test( macro , '5678' , '-51676101935731' , '-1' ) ; +test( macro , '-5678' , '-51676101935731' , '0' ) ; +test( macro , '5678' , '717897987691852588770249' , '0' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-1' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '0' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; test( macro , '-1073741824' , '-1' , '1073741824' ) ; +test( macro , '1073741824' , '3' , '357913941' ) ; +test( macro , '-1073741824' , '3' , '-357913942' ) ; +test( macro , '1073741824' , '-3' , '-357913942' ) ; +test( macro , '-1073741824' , '-3' , '357913941' ) ; +test( macro , '1073741824' , '7' , '153391689' ) ; +test( macro , '-1073741824' , '7' , '-153391690' ) ; +test( macro , '1073741824' , '-7' , '-153391690' ) ; +test( macro , '-1073741824' , '-7' , '153391689' ) ; +test( macro , '1073741824' , '9' , '119304647' ) ; +test( macro , '-1073741824' , '9' , '-119304648' ) ; +test( macro , '1073741824' , '-9' , '-119304648' ) ; +test( macro , '-1073741824' , '-9' , '119304647' ) ; +test( macro , '1073741824' , '11' , '97612893' ) ; +test( macro , '-1073741824' , '11' , '-97612894' ) ; +test( macro , '1073741824' , '-11' , '-97612894' ) ; +test( macro , '-1073741824' , '-11' , '97612893' ) ; test( macro , '1073741824' , '17' , '63161283' ) ; test( macro , '-1073741824' , '17' , '-63161284' ) ; test( macro , '1073741824' , '-17' , '-63161284' ) ; test( macro , '-1073741824' , '-17' , '63161283' ) ; -test( macro , '1073741824' , '51676101935731' , '0' ) ; -test( macro , '-1073741824' , '51676101935731' , '-1' ) ; -test( macro , '1073741824' , '-51676101935731' , '-1' ) ; -test( macro , '-1073741824' , '-51676101935731' , '0' ) ; +test( macro , '1073741824' , '22' , '48806446' ) ; +test( macro , '-1073741824' , '22' , '-48806447' ) ; +test( macro , '1073741824' , '-22' , '-48806447' ) ; +test( macro , '-1073741824' , '-22' , '48806446' ) ; +test( macro , '1073741824' , '24' , '44739242' ) ; +test( macro , '-1073741824' , '24' , '-44739243' ) ; +test( macro , '1073741824' , '-24' , '-44739243' ) ; +test( macro , '-1073741824' , '-24' , '44739242' ) ; +test( macro , '1073741824' , '27' , '39768215' ) ; +test( macro , '-1073741824' , '27' , '-39768216' ) ; +test( macro , '1073741824' , '-27' , '-39768216' ) ; +test( macro , '-1073741824' , '-27' , '39768215' ) ; +test( macro , '1073741824' , '29' , '37025580' ) ; +test( macro , '-1073741824' , '29' , '-37025581' ) ; +test( macro , '1073741824' , '-29' , '-37025581' ) ; +test( macro , '-1073741824' , '-29' , '37025580' ) ; +test( macro , '1073741824' , '1234' , '870131' ) ; +test( macro , '-1073741824' , '1234' , '-870132' ) ; +test( macro , '1073741824' , '-1234' , '-870132' ) ; +test( macro , '-1073741824' , '-1234' , '870131' ) ; +test( macro , '1073741824' , '5678' , '189105' ) ; +test( macro , '-1073741824' , '5678' , '-189106' ) ; +test( macro , '1073741824' , '-5678' , '-189106' ) ; +test( macro , '-1073741824' , '-5678' , '189105' ) ; test( macro , '1073741824' , '1073741824' , '1' ) ; test( macro , '-1073741824' , '1073741824' , '-1' ) ; test( macro , '1073741824' , '-1073741824' , '-1' ) ; test( macro , '-1073741824' , '-1073741824' , '1' ) ; +test( macro , '1073741824' , '51676101935731' , '0' ) ; +test( macro , '-1073741824' , '51676101935731' , '-1' ) ; +test( macro , '1073741824' , '-51676101935731' , '-1' ) ; +test( macro , '-1073741824' , '-51676101935731' , '0' ) ; test( macro , '1073741824' , '717897987691852588770249' , '0' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-1' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-1' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '0' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; +test( macro , '51676101935731' , '3' , '17225367311910' ) ; +test( macro , '-51676101935731' , '3' , '-17225367311911' ) ; +test( macro , '51676101935731' , '-3' , '-17225367311911' ) ; +test( macro , '-51676101935731' , '-3' , '17225367311910' ) ; +test( macro , '51676101935731' , '7' , '7382300276533' ) ; +test( macro , '-51676101935731' , '7' , '-7382300276533' ) ; +test( macro , '51676101935731' , '-7' , '-7382300276533' ) ; +test( macro , '-51676101935731' , '-7' , '7382300276533' ) ; +test( macro , '51676101935731' , '9' , '5741789103970' ) ; +test( macro , '-51676101935731' , '9' , '-5741789103971' ) ; +test( macro , '51676101935731' , '-9' , '-5741789103971' ) ; +test( macro , '-51676101935731' , '-9' , '5741789103970' ) ; +test( macro , '51676101935731' , '11' , '4697827448702' ) ; +test( macro , '-51676101935731' , '11' , '-4697827448703' ) ; +test( macro , '51676101935731' , '-11' , '-4697827448703' ) ; +test( macro , '-51676101935731' , '-11' , '4697827448702' ) ; +test( macro , '51676101935731' , '17' , '3039770702101' ) ; +test( macro , '-51676101935731' , '17' , '-3039770702102' ) ; +test( macro , '51676101935731' , '-17' , '-3039770702102' ) ; +test( macro , '-51676101935731' , '-17' , '3039770702101' ) ; +test( macro , '51676101935731' , '22' , '2348913724351' ) ; +test( macro , '-51676101935731' , '22' , '-2348913724352' ) ; +test( macro , '51676101935731' , '-22' , '-2348913724352' ) ; +test( macro , '-51676101935731' , '-22' , '2348913724351' ) ; +test( macro , '51676101935731' , '24' , '2153170913988' ) ; +test( macro , '-51676101935731' , '24' , '-2153170913989' ) ; +test( macro , '51676101935731' , '-24' , '-2153170913989' ) ; +test( macro , '-51676101935731' , '-24' , '2153170913988' ) ; +test( macro , '51676101935731' , '27' , '1913929701323' ) ; +test( macro , '-51676101935731' , '27' , '-1913929701324' ) ; +test( macro , '51676101935731' , '-27' , '-1913929701324' ) ; +test( macro , '-51676101935731' , '-27' , '1913929701323' ) ; +test( macro , '51676101935731' , '29' , '1781934549507' ) ; +test( macro , '-51676101935731' , '29' , '-1781934549508' ) ; +test( macro , '51676101935731' , '-29' , '-1781934549508' ) ; +test( macro , '-51676101935731' , '-29' , '1781934549507' ) ; +test( macro , '51676101935731' , '1234' , '41876905944' ) ; +test( macro , '-51676101935731' , '1234' , '-41876905945' ) ; +test( macro , '51676101935731' , '-1234' , '-41876905945' ) ; +test( macro , '-51676101935731' , '-1234' , '41876905944' ) ; +test( macro , '51676101935731' , '5678' , '9101109886' ) ; +test( macro , '-51676101935731' , '5678' , '-9101109887' ) ; +test( macro , '51676101935731' , '-5678' , '-9101109887' ) ; +test( macro , '-51676101935731' , '-5678' , '9101109886' ) ; +test( macro , '51676101935731' , '1073741824' , '48127' ) ; +test( macro , '-51676101935731' , '1073741824' , '-48128' ) ; +test( macro , '51676101935731' , '-1073741824' , '-48128' ) ; +test( macro , '-51676101935731' , '-1073741824' , '48127' ) ; +test( macro , '51676101935731' , '51676101935731' , '1' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-1' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-1' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '1' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '0' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-1' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , '3' , '-239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , '-3' , '-239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , '-3' , '239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , '7' , '102556855384550369824321' ) ; +test( macro , '-717897987691852588770249' , '7' , '-102556855384550369824322' ) ; +test( macro , '717897987691852588770249' , '-7' , '-102556855384550369824322' ) ; +test( macro , '-717897987691852588770249' , '-7' , '102556855384550369824321' ) ; +test( macro , '717897987691852588770249' , '9' , '79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , '9' , '-79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , '-9' , '-79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , '-9' , '79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , '11' , '65263453426532053524568' ) ; +test( macro , '-717897987691852588770249' , '11' , '-65263453426532053524569' ) ; +test( macro , '717897987691852588770249' , '-11' , '-65263453426532053524569' ) ; +test( macro , '-717897987691852588770249' , '-11' , '65263453426532053524568' ) ; test( macro , '717897987691852588770249' , '17' , '42229293393638387574720' ) ; test( macro , '-717897987691852588770249' , '17' , '-42229293393638387574721' ) ; test( macro , '717897987691852588770249' , '-17' , '-42229293393638387574721' ) ; test( macro , '-717897987691852588770249' , '-17' , '42229293393638387574720' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' ) ; +test( macro , '717897987691852588770249' , '22' , '32631726713266026762284' ) ; +test( macro , '-717897987691852588770249' , '22' , '-32631726713266026762285' ) ; +test( macro , '717897987691852588770249' , '-22' , '-32631726713266026762285' ) ; +test( macro , '-717897987691852588770249' , '-22' , '32631726713266026762284' ) ; +test( macro , '717897987691852588770249' , '24' , '29912416153827191198760' ) ; +test( macro , '-717897987691852588770249' , '24' , '-29912416153827191198761' ) ; +test( macro , '717897987691852588770249' , '-24' , '-29912416153827191198761' ) ; +test( macro , '-717897987691852588770249' , '-24' , '29912416153827191198760' ) ; +test( macro , '717897987691852588770249' , '27' , '26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , '27' , '-26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , '-27' , '-26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , '-27' , '26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , '29' , '24755103023856985819663' ) ; +test( macro , '-717897987691852588770249' , '29' , '-24755103023856985819664' ) ; +test( macro , '717897987691852588770249' , '-29' , '-24755103023856985819664' ) ; +test( macro , '-717897987691852588770249' , '-29' , '24755103023856985819663' ) ; +test( macro , '717897987691852588770249' , '1234' , '581764981922084755891' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-581764981922084755892' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-581764981922084755892' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '581764981922084755891' ) ; +test( macro , '717897987691852588770249' , '5678' , '126435010160593974774' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-126435010160593974775' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-126435010160593974775' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '126435010160593974774' ) ; test( macro , '717897987691852588770249' , '1073741824' , '668594602208447' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-668594602208448' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-668594602208448' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '668594602208447' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '1' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-1' ) ; diff --git a/test/src/integer/arithmetic/divn.js b/test/src/integer/arithmetic/divn.js new file mode 100644 index 0000000..7fd7fbc --- /dev/null +++ b/test/src/integer/arithmetic/divn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , divn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = divn( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `divn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , -1 , '-1' ) ; +test( macro , '-1' , -1 , '1' ) ; +test( macro , '1' , 3 , '0' ) ; +test( macro , '-1' , 3 , '-1' ) ; +test( macro , '1' , -3 , '-1' ) ; +test( macro , '-1' , -3 , '0' ) ; +test( macro , '1' , 7 , '0' ) ; +test( macro , '-1' , 7 , '-1' ) ; +test( macro , '1' , -7 , '-1' ) ; +test( macro , '-1' , -7 , '0' ) ; +test( macro , '1' , 9 , '0' ) ; +test( macro , '-1' , 9 , '-1' ) ; +test( macro , '1' , -9 , '-1' ) ; +test( macro , '-1' , -9 , '0' ) ; +test( macro , '1' , 11 , '0' ) ; +test( macro , '-1' , 11 , '-1' ) ; +test( macro , '1' , -11 , '-1' ) ; +test( macro , '-1' , -11 , '0' ) ; +test( macro , '1' , 17 , '0' ) ; +test( macro , '-1' , 17 , '-1' ) ; +test( macro , '1' , -17 , '-1' ) ; +test( macro , '-1' , -17 , '0' ) ; +test( macro , '1' , 22 , '0' ) ; +test( macro , '-1' , 22 , '-1' ) ; +test( macro , '1' , -22 , '-1' ) ; +test( macro , '-1' , -22 , '0' ) ; +test( macro , '1' , 24 , '0' ) ; +test( macro , '-1' , 24 , '-1' ) ; +test( macro , '1' , -24 , '-1' ) ; +test( macro , '-1' , -24 , '0' ) ; +test( macro , '1' , 27 , '0' ) ; +test( macro , '-1' , 27 , '-1' ) ; +test( macro , '1' , -27 , '-1' ) ; +test( macro , '-1' , -27 , '0' ) ; +test( macro , '1' , 29 , '0' ) ; +test( macro , '-1' , 29 , '-1' ) ; +test( macro , '1' , -29 , '-1' ) ; +test( macro , '-1' , -29 , '0' ) ; +test( macro , '1' , 1234 , '0' ) ; +test( macro , '-1' , 1234 , '-1' ) ; +test( macro , '1' , -1234 , '-1' ) ; +test( macro , '-1' , -1234 , '0' ) ; +test( macro , '1' , 5678 , '0' ) ; +test( macro , '-1' , 5678 , '-1' ) ; +test( macro , '1' , -5678 , '-1' ) ; +test( macro , '-1' , -5678 , '0' ) ; +test( macro , '1' , 1073741824 , '0' ) ; +test( macro , '-1' , 1073741824 , '-1' ) ; +test( macro , '1' , -1073741824 , '-1' ) ; +test( macro , '-1' , -1073741824 , '0' ) ; +test( macro , '1' , 51676101935731 , '0' ) ; +test( macro , '-1' , 51676101935731 , '-1' ) ; +test( macro , '1' , -51676101935731 , '-1' ) ; +test( macro , '-1' , -51676101935731 , '0' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , -1 , '-3' ) ; +test( macro , '-3' , -1 , '3' ) ; +test( macro , '3' , 3 , '1' ) ; +test( macro , '-3' , 3 , '-1' ) ; +test( macro , '3' , -3 , '-1' ) ; +test( macro , '-3' , -3 , '1' ) ; +test( macro , '3' , 7 , '0' ) ; +test( macro , '-3' , 7 , '-1' ) ; +test( macro , '3' , -7 , '-1' ) ; +test( macro , '-3' , -7 , '0' ) ; +test( macro , '3' , 9 , '0' ) ; +test( macro , '-3' , 9 , '-1' ) ; +test( macro , '3' , -9 , '-1' ) ; +test( macro , '-3' , -9 , '0' ) ; +test( macro , '3' , 11 , '0' ) ; +test( macro , '-3' , 11 , '-1' ) ; +test( macro , '3' , -11 , '-1' ) ; +test( macro , '-3' , -11 , '0' ) ; +test( macro , '3' , 17 , '0' ) ; +test( macro , '-3' , 17 , '-1' ) ; +test( macro , '3' , -17 , '-1' ) ; +test( macro , '-3' , -17 , '0' ) ; +test( macro , '3' , 22 , '0' ) ; +test( macro , '-3' , 22 , '-1' ) ; +test( macro , '3' , -22 , '-1' ) ; +test( macro , '-3' , -22 , '0' ) ; +test( macro , '3' , 24 , '0' ) ; +test( macro , '-3' , 24 , '-1' ) ; +test( macro , '3' , -24 , '-1' ) ; +test( macro , '-3' , -24 , '0' ) ; +test( macro , '3' , 27 , '0' ) ; +test( macro , '-3' , 27 , '-1' ) ; +test( macro , '3' , -27 , '-1' ) ; +test( macro , '-3' , -27 , '0' ) ; +test( macro , '3' , 29 , '0' ) ; +test( macro , '-3' , 29 , '-1' ) ; +test( macro , '3' , -29 , '-1' ) ; +test( macro , '-3' , -29 , '0' ) ; +test( macro , '3' , 1234 , '0' ) ; +test( macro , '-3' , 1234 , '-1' ) ; +test( macro , '3' , -1234 , '-1' ) ; +test( macro , '-3' , -1234 , '0' ) ; +test( macro , '3' , 5678 , '0' ) ; +test( macro , '-3' , 5678 , '-1' ) ; +test( macro , '3' , -5678 , '-1' ) ; +test( macro , '-3' , -5678 , '0' ) ; +test( macro , '3' , 1073741824 , '0' ) ; +test( macro , '-3' , 1073741824 , '-1' ) ; +test( macro , '3' , -1073741824 , '-1' ) ; +test( macro , '-3' , -1073741824 , '0' ) ; +test( macro , '3' , 51676101935731 , '0' ) ; +test( macro , '-3' , 51676101935731 , '-1' ) ; +test( macro , '3' , -51676101935731 , '-1' ) ; +test( macro , '-3' , -51676101935731 , '0' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , -1 , '-7' ) ; +test( macro , '-7' , -1 , '7' ) ; +test( macro , '7' , 3 , '2' ) ; +test( macro , '-7' , 3 , '-3' ) ; +test( macro , '7' , -3 , '-3' ) ; +test( macro , '-7' , -3 , '2' ) ; +test( macro , '7' , 7 , '1' ) ; +test( macro , '-7' , 7 , '-1' ) ; +test( macro , '7' , -7 , '-1' ) ; +test( macro , '-7' , -7 , '1' ) ; +test( macro , '7' , 9 , '0' ) ; +test( macro , '-7' , 9 , '-1' ) ; +test( macro , '7' , -9 , '-1' ) ; +test( macro , '-7' , -9 , '0' ) ; +test( macro , '7' , 11 , '0' ) ; +test( macro , '-7' , 11 , '-1' ) ; +test( macro , '7' , -11 , '-1' ) ; +test( macro , '-7' , -11 , '0' ) ; +test( macro , '7' , 17 , '0' ) ; +test( macro , '-7' , 17 , '-1' ) ; +test( macro , '7' , -17 , '-1' ) ; +test( macro , '-7' , -17 , '0' ) ; +test( macro , '7' , 22 , '0' ) ; +test( macro , '-7' , 22 , '-1' ) ; +test( macro , '7' , -22 , '-1' ) ; +test( macro , '-7' , -22 , '0' ) ; +test( macro , '7' , 24 , '0' ) ; +test( macro , '-7' , 24 , '-1' ) ; +test( macro , '7' , -24 , '-1' ) ; +test( macro , '-7' , -24 , '0' ) ; +test( macro , '7' , 27 , '0' ) ; +test( macro , '-7' , 27 , '-1' ) ; +test( macro , '7' , -27 , '-1' ) ; +test( macro , '-7' , -27 , '0' ) ; +test( macro , '7' , 29 , '0' ) ; +test( macro , '-7' , 29 , '-1' ) ; +test( macro , '7' , -29 , '-1' ) ; +test( macro , '-7' , -29 , '0' ) ; +test( macro , '7' , 1234 , '0' ) ; +test( macro , '-7' , 1234 , '-1' ) ; +test( macro , '7' , -1234 , '-1' ) ; +test( macro , '-7' , -1234 , '0' ) ; +test( macro , '7' , 5678 , '0' ) ; +test( macro , '-7' , 5678 , '-1' ) ; +test( macro , '7' , -5678 , '-1' ) ; +test( macro , '-7' , -5678 , '0' ) ; +test( macro , '7' , 1073741824 , '0' ) ; +test( macro , '-7' , 1073741824 , '-1' ) ; +test( macro , '7' , -1073741824 , '-1' ) ; +test( macro , '-7' , -1073741824 , '0' ) ; +test( macro , '7' , 51676101935731 , '0' ) ; +test( macro , '-7' , 51676101935731 , '-1' ) ; +test( macro , '7' , -51676101935731 , '-1' ) ; +test( macro , '-7' , -51676101935731 , '0' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , -1 , '-9' ) ; +test( macro , '-9' , -1 , '9' ) ; +test( macro , '9' , 3 , '3' ) ; +test( macro , '-9' , 3 , '-3' ) ; +test( macro , '9' , -3 , '-3' ) ; +test( macro , '-9' , -3 , '3' ) ; +test( macro , '9' , 7 , '1' ) ; +test( macro , '-9' , 7 , '-2' ) ; +test( macro , '9' , -7 , '-2' ) ; +test( macro , '-9' , -7 , '1' ) ; +test( macro , '9' , 9 , '1' ) ; +test( macro , '-9' , 9 , '-1' ) ; +test( macro , '9' , -9 , '-1' ) ; +test( macro , '-9' , -9 , '1' ) ; +test( macro , '9' , 11 , '0' ) ; +test( macro , '-9' , 11 , '-1' ) ; +test( macro , '9' , -11 , '-1' ) ; +test( macro , '-9' , -11 , '0' ) ; +test( macro , '9' , 17 , '0' ) ; +test( macro , '-9' , 17 , '-1' ) ; +test( macro , '9' , -17 , '-1' ) ; +test( macro , '-9' , -17 , '0' ) ; +test( macro , '9' , 22 , '0' ) ; +test( macro , '-9' , 22 , '-1' ) ; +test( macro , '9' , -22 , '-1' ) ; +test( macro , '-9' , -22 , '0' ) ; +test( macro , '9' , 24 , '0' ) ; +test( macro , '-9' , 24 , '-1' ) ; +test( macro , '9' , -24 , '-1' ) ; +test( macro , '-9' , -24 , '0' ) ; +test( macro , '9' , 27 , '0' ) ; +test( macro , '-9' , 27 , '-1' ) ; +test( macro , '9' , -27 , '-1' ) ; +test( macro , '-9' , -27 , '0' ) ; +test( macro , '9' , 29 , '0' ) ; +test( macro , '-9' , 29 , '-1' ) ; +test( macro , '9' , -29 , '-1' ) ; +test( macro , '-9' , -29 , '0' ) ; +test( macro , '9' , 1234 , '0' ) ; +test( macro , '-9' , 1234 , '-1' ) ; +test( macro , '9' , -1234 , '-1' ) ; +test( macro , '-9' , -1234 , '0' ) ; +test( macro , '9' , 5678 , '0' ) ; +test( macro , '-9' , 5678 , '-1' ) ; +test( macro , '9' , -5678 , '-1' ) ; +test( macro , '-9' , -5678 , '0' ) ; +test( macro , '9' , 1073741824 , '0' ) ; +test( macro , '-9' , 1073741824 , '-1' ) ; +test( macro , '9' , -1073741824 , '-1' ) ; +test( macro , '-9' , -1073741824 , '0' ) ; +test( macro , '9' , 51676101935731 , '0' ) ; +test( macro , '-9' , 51676101935731 , '-1' ) ; +test( macro , '9' , -51676101935731 , '-1' ) ; +test( macro , '-9' , -51676101935731 , '0' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , -1 , '-11' ) ; +test( macro , '-11' , -1 , '11' ) ; +test( macro , '11' , 3 , '3' ) ; +test( macro , '-11' , 3 , '-4' ) ; +test( macro , '11' , -3 , '-4' ) ; +test( macro , '-11' , -3 , '3' ) ; +test( macro , '11' , 7 , '1' ) ; +test( macro , '-11' , 7 , '-2' ) ; +test( macro , '11' , -7 , '-2' ) ; +test( macro , '-11' , -7 , '1' ) ; +test( macro , '11' , 9 , '1' ) ; +test( macro , '-11' , 9 , '-2' ) ; +test( macro , '11' , -9 , '-2' ) ; +test( macro , '-11' , -9 , '1' ) ; +test( macro , '11' , 11 , '1' ) ; +test( macro , '-11' , 11 , '-1' ) ; +test( macro , '11' , -11 , '-1' ) ; +test( macro , '-11' , -11 , '1' ) ; +test( macro , '11' , 17 , '0' ) ; +test( macro , '-11' , 17 , '-1' ) ; +test( macro , '11' , -17 , '-1' ) ; +test( macro , '-11' , -17 , '0' ) ; +test( macro , '11' , 22 , '0' ) ; +test( macro , '-11' , 22 , '-1' ) ; +test( macro , '11' , -22 , '-1' ) ; +test( macro , '-11' , -22 , '0' ) ; +test( macro , '11' , 24 , '0' ) ; +test( macro , '-11' , 24 , '-1' ) ; +test( macro , '11' , -24 , '-1' ) ; +test( macro , '-11' , -24 , '0' ) ; +test( macro , '11' , 27 , '0' ) ; +test( macro , '-11' , 27 , '-1' ) ; +test( macro , '11' , -27 , '-1' ) ; +test( macro , '-11' , -27 , '0' ) ; +test( macro , '11' , 29 , '0' ) ; +test( macro , '-11' , 29 , '-1' ) ; +test( macro , '11' , -29 , '-1' ) ; +test( macro , '-11' , -29 , '0' ) ; +test( macro , '11' , 1234 , '0' ) ; +test( macro , '-11' , 1234 , '-1' ) ; +test( macro , '11' , -1234 , '-1' ) ; +test( macro , '-11' , -1234 , '0' ) ; +test( macro , '11' , 5678 , '0' ) ; +test( macro , '-11' , 5678 , '-1' ) ; +test( macro , '11' , -5678 , '-1' ) ; +test( macro , '-11' , -5678 , '0' ) ; +test( macro , '11' , 1073741824 , '0' ) ; +test( macro , '-11' , 1073741824 , '-1' ) ; +test( macro , '11' , -1073741824 , '-1' ) ; +test( macro , '-11' , -1073741824 , '0' ) ; +test( macro , '11' , 51676101935731 , '0' ) ; +test( macro , '-11' , 51676101935731 , '-1' ) ; +test( macro , '11' , -51676101935731 , '-1' ) ; +test( macro , '-11' , -51676101935731 , '0' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , -1 , '-17' ) ; +test( macro , '-17' , -1 , '17' ) ; +test( macro , '17' , 3 , '5' ) ; +test( macro , '-17' , 3 , '-6' ) ; +test( macro , '17' , -3 , '-6' ) ; +test( macro , '-17' , -3 , '5' ) ; +test( macro , '17' , 7 , '2' ) ; +test( macro , '-17' , 7 , '-3' ) ; +test( macro , '17' , -7 , '-3' ) ; +test( macro , '-17' , -7 , '2' ) ; +test( macro , '17' , 9 , '1' ) ; +test( macro , '-17' , 9 , '-2' ) ; +test( macro , '17' , -9 , '-2' ) ; +test( macro , '-17' , -9 , '1' ) ; +test( macro , '17' , 11 , '1' ) ; +test( macro , '-17' , 11 , '-2' ) ; +test( macro , '17' , -11 , '-2' ) ; +test( macro , '-17' , -11 , '1' ) ; +test( macro , '17' , 17 , '1' ) ; +test( macro , '-17' , 17 , '-1' ) ; +test( macro , '17' , -17 , '-1' ) ; +test( macro , '-17' , -17 , '1' ) ; +test( macro , '17' , 22 , '0' ) ; +test( macro , '-17' , 22 , '-1' ) ; +test( macro , '17' , -22 , '-1' ) ; +test( macro , '-17' , -22 , '0' ) ; +test( macro , '17' , 24 , '0' ) ; +test( macro , '-17' , 24 , '-1' ) ; +test( macro , '17' , -24 , '-1' ) ; +test( macro , '-17' , -24 , '0' ) ; +test( macro , '17' , 27 , '0' ) ; +test( macro , '-17' , 27 , '-1' ) ; +test( macro , '17' , -27 , '-1' ) ; +test( macro , '-17' , -27 , '0' ) ; +test( macro , '17' , 29 , '0' ) ; +test( macro , '-17' , 29 , '-1' ) ; +test( macro , '17' , -29 , '-1' ) ; +test( macro , '-17' , -29 , '0' ) ; +test( macro , '17' , 1234 , '0' ) ; +test( macro , '-17' , 1234 , '-1' ) ; +test( macro , '17' , -1234 , '-1' ) ; +test( macro , '-17' , -1234 , '0' ) ; +test( macro , '17' , 5678 , '0' ) ; +test( macro , '-17' , 5678 , '-1' ) ; +test( macro , '17' , -5678 , '-1' ) ; +test( macro , '-17' , -5678 , '0' ) ; +test( macro , '17' , 1073741824 , '0' ) ; +test( macro , '-17' , 1073741824 , '-1' ) ; +test( macro , '17' , -1073741824 , '-1' ) ; +test( macro , '-17' , -1073741824 , '0' ) ; +test( macro , '17' , 51676101935731 , '0' ) ; +test( macro , '-17' , 51676101935731 , '-1' ) ; +test( macro , '17' , -51676101935731 , '-1' ) ; +test( macro , '-17' , -51676101935731 , '0' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , -1 , '-22' ) ; +test( macro , '-22' , -1 , '22' ) ; +test( macro , '22' , 3 , '7' ) ; +test( macro , '-22' , 3 , '-8' ) ; +test( macro , '22' , -3 , '-8' ) ; +test( macro , '-22' , -3 , '7' ) ; +test( macro , '22' , 7 , '3' ) ; +test( macro , '-22' , 7 , '-4' ) ; +test( macro , '22' , -7 , '-4' ) ; +test( macro , '-22' , -7 , '3' ) ; +test( macro , '22' , 9 , '2' ) ; +test( macro , '-22' , 9 , '-3' ) ; +test( macro , '22' , -9 , '-3' ) ; +test( macro , '-22' , -9 , '2' ) ; +test( macro , '22' , 11 , '2' ) ; +test( macro , '-22' , 11 , '-2' ) ; +test( macro , '22' , -11 , '-2' ) ; +test( macro , '-22' , -11 , '2' ) ; +test( macro , '22' , 17 , '1' ) ; +test( macro , '-22' , 17 , '-2' ) ; +test( macro , '22' , -17 , '-2' ) ; +test( macro , '-22' , -17 , '1' ) ; +test( macro , '22' , 22 , '1' ) ; +test( macro , '-22' , 22 , '-1' ) ; +test( macro , '22' , -22 , '-1' ) ; +test( macro , '-22' , -22 , '1' ) ; +test( macro , '22' , 24 , '0' ) ; +test( macro , '-22' , 24 , '-1' ) ; +test( macro , '22' , -24 , '-1' ) ; +test( macro , '-22' , -24 , '0' ) ; +test( macro , '22' , 27 , '0' ) ; +test( macro , '-22' , 27 , '-1' ) ; +test( macro , '22' , -27 , '-1' ) ; +test( macro , '-22' , -27 , '0' ) ; +test( macro , '22' , 29 , '0' ) ; +test( macro , '-22' , 29 , '-1' ) ; +test( macro , '22' , -29 , '-1' ) ; +test( macro , '-22' , -29 , '0' ) ; +test( macro , '22' , 1234 , '0' ) ; +test( macro , '-22' , 1234 , '-1' ) ; +test( macro , '22' , -1234 , '-1' ) ; +test( macro , '-22' , -1234 , '0' ) ; +test( macro , '22' , 5678 , '0' ) ; +test( macro , '-22' , 5678 , '-1' ) ; +test( macro , '22' , -5678 , '-1' ) ; +test( macro , '-22' , -5678 , '0' ) ; +test( macro , '22' , 1073741824 , '0' ) ; +test( macro , '-22' , 1073741824 , '-1' ) ; +test( macro , '22' , -1073741824 , '-1' ) ; +test( macro , '-22' , -1073741824 , '0' ) ; +test( macro , '22' , 51676101935731 , '0' ) ; +test( macro , '-22' , 51676101935731 , '-1' ) ; +test( macro , '22' , -51676101935731 , '-1' ) ; +test( macro , '-22' , -51676101935731 , '0' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , -1 , '-24' ) ; +test( macro , '-24' , -1 , '24' ) ; +test( macro , '24' , 3 , '8' ) ; +test( macro , '-24' , 3 , '-8' ) ; +test( macro , '24' , -3 , '-8' ) ; +test( macro , '-24' , -3 , '8' ) ; +test( macro , '24' , 7 , '3' ) ; +test( macro , '-24' , 7 , '-4' ) ; +test( macro , '24' , -7 , '-4' ) ; +test( macro , '-24' , -7 , '3' ) ; +test( macro , '24' , 9 , '2' ) ; +test( macro , '-24' , 9 , '-3' ) ; +test( macro , '24' , -9 , '-3' ) ; +test( macro , '-24' , -9 , '2' ) ; +test( macro , '24' , 11 , '2' ) ; +test( macro , '-24' , 11 , '-3' ) ; +test( macro , '24' , -11 , '-3' ) ; +test( macro , '-24' , -11 , '2' ) ; +test( macro , '24' , 17 , '1' ) ; +test( macro , '-24' , 17 , '-2' ) ; +test( macro , '24' , -17 , '-2' ) ; +test( macro , '-24' , -17 , '1' ) ; +test( macro , '24' , 22 , '1' ) ; +test( macro , '-24' , 22 , '-2' ) ; +test( macro , '24' , -22 , '-2' ) ; +test( macro , '-24' , -22 , '1' ) ; +test( macro , '24' , 24 , '1' ) ; +test( macro , '-24' , 24 , '-1' ) ; +test( macro , '24' , -24 , '-1' ) ; +test( macro , '-24' , -24 , '1' ) ; +test( macro , '24' , 27 , '0' ) ; +test( macro , '-24' , 27 , '-1' ) ; +test( macro , '24' , -27 , '-1' ) ; +test( macro , '-24' , -27 , '0' ) ; +test( macro , '24' , 29 , '0' ) ; +test( macro , '-24' , 29 , '-1' ) ; +test( macro , '24' , -29 , '-1' ) ; +test( macro , '-24' , -29 , '0' ) ; +test( macro , '24' , 1234 , '0' ) ; +test( macro , '-24' , 1234 , '-1' ) ; +test( macro , '24' , -1234 , '-1' ) ; +test( macro , '-24' , -1234 , '0' ) ; +test( macro , '24' , 5678 , '0' ) ; +test( macro , '-24' , 5678 , '-1' ) ; +test( macro , '24' , -5678 , '-1' ) ; +test( macro , '-24' , -5678 , '0' ) ; +test( macro , '24' , 1073741824 , '0' ) ; +test( macro , '-24' , 1073741824 , '-1' ) ; +test( macro , '24' , -1073741824 , '-1' ) ; +test( macro , '-24' , -1073741824 , '0' ) ; +test( macro , '24' , 51676101935731 , '0' ) ; +test( macro , '-24' , 51676101935731 , '-1' ) ; +test( macro , '24' , -51676101935731 , '-1' ) ; +test( macro , '-24' , -51676101935731 , '0' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , -1 , '-27' ) ; +test( macro , '-27' , -1 , '27' ) ; +test( macro , '27' , 3 , '9' ) ; +test( macro , '-27' , 3 , '-9' ) ; +test( macro , '27' , -3 , '-9' ) ; +test( macro , '-27' , -3 , '9' ) ; +test( macro , '27' , 7 , '3' ) ; +test( macro , '-27' , 7 , '-4' ) ; +test( macro , '27' , -7 , '-4' ) ; +test( macro , '-27' , -7 , '3' ) ; +test( macro , '27' , 9 , '3' ) ; +test( macro , '-27' , 9 , '-3' ) ; +test( macro , '27' , -9 , '-3' ) ; +test( macro , '-27' , -9 , '3' ) ; +test( macro , '27' , 11 , '2' ) ; +test( macro , '-27' , 11 , '-3' ) ; +test( macro , '27' , -11 , '-3' ) ; +test( macro , '-27' , -11 , '2' ) ; +test( macro , '27' , 17 , '1' ) ; +test( macro , '-27' , 17 , '-2' ) ; +test( macro , '27' , -17 , '-2' ) ; +test( macro , '-27' , -17 , '1' ) ; +test( macro , '27' , 22 , '1' ) ; +test( macro , '-27' , 22 , '-2' ) ; +test( macro , '27' , -22 , '-2' ) ; +test( macro , '-27' , -22 , '1' ) ; +test( macro , '27' , 24 , '1' ) ; +test( macro , '-27' , 24 , '-2' ) ; +test( macro , '27' , -24 , '-2' ) ; +test( macro , '-27' , -24 , '1' ) ; +test( macro , '27' , 27 , '1' ) ; +test( macro , '-27' , 27 , '-1' ) ; +test( macro , '27' , -27 , '-1' ) ; +test( macro , '-27' , -27 , '1' ) ; +test( macro , '27' , 29 , '0' ) ; +test( macro , '-27' , 29 , '-1' ) ; +test( macro , '27' , -29 , '-1' ) ; +test( macro , '-27' , -29 , '0' ) ; +test( macro , '27' , 1234 , '0' ) ; +test( macro , '-27' , 1234 , '-1' ) ; +test( macro , '27' , -1234 , '-1' ) ; +test( macro , '-27' , -1234 , '0' ) ; +test( macro , '27' , 5678 , '0' ) ; +test( macro , '-27' , 5678 , '-1' ) ; +test( macro , '27' , -5678 , '-1' ) ; +test( macro , '-27' , -5678 , '0' ) ; +test( macro , '27' , 1073741824 , '0' ) ; +test( macro , '-27' , 1073741824 , '-1' ) ; +test( macro , '27' , -1073741824 , '-1' ) ; +test( macro , '-27' , -1073741824 , '0' ) ; +test( macro , '27' , 51676101935731 , '0' ) ; +test( macro , '-27' , 51676101935731 , '-1' ) ; +test( macro , '27' , -51676101935731 , '-1' ) ; +test( macro , '-27' , -51676101935731 , '0' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , -1 , '-29' ) ; +test( macro , '-29' , -1 , '29' ) ; +test( macro , '29' , 3 , '9' ) ; +test( macro , '-29' , 3 , '-10' ) ; +test( macro , '29' , -3 , '-10' ) ; +test( macro , '-29' , -3 , '9' ) ; +test( macro , '29' , 7 , '4' ) ; +test( macro , '-29' , 7 , '-5' ) ; +test( macro , '29' , -7 , '-5' ) ; +test( macro , '-29' , -7 , '4' ) ; +test( macro , '29' , 9 , '3' ) ; +test( macro , '-29' , 9 , '-4' ) ; +test( macro , '29' , -9 , '-4' ) ; +test( macro , '-29' , -9 , '3' ) ; +test( macro , '29' , 11 , '2' ) ; +test( macro , '-29' , 11 , '-3' ) ; +test( macro , '29' , -11 , '-3' ) ; +test( macro , '-29' , -11 , '2' ) ; +test( macro , '29' , 17 , '1' ) ; +test( macro , '-29' , 17 , '-2' ) ; +test( macro , '29' , -17 , '-2' ) ; +test( macro , '-29' , -17 , '1' ) ; +test( macro , '29' , 22 , '1' ) ; +test( macro , '-29' , 22 , '-2' ) ; +test( macro , '29' , -22 , '-2' ) ; +test( macro , '-29' , -22 , '1' ) ; +test( macro , '29' , 24 , '1' ) ; +test( macro , '-29' , 24 , '-2' ) ; +test( macro , '29' , -24 , '-2' ) ; +test( macro , '-29' , -24 , '1' ) ; +test( macro , '29' , 27 , '1' ) ; +test( macro , '-29' , 27 , '-2' ) ; +test( macro , '29' , -27 , '-2' ) ; +test( macro , '-29' , -27 , '1' ) ; +test( macro , '29' , 29 , '1' ) ; +test( macro , '-29' , 29 , '-1' ) ; +test( macro , '29' , -29 , '-1' ) ; +test( macro , '-29' , -29 , '1' ) ; +test( macro , '29' , 1234 , '0' ) ; +test( macro , '-29' , 1234 , '-1' ) ; +test( macro , '29' , -1234 , '-1' ) ; +test( macro , '-29' , -1234 , '0' ) ; +test( macro , '29' , 5678 , '0' ) ; +test( macro , '-29' , 5678 , '-1' ) ; +test( macro , '29' , -5678 , '-1' ) ; +test( macro , '-29' , -5678 , '0' ) ; +test( macro , '29' , 1073741824 , '0' ) ; +test( macro , '-29' , 1073741824 , '-1' ) ; +test( macro , '29' , -1073741824 , '-1' ) ; +test( macro , '-29' , -1073741824 , '0' ) ; +test( macro , '29' , 51676101935731 , '0' ) ; +test( macro , '-29' , 51676101935731 , '-1' ) ; +test( macro , '29' , -51676101935731 , '-1' ) ; +test( macro , '-29' , -51676101935731 , '0' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , -1 , '-1234' ) ; +test( macro , '-1234' , -1 , '1234' ) ; +test( macro , '1234' , 3 , '411' ) ; +test( macro , '-1234' , 3 , '-412' ) ; +test( macro , '1234' , -3 , '-412' ) ; +test( macro , '-1234' , -3 , '411' ) ; +test( macro , '1234' , 7 , '176' ) ; +test( macro , '-1234' , 7 , '-177' ) ; +test( macro , '1234' , -7 , '-177' ) ; +test( macro , '-1234' , -7 , '176' ) ; +test( macro , '1234' , 9 , '137' ) ; +test( macro , '-1234' , 9 , '-138' ) ; +test( macro , '1234' , -9 , '-138' ) ; +test( macro , '-1234' , -9 , '137' ) ; +test( macro , '1234' , 11 , '112' ) ; +test( macro , '-1234' , 11 , '-113' ) ; +test( macro , '1234' , -11 , '-113' ) ; +test( macro , '-1234' , -11 , '112' ) ; +test( macro , '1234' , 17 , '72' ) ; +test( macro , '-1234' , 17 , '-73' ) ; +test( macro , '1234' , -17 , '-73' ) ; +test( macro , '-1234' , -17 , '72' ) ; +test( macro , '1234' , 22 , '56' ) ; +test( macro , '-1234' , 22 , '-57' ) ; +test( macro , '1234' , -22 , '-57' ) ; +test( macro , '-1234' , -22 , '56' ) ; +test( macro , '1234' , 24 , '51' ) ; +test( macro , '-1234' , 24 , '-52' ) ; +test( macro , '1234' , -24 , '-52' ) ; +test( macro , '-1234' , -24 , '51' ) ; +test( macro , '1234' , 27 , '45' ) ; +test( macro , '-1234' , 27 , '-46' ) ; +test( macro , '1234' , -27 , '-46' ) ; +test( macro , '-1234' , -27 , '45' ) ; +test( macro , '1234' , 29 , '42' ) ; +test( macro , '-1234' , 29 , '-43' ) ; +test( macro , '1234' , -29 , '-43' ) ; +test( macro , '-1234' , -29 , '42' ) ; +test( macro , '1234' , 1234 , '1' ) ; +test( macro , '-1234' , 1234 , '-1' ) ; +test( macro , '1234' , -1234 , '-1' ) ; +test( macro , '-1234' , -1234 , '1' ) ; +test( macro , '1234' , 5678 , '0' ) ; +test( macro , '-1234' , 5678 , '-1' ) ; +test( macro , '1234' , -5678 , '-1' ) ; +test( macro , '-1234' , -5678 , '0' ) ; +test( macro , '1234' , 1073741824 , '0' ) ; +test( macro , '-1234' , 1073741824 , '-1' ) ; +test( macro , '1234' , -1073741824 , '-1' ) ; +test( macro , '-1234' , -1073741824 , '0' ) ; +test( macro , '1234' , 51676101935731 , '0' ) ; +test( macro , '-1234' , 51676101935731 , '-1' ) ; +test( macro , '1234' , -51676101935731 , '-1' ) ; +test( macro , '-1234' , -51676101935731 , '0' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , -1 , '-5678' ) ; +test( macro , '-5678' , -1 , '5678' ) ; +test( macro , '5678' , 3 , '1892' ) ; +test( macro , '-5678' , 3 , '-1893' ) ; +test( macro , '5678' , -3 , '-1893' ) ; +test( macro , '-5678' , -3 , '1892' ) ; +test( macro , '5678' , 7 , '811' ) ; +test( macro , '-5678' , 7 , '-812' ) ; +test( macro , '5678' , -7 , '-812' ) ; +test( macro , '-5678' , -7 , '811' ) ; +test( macro , '5678' , 9 , '630' ) ; +test( macro , '-5678' , 9 , '-631' ) ; +test( macro , '5678' , -9 , '-631' ) ; +test( macro , '-5678' , -9 , '630' ) ; +test( macro , '5678' , 11 , '516' ) ; +test( macro , '-5678' , 11 , '-517' ) ; +test( macro , '5678' , -11 , '-517' ) ; +test( macro , '-5678' , -11 , '516' ) ; +test( macro , '5678' , 17 , '334' ) ; +test( macro , '-5678' , 17 , '-334' ) ; +test( macro , '5678' , -17 , '-334' ) ; +test( macro , '-5678' , -17 , '334' ) ; +test( macro , '5678' , 22 , '258' ) ; +test( macro , '-5678' , 22 , '-259' ) ; +test( macro , '5678' , -22 , '-259' ) ; +test( macro , '-5678' , -22 , '258' ) ; +test( macro , '5678' , 24 , '236' ) ; +test( macro , '-5678' , 24 , '-237' ) ; +test( macro , '5678' , -24 , '-237' ) ; +test( macro , '-5678' , -24 , '236' ) ; +test( macro , '5678' , 27 , '210' ) ; +test( macro , '-5678' , 27 , '-211' ) ; +test( macro , '5678' , -27 , '-211' ) ; +test( macro , '-5678' , -27 , '210' ) ; +test( macro , '5678' , 29 , '195' ) ; +test( macro , '-5678' , 29 , '-196' ) ; +test( macro , '5678' , -29 , '-196' ) ; +test( macro , '-5678' , -29 , '195' ) ; +test( macro , '5678' , 1234 , '4' ) ; +test( macro , '-5678' , 1234 , '-5' ) ; +test( macro , '5678' , -1234 , '-5' ) ; +test( macro , '-5678' , -1234 , '4' ) ; +test( macro , '5678' , 5678 , '1' ) ; +test( macro , '-5678' , 5678 , '-1' ) ; +test( macro , '5678' , -5678 , '-1' ) ; +test( macro , '-5678' , -5678 , '1' ) ; +test( macro , '5678' , 1073741824 , '0' ) ; +test( macro , '-5678' , 1073741824 , '-1' ) ; +test( macro , '5678' , -1073741824 , '-1' ) ; +test( macro , '-5678' , -1073741824 , '0' ) ; +test( macro , '5678' , 51676101935731 , '0' ) ; +test( macro , '-5678' , 51676101935731 , '-1' ) ; +test( macro , '5678' , -51676101935731 , '-1' ) ; +test( macro , '-5678' , -51676101935731 , '0' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , -1 , '-1073741824' ) ; +test( macro , '-1073741824' , -1 , '1073741824' ) ; +test( macro , '1073741824' , 3 , '357913941' ) ; +test( macro , '-1073741824' , 3 , '-357913942' ) ; +test( macro , '1073741824' , -3 , '-357913942' ) ; +test( macro , '-1073741824' , -3 , '357913941' ) ; +test( macro , '1073741824' , 7 , '153391689' ) ; +test( macro , '-1073741824' , 7 , '-153391690' ) ; +test( macro , '1073741824' , -7 , '-153391690' ) ; +test( macro , '-1073741824' , -7 , '153391689' ) ; +test( macro , '1073741824' , 9 , '119304647' ) ; +test( macro , '-1073741824' , 9 , '-119304648' ) ; +test( macro , '1073741824' , -9 , '-119304648' ) ; +test( macro , '-1073741824' , -9 , '119304647' ) ; +test( macro , '1073741824' , 11 , '97612893' ) ; +test( macro , '-1073741824' , 11 , '-97612894' ) ; +test( macro , '1073741824' , -11 , '-97612894' ) ; +test( macro , '-1073741824' , -11 , '97612893' ) ; +test( macro , '1073741824' , 17 , '63161283' ) ; +test( macro , '-1073741824' , 17 , '-63161284' ) ; +test( macro , '1073741824' , -17 , '-63161284' ) ; +test( macro , '-1073741824' , -17 , '63161283' ) ; +test( macro , '1073741824' , 22 , '48806446' ) ; +test( macro , '-1073741824' , 22 , '-48806447' ) ; +test( macro , '1073741824' , -22 , '-48806447' ) ; +test( macro , '-1073741824' , -22 , '48806446' ) ; +test( macro , '1073741824' , 24 , '44739242' ) ; +test( macro , '-1073741824' , 24 , '-44739243' ) ; +test( macro , '1073741824' , -24 , '-44739243' ) ; +test( macro , '-1073741824' , -24 , '44739242' ) ; +test( macro , '1073741824' , 27 , '39768215' ) ; +test( macro , '-1073741824' , 27 , '-39768216' ) ; +test( macro , '1073741824' , -27 , '-39768216' ) ; +test( macro , '-1073741824' , -27 , '39768215' ) ; +test( macro , '1073741824' , 29 , '37025580' ) ; +test( macro , '-1073741824' , 29 , '-37025581' ) ; +test( macro , '1073741824' , -29 , '-37025581' ) ; +test( macro , '-1073741824' , -29 , '37025580' ) ; +test( macro , '1073741824' , 1234 , '870131' ) ; +test( macro , '-1073741824' , 1234 , '-870132' ) ; +test( macro , '1073741824' , -1234 , '-870132' ) ; +test( macro , '-1073741824' , -1234 , '870131' ) ; +test( macro , '1073741824' , 5678 , '189105' ) ; +test( macro , '-1073741824' , 5678 , '-189106' ) ; +test( macro , '1073741824' , -5678 , '-189106' ) ; +test( macro , '-1073741824' , -5678 , '189105' ) ; +test( macro , '1073741824' , 1073741824 , '1' ) ; +test( macro , '-1073741824' , 1073741824 , '-1' ) ; +test( macro , '1073741824' , -1073741824 , '-1' ) ; +test( macro , '-1073741824' , -1073741824 , '1' ) ; +test( macro , '1073741824' , 51676101935731 , '0' ) ; +test( macro , '-1073741824' , 51676101935731 , '-1' ) ; +test( macro , '1073741824' , -51676101935731 , '-1' ) ; +test( macro , '-1073741824' , -51676101935731 , '0' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' ) ; +test( macro , '51676101935731' , 3 , '17225367311910' ) ; +test( macro , '-51676101935731' , 3 , '-17225367311911' ) ; +test( macro , '51676101935731' , -3 , '-17225367311911' ) ; +test( macro , '-51676101935731' , -3 , '17225367311910' ) ; +test( macro , '51676101935731' , 7 , '7382300276533' ) ; +test( macro , '-51676101935731' , 7 , '-7382300276533' ) ; +test( macro , '51676101935731' , -7 , '-7382300276533' ) ; +test( macro , '-51676101935731' , -7 , '7382300276533' ) ; +test( macro , '51676101935731' , 9 , '5741789103970' ) ; +test( macro , '-51676101935731' , 9 , '-5741789103971' ) ; +test( macro , '51676101935731' , -9 , '-5741789103971' ) ; +test( macro , '-51676101935731' , -9 , '5741789103970' ) ; +test( macro , '51676101935731' , 11 , '4697827448702' ) ; +test( macro , '-51676101935731' , 11 , '-4697827448703' ) ; +test( macro , '51676101935731' , -11 , '-4697827448703' ) ; +test( macro , '-51676101935731' , -11 , '4697827448702' ) ; +test( macro , '51676101935731' , 17 , '3039770702101' ) ; +test( macro , '-51676101935731' , 17 , '-3039770702102' ) ; +test( macro , '51676101935731' , -17 , '-3039770702102' ) ; +test( macro , '-51676101935731' , -17 , '3039770702101' ) ; +test( macro , '51676101935731' , 22 , '2348913724351' ) ; +test( macro , '-51676101935731' , 22 , '-2348913724352' ) ; +test( macro , '51676101935731' , -22 , '-2348913724352' ) ; +test( macro , '-51676101935731' , -22 , '2348913724351' ) ; +test( macro , '51676101935731' , 24 , '2153170913988' ) ; +test( macro , '-51676101935731' , 24 , '-2153170913989' ) ; +test( macro , '51676101935731' , -24 , '-2153170913989' ) ; +test( macro , '-51676101935731' , -24 , '2153170913988' ) ; +test( macro , '51676101935731' , 27 , '1913929701323' ) ; +test( macro , '-51676101935731' , 27 , '-1913929701324' ) ; +test( macro , '51676101935731' , -27 , '-1913929701324' ) ; +test( macro , '-51676101935731' , -27 , '1913929701323' ) ; +test( macro , '51676101935731' , 29 , '1781934549507' ) ; +test( macro , '-51676101935731' , 29 , '-1781934549508' ) ; +test( macro , '51676101935731' , -29 , '-1781934549508' ) ; +test( macro , '-51676101935731' , -29 , '1781934549507' ) ; +test( macro , '51676101935731' , 1234 , '41876905944' ) ; +test( macro , '-51676101935731' , 1234 , '-41876905945' ) ; +test( macro , '51676101935731' , -1234 , '-41876905945' ) ; +test( macro , '-51676101935731' , -1234 , '41876905944' ) ; +test( macro , '51676101935731' , 5678 , '9101109886' ) ; +test( macro , '-51676101935731' , 5678 , '-9101109887' ) ; +test( macro , '51676101935731' , -5678 , '-9101109887' ) ; +test( macro , '-51676101935731' , -5678 , '9101109886' ) ; +test( macro , '51676101935731' , 1073741824 , '48127' ) ; +test( macro , '-51676101935731' , 1073741824 , '-48128' ) ; +test( macro , '51676101935731' , -1073741824 , '-48128' ) ; +test( macro , '-51676101935731' , -1073741824 , '48127' ) ; +test( macro , '51676101935731' , 51676101935731 , '1' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-1' ) ; +test( macro , '51676101935731' , -51676101935731 , '-1' ) ; +test( macro , '-51676101935731' , -51676101935731 , '1' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , 3 , '-239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , -3 , '-239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , -3 , '239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , 7 , '102556855384550369824321' ) ; +test( macro , '-717897987691852588770249' , 7 , '-102556855384550369824322' ) ; +test( macro , '717897987691852588770249' , -7 , '-102556855384550369824322' ) ; +test( macro , '-717897987691852588770249' , -7 , '102556855384550369824321' ) ; +test( macro , '717897987691852588770249' , 9 , '79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , 9 , '-79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , -9 , '-79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , -9 , '79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , 11 , '65263453426532053524568' ) ; +test( macro , '-717897987691852588770249' , 11 , '-65263453426532053524569' ) ; +test( macro , '717897987691852588770249' , -11 , '-65263453426532053524569' ) ; +test( macro , '-717897987691852588770249' , -11 , '65263453426532053524568' ) ; +test( macro , '717897987691852588770249' , 17 , '42229293393638387574720' ) ; +test( macro , '-717897987691852588770249' , 17 , '-42229293393638387574721' ) ; +test( macro , '717897987691852588770249' , -17 , '-42229293393638387574721' ) ; +test( macro , '-717897987691852588770249' , -17 , '42229293393638387574720' ) ; +test( macro , '717897987691852588770249' , 22 , '32631726713266026762284' ) ; +test( macro , '-717897987691852588770249' , 22 , '-32631726713266026762285' ) ; +test( macro , '717897987691852588770249' , -22 , '-32631726713266026762285' ) ; +test( macro , '-717897987691852588770249' , -22 , '32631726713266026762284' ) ; +test( macro , '717897987691852588770249' , 24 , '29912416153827191198760' ) ; +test( macro , '-717897987691852588770249' , 24 , '-29912416153827191198761' ) ; +test( macro , '717897987691852588770249' , -24 , '-29912416153827191198761' ) ; +test( macro , '-717897987691852588770249' , -24 , '29912416153827191198760' ) ; +test( macro , '717897987691852588770249' , 27 , '26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , 27 , '-26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , -27 , '-26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , -27 , '26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , 29 , '24755103023856985819663' ) ; +test( macro , '-717897987691852588770249' , 29 , '-24755103023856985819664' ) ; +test( macro , '717897987691852588770249' , -29 , '-24755103023856985819664' ) ; +test( macro , '-717897987691852588770249' , -29 , '24755103023856985819663' ) ; +test( macro , '717897987691852588770249' , 1234 , '581764981922084755891' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-581764981922084755892' ) ; +test( macro , '717897987691852588770249' , -1234 , '-581764981922084755892' ) ; +test( macro , '-717897987691852588770249' , -1234 , '581764981922084755891' ) ; +test( macro , '717897987691852588770249' , 5678 , '126435010160593974774' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-126435010160593974775' ) ; +test( macro , '717897987691852588770249' , -5678 , '-126435010160593974775' ) ; +test( macro , '-717897987691852588770249' , -5678 , '126435010160593974774' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '668594602208447' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-668594602208448' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-668594602208448' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '668594602208447' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '13892262782' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-13892262783' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-13892262783' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '13892262782' ) ; diff --git a/test/src/integer/arithmetic/iadd.js b/test/src/integer/arithmetic/iadd.js index 77056c2..5b876d3 100644 --- a/test/src/integer/arithmetic/iadd.js +++ b/test/src/integer/arithmetic/iadd.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} += ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `iadd(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '2' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; test( macro , '-1' , '-1' , '-2' ) ; +test( macro , '1' , '3' , '4' ) ; +test( macro , '-1' , '3' , '2' ) ; +test( macro , '1' , '-3' , '-2' ) ; +test( macro , '-1' , '-3' , '-4' ) ; +test( macro , '1' , '7' , '8' ) ; +test( macro , '-1' , '7' , '6' ) ; +test( macro , '1' , '-7' , '-6' ) ; +test( macro , '-1' , '-7' , '-8' ) ; +test( macro , '1' , '9' , '10' ) ; +test( macro , '-1' , '9' , '8' ) ; +test( macro , '1' , '-9' , '-8' ) ; +test( macro , '-1' , '-9' , '-10' ) ; +test( macro , '1' , '11' , '12' ) ; +test( macro , '-1' , '11' , '10' ) ; +test( macro , '1' , '-11' , '-10' ) ; +test( macro , '-1' , '-11' , '-12' ) ; test( macro , '1' , '17' , '18' ) ; test( macro , '-1' , '17' , '16' ) ; test( macro , '1' , '-17' , '-16' ) ; test( macro , '-1' , '-17' , '-18' ) ; -test( macro , '1' , '51676101935731' , '51676101935732' ) ; -test( macro , '-1' , '51676101935731' , '51676101935730' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '-51676101935731' , '-51676101935732' ) ; +test( macro , '1' , '22' , '23' ) ; +test( macro , '-1' , '22' , '21' ) ; +test( macro , '1' , '-22' , '-21' ) ; +test( macro , '-1' , '-22' , '-23' ) ; +test( macro , '1' , '24' , '25' ) ; +test( macro , '-1' , '24' , '23' ) ; +test( macro , '1' , '-24' , '-23' ) ; +test( macro , '-1' , '-24' , '-25' ) ; +test( macro , '1' , '27' , '28' ) ; +test( macro , '-1' , '27' , '26' ) ; +test( macro , '1' , '-27' , '-26' ) ; +test( macro , '-1' , '-27' , '-28' ) ; +test( macro , '1' , '29' , '30' ) ; +test( macro , '-1' , '29' , '28' ) ; +test( macro , '1' , '-29' , '-28' ) ; +test( macro , '-1' , '-29' , '-30' ) ; +test( macro , '1' , '1234' , '1235' ) ; +test( macro , '-1' , '1234' , '1233' ) ; +test( macro , '1' , '-1234' , '-1233' ) ; +test( macro , '-1' , '-1234' , '-1235' ) ; +test( macro , '1' , '5678' , '5679' ) ; +test( macro , '-1' , '5678' , '5677' ) ; +test( macro , '1' , '-5678' , '-5677' ) ; +test( macro , '-1' , '-5678' , '-5679' ) ; test( macro , '1' , '1073741824' , '1073741825' ) ; test( macro , '-1' , '1073741824' , '1073741823' ) ; test( macro , '1' , '-1073741824' , '-1073741823' ) ; test( macro , '-1' , '-1073741824' , '-1073741825' ) ; +test( macro , '1' , '51676101935731' , '51676101935732' ) ; +test( macro , '-1' , '51676101935731' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '-51676101935732' ) ; test( macro , '1' , '717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-717897987691852588770250' ) ; +test( macro , '3' , '1' , '4' ) ; +test( macro , '-3' , '1' , '-2' ) ; +test( macro , '3' , '-1' , '2' ) ; +test( macro , '-3' , '-1' , '-4' ) ; +test( macro , '3' , '3' , '6' ) ; +test( macro , '-3' , '3' , '0' ) ; +test( macro , '3' , '-3' , '0' ) ; +test( macro , '-3' , '-3' , '-6' ) ; +test( macro , '3' , '7' , '10' ) ; +test( macro , '-3' , '7' , '4' ) ; +test( macro , '3' , '-7' , '-4' ) ; +test( macro , '-3' , '-7' , '-10' ) ; +test( macro , '3' , '9' , '12' ) ; +test( macro , '-3' , '9' , '6' ) ; +test( macro , '3' , '-9' , '-6' ) ; +test( macro , '-3' , '-9' , '-12' ) ; +test( macro , '3' , '11' , '14' ) ; +test( macro , '-3' , '11' , '8' ) ; +test( macro , '3' , '-11' , '-8' ) ; +test( macro , '-3' , '-11' , '-14' ) ; +test( macro , '3' , '17' , '20' ) ; +test( macro , '-3' , '17' , '14' ) ; +test( macro , '3' , '-17' , '-14' ) ; +test( macro , '-3' , '-17' , '-20' ) ; +test( macro , '3' , '22' , '25' ) ; +test( macro , '-3' , '22' , '19' ) ; +test( macro , '3' , '-22' , '-19' ) ; +test( macro , '-3' , '-22' , '-25' ) ; +test( macro , '3' , '24' , '27' ) ; +test( macro , '-3' , '24' , '21' ) ; +test( macro , '3' , '-24' , '-21' ) ; +test( macro , '-3' , '-24' , '-27' ) ; +test( macro , '3' , '27' , '30' ) ; +test( macro , '-3' , '27' , '24' ) ; +test( macro , '3' , '-27' , '-24' ) ; +test( macro , '-3' , '-27' , '-30' ) ; +test( macro , '3' , '29' , '32' ) ; +test( macro , '-3' , '29' , '26' ) ; +test( macro , '3' , '-29' , '-26' ) ; +test( macro , '-3' , '-29' , '-32' ) ; +test( macro , '3' , '1234' , '1237' ) ; +test( macro , '-3' , '1234' , '1231' ) ; +test( macro , '3' , '-1234' , '-1231' ) ; +test( macro , '-3' , '-1234' , '-1237' ) ; +test( macro , '3' , '5678' , '5681' ) ; +test( macro , '-3' , '5678' , '5675' ) ; +test( macro , '3' , '-5678' , '-5675' ) ; +test( macro , '-3' , '-5678' , '-5681' ) ; +test( macro , '3' , '1073741824' , '1073741827' ) ; +test( macro , '-3' , '1073741824' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '-1073741827' ) ; +test( macro , '3' , '51676101935731' , '51676101935734' ) ; +test( macro , '-3' , '51676101935731' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '-51676101935734' ) ; +test( macro , '3' , '717897987691852588770249' , '717897987691852588770252' ) ; +test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '7' , '1' , '8' ) ; +test( macro , '-7' , '1' , '-6' ) ; +test( macro , '7' , '-1' , '6' ) ; +test( macro , '-7' , '-1' , '-8' ) ; +test( macro , '7' , '3' , '10' ) ; +test( macro , '-7' , '3' , '-4' ) ; +test( macro , '7' , '-3' , '4' ) ; +test( macro , '-7' , '-3' , '-10' ) ; +test( macro , '7' , '7' , '14' ) ; +test( macro , '-7' , '7' , '0' ) ; +test( macro , '7' , '-7' , '0' ) ; +test( macro , '-7' , '-7' , '-14' ) ; +test( macro , '7' , '9' , '16' ) ; +test( macro , '-7' , '9' , '2' ) ; +test( macro , '7' , '-9' , '-2' ) ; +test( macro , '-7' , '-9' , '-16' ) ; +test( macro , '7' , '11' , '18' ) ; +test( macro , '-7' , '11' , '4' ) ; +test( macro , '7' , '-11' , '-4' ) ; +test( macro , '-7' , '-11' , '-18' ) ; +test( macro , '7' , '17' , '24' ) ; +test( macro , '-7' , '17' , '10' ) ; +test( macro , '7' , '-17' , '-10' ) ; +test( macro , '-7' , '-17' , '-24' ) ; +test( macro , '7' , '22' , '29' ) ; +test( macro , '-7' , '22' , '15' ) ; +test( macro , '7' , '-22' , '-15' ) ; +test( macro , '-7' , '-22' , '-29' ) ; +test( macro , '7' , '24' , '31' ) ; +test( macro , '-7' , '24' , '17' ) ; +test( macro , '7' , '-24' , '-17' ) ; +test( macro , '-7' , '-24' , '-31' ) ; +test( macro , '7' , '27' , '34' ) ; +test( macro , '-7' , '27' , '20' ) ; +test( macro , '7' , '-27' , '-20' ) ; +test( macro , '-7' , '-27' , '-34' ) ; +test( macro , '7' , '29' , '36' ) ; +test( macro , '-7' , '29' , '22' ) ; +test( macro , '7' , '-29' , '-22' ) ; +test( macro , '-7' , '-29' , '-36' ) ; +test( macro , '7' , '1234' , '1241' ) ; +test( macro , '-7' , '1234' , '1227' ) ; +test( macro , '7' , '-1234' , '-1227' ) ; +test( macro , '-7' , '-1234' , '-1241' ) ; +test( macro , '7' , '5678' , '5685' ) ; +test( macro , '-7' , '5678' , '5671' ) ; +test( macro , '7' , '-5678' , '-5671' ) ; +test( macro , '-7' , '-5678' , '-5685' ) ; +test( macro , '7' , '1073741824' , '1073741831' ) ; +test( macro , '-7' , '1073741824' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '-1073741831' ) ; +test( macro , '7' , '51676101935731' , '51676101935738' ) ; +test( macro , '-7' , '51676101935731' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '-51676101935738' ) ; +test( macro , '7' , '717897987691852588770249' , '717897987691852588770256' ) ; +test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '9' , '1' , '10' ) ; +test( macro , '-9' , '1' , '-8' ) ; +test( macro , '9' , '-1' , '8' ) ; +test( macro , '-9' , '-1' , '-10' ) ; +test( macro , '9' , '3' , '12' ) ; +test( macro , '-9' , '3' , '-6' ) ; +test( macro , '9' , '-3' , '6' ) ; +test( macro , '-9' , '-3' , '-12' ) ; +test( macro , '9' , '7' , '16' ) ; +test( macro , '-9' , '7' , '-2' ) ; +test( macro , '9' , '-7' , '2' ) ; +test( macro , '-9' , '-7' , '-16' ) ; +test( macro , '9' , '9' , '18' ) ; +test( macro , '-9' , '9' , '0' ) ; +test( macro , '9' , '-9' , '0' ) ; +test( macro , '-9' , '-9' , '-18' ) ; +test( macro , '9' , '11' , '20' ) ; +test( macro , '-9' , '11' , '2' ) ; +test( macro , '9' , '-11' , '-2' ) ; +test( macro , '-9' , '-11' , '-20' ) ; +test( macro , '9' , '17' , '26' ) ; +test( macro , '-9' , '17' , '8' ) ; +test( macro , '9' , '-17' , '-8' ) ; +test( macro , '-9' , '-17' , '-26' ) ; +test( macro , '9' , '22' , '31' ) ; +test( macro , '-9' , '22' , '13' ) ; +test( macro , '9' , '-22' , '-13' ) ; +test( macro , '-9' , '-22' , '-31' ) ; +test( macro , '9' , '24' , '33' ) ; +test( macro , '-9' , '24' , '15' ) ; +test( macro , '9' , '-24' , '-15' ) ; +test( macro , '-9' , '-24' , '-33' ) ; +test( macro , '9' , '27' , '36' ) ; +test( macro , '-9' , '27' , '18' ) ; +test( macro , '9' , '-27' , '-18' ) ; +test( macro , '-9' , '-27' , '-36' ) ; +test( macro , '9' , '29' , '38' ) ; +test( macro , '-9' , '29' , '20' ) ; +test( macro , '9' , '-29' , '-20' ) ; +test( macro , '-9' , '-29' , '-38' ) ; +test( macro , '9' , '1234' , '1243' ) ; +test( macro , '-9' , '1234' , '1225' ) ; +test( macro , '9' , '-1234' , '-1225' ) ; +test( macro , '-9' , '-1234' , '-1243' ) ; +test( macro , '9' , '5678' , '5687' ) ; +test( macro , '-9' , '5678' , '5669' ) ; +test( macro , '9' , '-5678' , '-5669' ) ; +test( macro , '-9' , '-5678' , '-5687' ) ; +test( macro , '9' , '1073741824' , '1073741833' ) ; +test( macro , '-9' , '1073741824' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '-1073741833' ) ; +test( macro , '9' , '51676101935731' , '51676101935740' ) ; +test( macro , '-9' , '51676101935731' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '-51676101935740' ) ; +test( macro , '9' , '717897987691852588770249' , '717897987691852588770258' ) ; +test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '11' , '1' , '12' ) ; +test( macro , '-11' , '1' , '-10' ) ; +test( macro , '11' , '-1' , '10' ) ; +test( macro , '-11' , '-1' , '-12' ) ; +test( macro , '11' , '3' , '14' ) ; +test( macro , '-11' , '3' , '-8' ) ; +test( macro , '11' , '-3' , '8' ) ; +test( macro , '-11' , '-3' , '-14' ) ; +test( macro , '11' , '7' , '18' ) ; +test( macro , '-11' , '7' , '-4' ) ; +test( macro , '11' , '-7' , '4' ) ; +test( macro , '-11' , '-7' , '-18' ) ; +test( macro , '11' , '9' , '20' ) ; +test( macro , '-11' , '9' , '-2' ) ; +test( macro , '11' , '-9' , '2' ) ; +test( macro , '-11' , '-9' , '-20' ) ; +test( macro , '11' , '11' , '22' ) ; +test( macro , '-11' , '11' , '0' ) ; +test( macro , '11' , '-11' , '0' ) ; +test( macro , '-11' , '-11' , '-22' ) ; +test( macro , '11' , '17' , '28' ) ; +test( macro , '-11' , '17' , '6' ) ; +test( macro , '11' , '-17' , '-6' ) ; +test( macro , '-11' , '-17' , '-28' ) ; +test( macro , '11' , '22' , '33' ) ; +test( macro , '-11' , '22' , '11' ) ; +test( macro , '11' , '-22' , '-11' ) ; +test( macro , '-11' , '-22' , '-33' ) ; +test( macro , '11' , '24' , '35' ) ; +test( macro , '-11' , '24' , '13' ) ; +test( macro , '11' , '-24' , '-13' ) ; +test( macro , '-11' , '-24' , '-35' ) ; +test( macro , '11' , '27' , '38' ) ; +test( macro , '-11' , '27' , '16' ) ; +test( macro , '11' , '-27' , '-16' ) ; +test( macro , '-11' , '-27' , '-38' ) ; +test( macro , '11' , '29' , '40' ) ; +test( macro , '-11' , '29' , '18' ) ; +test( macro , '11' , '-29' , '-18' ) ; +test( macro , '-11' , '-29' , '-40' ) ; +test( macro , '11' , '1234' , '1245' ) ; +test( macro , '-11' , '1234' , '1223' ) ; +test( macro , '11' , '-1234' , '-1223' ) ; +test( macro , '-11' , '-1234' , '-1245' ) ; +test( macro , '11' , '5678' , '5689' ) ; +test( macro , '-11' , '5678' , '5667' ) ; +test( macro , '11' , '-5678' , '-5667' ) ; +test( macro , '-11' , '-5678' , '-5689' ) ; +test( macro , '11' , '1073741824' , '1073741835' ) ; +test( macro , '-11' , '1073741824' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '-1073741835' ) ; +test( macro , '11' , '51676101935731' , '51676101935742' ) ; +test( macro , '-11' , '51676101935731' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '-51676101935742' ) ; +test( macro , '11' , '717897987691852588770249' , '717897987691852588770260' ) ; +test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '-717897987691852588770260' ) ; test( macro , '17' , '1' , '18' ) ; test( macro , '-17' , '1' , '-16' ) ; test( macro , '17' , '-1' , '16' ) ; test( macro , '-17' , '-1' , '-18' ) ; +test( macro , '17' , '3' , '20' ) ; +test( macro , '-17' , '3' , '-14' ) ; +test( macro , '17' , '-3' , '14' ) ; +test( macro , '-17' , '-3' , '-20' ) ; +test( macro , '17' , '7' , '24' ) ; +test( macro , '-17' , '7' , '-10' ) ; +test( macro , '17' , '-7' , '10' ) ; +test( macro , '-17' , '-7' , '-24' ) ; +test( macro , '17' , '9' , '26' ) ; +test( macro , '-17' , '9' , '-8' ) ; +test( macro , '17' , '-9' , '8' ) ; +test( macro , '-17' , '-9' , '-26' ) ; +test( macro , '17' , '11' , '28' ) ; +test( macro , '-17' , '11' , '-6' ) ; +test( macro , '17' , '-11' , '6' ) ; +test( macro , '-17' , '-11' , '-28' ) ; test( macro , '17' , '17' , '34' ) ; test( macro , '-17' , '17' , '0' ) ; test( macro , '17' , '-17' , '0' ) ; test( macro , '-17' , '-17' , '-34' ) ; -test( macro , '17' , '51676101935731' , '51676101935748' ) ; -test( macro , '-17' , '51676101935731' , '51676101935714' ) ; -test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '-51676101935731' , '-51676101935748' ) ; +test( macro , '17' , '22' , '39' ) ; +test( macro , '-17' , '22' , '5' ) ; +test( macro , '17' , '-22' , '-5' ) ; +test( macro , '-17' , '-22' , '-39' ) ; +test( macro , '17' , '24' , '41' ) ; +test( macro , '-17' , '24' , '7' ) ; +test( macro , '17' , '-24' , '-7' ) ; +test( macro , '-17' , '-24' , '-41' ) ; +test( macro , '17' , '27' , '44' ) ; +test( macro , '-17' , '27' , '10' ) ; +test( macro , '17' , '-27' , '-10' ) ; +test( macro , '-17' , '-27' , '-44' ) ; +test( macro , '17' , '29' , '46' ) ; +test( macro , '-17' , '29' , '12' ) ; +test( macro , '17' , '-29' , '-12' ) ; +test( macro , '-17' , '-29' , '-46' ) ; +test( macro , '17' , '1234' , '1251' ) ; +test( macro , '-17' , '1234' , '1217' ) ; +test( macro , '17' , '-1234' , '-1217' ) ; +test( macro , '-17' , '-1234' , '-1251' ) ; +test( macro , '17' , '5678' , '5695' ) ; +test( macro , '-17' , '5678' , '5661' ) ; +test( macro , '17' , '-5678' , '-5661' ) ; +test( macro , '-17' , '-5678' , '-5695' ) ; test( macro , '17' , '1073741824' , '1073741841' ) ; test( macro , '-17' , '1073741824' , '1073741807' ) ; test( macro , '17' , '-1073741824' , '-1073741807' ) ; test( macro , '-17' , '-1073741824' , '-1073741841' ) ; +test( macro , '17' , '51676101935731' , '51676101935748' ) ; +test( macro , '-17' , '51676101935731' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '-51676101935748' ) ; test( macro , '17' , '717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-717897987691852588770266' ) ; -test( macro , '51676101935731' , '1' , '51676101935732' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; -test( macro , '51676101935731' , '-1' , '51676101935730' ) ; -test( macro , '-51676101935731' , '-1' , '-51676101935732' ) ; -test( macro , '51676101935731' , '17' , '51676101935748' ) ; -test( macro , '-51676101935731' , '17' , '-51676101935714' ) ; -test( macro , '51676101935731' , '-17' , '51676101935714' ) ; -test( macro , '-51676101935731' , '-17' , '-51676101935748' ) ; -test( macro , '51676101935731' , '51676101935731' , '103352203871462' ) ; -test( macro , '-51676101935731' , '51676101935731' , '0' ) ; -test( macro , '51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '-103352203871462' ) ; -test( macro , '51676101935731' , '1073741824' , '51677175677555' ) ; -test( macro , '-51676101935731' , '1073741824' , '-51675028193907' ) ; -test( macro , '51676101935731' , '-1073741824' , '51675028193907' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-51677175677555' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '717897987743528690705980' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '22' , '1' , '23' ) ; +test( macro , '-22' , '1' , '-21' ) ; +test( macro , '22' , '-1' , '21' ) ; +test( macro , '-22' , '-1' , '-23' ) ; +test( macro , '22' , '3' , '25' ) ; +test( macro , '-22' , '3' , '-19' ) ; +test( macro , '22' , '-3' , '19' ) ; +test( macro , '-22' , '-3' , '-25' ) ; +test( macro , '22' , '7' , '29' ) ; +test( macro , '-22' , '7' , '-15' ) ; +test( macro , '22' , '-7' , '15' ) ; +test( macro , '-22' , '-7' , '-29' ) ; +test( macro , '22' , '9' , '31' ) ; +test( macro , '-22' , '9' , '-13' ) ; +test( macro , '22' , '-9' , '13' ) ; +test( macro , '-22' , '-9' , '-31' ) ; +test( macro , '22' , '11' , '33' ) ; +test( macro , '-22' , '11' , '-11' ) ; +test( macro , '22' , '-11' , '11' ) ; +test( macro , '-22' , '-11' , '-33' ) ; +test( macro , '22' , '17' , '39' ) ; +test( macro , '-22' , '17' , '-5' ) ; +test( macro , '22' , '-17' , '5' ) ; +test( macro , '-22' , '-17' , '-39' ) ; +test( macro , '22' , '22' , '44' ) ; +test( macro , '-22' , '22' , '0' ) ; +test( macro , '22' , '-22' , '0' ) ; +test( macro , '-22' , '-22' , '-44' ) ; +test( macro , '22' , '24' , '46' ) ; +test( macro , '-22' , '24' , '2' ) ; +test( macro , '22' , '-24' , '-2' ) ; +test( macro , '-22' , '-24' , '-46' ) ; +test( macro , '22' , '27' , '49' ) ; +test( macro , '-22' , '27' , '5' ) ; +test( macro , '22' , '-27' , '-5' ) ; +test( macro , '-22' , '-27' , '-49' ) ; +test( macro , '22' , '29' , '51' ) ; +test( macro , '-22' , '29' , '7' ) ; +test( macro , '22' , '-29' , '-7' ) ; +test( macro , '-22' , '-29' , '-51' ) ; +test( macro , '22' , '1234' , '1256' ) ; +test( macro , '-22' , '1234' , '1212' ) ; +test( macro , '22' , '-1234' , '-1212' ) ; +test( macro , '-22' , '-1234' , '-1256' ) ; +test( macro , '22' , '5678' , '5700' ) ; +test( macro , '-22' , '5678' , '5656' ) ; +test( macro , '22' , '-5678' , '-5656' ) ; +test( macro , '-22' , '-5678' , '-5700' ) ; +test( macro , '22' , '1073741824' , '1073741846' ) ; +test( macro , '-22' , '1073741824' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '-1073741846' ) ; +test( macro , '22' , '51676101935731' , '51676101935753' ) ; +test( macro , '-22' , '51676101935731' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '-51676101935753' ) ; +test( macro , '22' , '717897987691852588770249' , '717897987691852588770271' ) ; +test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '24' , '1' , '25' ) ; +test( macro , '-24' , '1' , '-23' ) ; +test( macro , '24' , '-1' , '23' ) ; +test( macro , '-24' , '-1' , '-25' ) ; +test( macro , '24' , '3' , '27' ) ; +test( macro , '-24' , '3' , '-21' ) ; +test( macro , '24' , '-3' , '21' ) ; +test( macro , '-24' , '-3' , '-27' ) ; +test( macro , '24' , '7' , '31' ) ; +test( macro , '-24' , '7' , '-17' ) ; +test( macro , '24' , '-7' , '17' ) ; +test( macro , '-24' , '-7' , '-31' ) ; +test( macro , '24' , '9' , '33' ) ; +test( macro , '-24' , '9' , '-15' ) ; +test( macro , '24' , '-9' , '15' ) ; +test( macro , '-24' , '-9' , '-33' ) ; +test( macro , '24' , '11' , '35' ) ; +test( macro , '-24' , '11' , '-13' ) ; +test( macro , '24' , '-11' , '13' ) ; +test( macro , '-24' , '-11' , '-35' ) ; +test( macro , '24' , '17' , '41' ) ; +test( macro , '-24' , '17' , '-7' ) ; +test( macro , '24' , '-17' , '7' ) ; +test( macro , '-24' , '-17' , '-41' ) ; +test( macro , '24' , '22' , '46' ) ; +test( macro , '-24' , '22' , '-2' ) ; +test( macro , '24' , '-22' , '2' ) ; +test( macro , '-24' , '-22' , '-46' ) ; +test( macro , '24' , '24' , '48' ) ; +test( macro , '-24' , '24' , '0' ) ; +test( macro , '24' , '-24' , '0' ) ; +test( macro , '-24' , '-24' , '-48' ) ; +test( macro , '24' , '27' , '51' ) ; +test( macro , '-24' , '27' , '3' ) ; +test( macro , '24' , '-27' , '-3' ) ; +test( macro , '-24' , '-27' , '-51' ) ; +test( macro , '24' , '29' , '53' ) ; +test( macro , '-24' , '29' , '5' ) ; +test( macro , '24' , '-29' , '-5' ) ; +test( macro , '-24' , '-29' , '-53' ) ; +test( macro , '24' , '1234' , '1258' ) ; +test( macro , '-24' , '1234' , '1210' ) ; +test( macro , '24' , '-1234' , '-1210' ) ; +test( macro , '-24' , '-1234' , '-1258' ) ; +test( macro , '24' , '5678' , '5702' ) ; +test( macro , '-24' , '5678' , '5654' ) ; +test( macro , '24' , '-5678' , '-5654' ) ; +test( macro , '-24' , '-5678' , '-5702' ) ; +test( macro , '24' , '1073741824' , '1073741848' ) ; +test( macro , '-24' , '1073741824' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '-1073741848' ) ; +test( macro , '24' , '51676101935731' , '51676101935755' ) ; +test( macro , '-24' , '51676101935731' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '-51676101935755' ) ; +test( macro , '24' , '717897987691852588770249' , '717897987691852588770273' ) ; +test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '27' , '1' , '28' ) ; +test( macro , '-27' , '1' , '-26' ) ; +test( macro , '27' , '-1' , '26' ) ; +test( macro , '-27' , '-1' , '-28' ) ; +test( macro , '27' , '3' , '30' ) ; +test( macro , '-27' , '3' , '-24' ) ; +test( macro , '27' , '-3' , '24' ) ; +test( macro , '-27' , '-3' , '-30' ) ; +test( macro , '27' , '7' , '34' ) ; +test( macro , '-27' , '7' , '-20' ) ; +test( macro , '27' , '-7' , '20' ) ; +test( macro , '-27' , '-7' , '-34' ) ; +test( macro , '27' , '9' , '36' ) ; +test( macro , '-27' , '9' , '-18' ) ; +test( macro , '27' , '-9' , '18' ) ; +test( macro , '-27' , '-9' , '-36' ) ; +test( macro , '27' , '11' , '38' ) ; +test( macro , '-27' , '11' , '-16' ) ; +test( macro , '27' , '-11' , '16' ) ; +test( macro , '-27' , '-11' , '-38' ) ; +test( macro , '27' , '17' , '44' ) ; +test( macro , '-27' , '17' , '-10' ) ; +test( macro , '27' , '-17' , '10' ) ; +test( macro , '-27' , '-17' , '-44' ) ; +test( macro , '27' , '22' , '49' ) ; +test( macro , '-27' , '22' , '-5' ) ; +test( macro , '27' , '-22' , '5' ) ; +test( macro , '-27' , '-22' , '-49' ) ; +test( macro , '27' , '24' , '51' ) ; +test( macro , '-27' , '24' , '-3' ) ; +test( macro , '27' , '-24' , '3' ) ; +test( macro , '-27' , '-24' , '-51' ) ; +test( macro , '27' , '27' , '54' ) ; +test( macro , '-27' , '27' , '0' ) ; +test( macro , '27' , '-27' , '0' ) ; +test( macro , '-27' , '-27' , '-54' ) ; +test( macro , '27' , '29' , '56' ) ; +test( macro , '-27' , '29' , '2' ) ; +test( macro , '27' , '-29' , '-2' ) ; +test( macro , '-27' , '-29' , '-56' ) ; +test( macro , '27' , '1234' , '1261' ) ; +test( macro , '-27' , '1234' , '1207' ) ; +test( macro , '27' , '-1234' , '-1207' ) ; +test( macro , '-27' , '-1234' , '-1261' ) ; +test( macro , '27' , '5678' , '5705' ) ; +test( macro , '-27' , '5678' , '5651' ) ; +test( macro , '27' , '-5678' , '-5651' ) ; +test( macro , '-27' , '-5678' , '-5705' ) ; +test( macro , '27' , '1073741824' , '1073741851' ) ; +test( macro , '-27' , '1073741824' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '-1073741851' ) ; +test( macro , '27' , '51676101935731' , '51676101935758' ) ; +test( macro , '-27' , '51676101935731' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '-51676101935758' ) ; +test( macro , '27' , '717897987691852588770249' , '717897987691852588770276' ) ; +test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '29' , '1' , '30' ) ; +test( macro , '-29' , '1' , '-28' ) ; +test( macro , '29' , '-1' , '28' ) ; +test( macro , '-29' , '-1' , '-30' ) ; +test( macro , '29' , '3' , '32' ) ; +test( macro , '-29' , '3' , '-26' ) ; +test( macro , '29' , '-3' , '26' ) ; +test( macro , '-29' , '-3' , '-32' ) ; +test( macro , '29' , '7' , '36' ) ; +test( macro , '-29' , '7' , '-22' ) ; +test( macro , '29' , '-7' , '22' ) ; +test( macro , '-29' , '-7' , '-36' ) ; +test( macro , '29' , '9' , '38' ) ; +test( macro , '-29' , '9' , '-20' ) ; +test( macro , '29' , '-9' , '20' ) ; +test( macro , '-29' , '-9' , '-38' ) ; +test( macro , '29' , '11' , '40' ) ; +test( macro , '-29' , '11' , '-18' ) ; +test( macro , '29' , '-11' , '18' ) ; +test( macro , '-29' , '-11' , '-40' ) ; +test( macro , '29' , '17' , '46' ) ; +test( macro , '-29' , '17' , '-12' ) ; +test( macro , '29' , '-17' , '12' ) ; +test( macro , '-29' , '-17' , '-46' ) ; +test( macro , '29' , '22' , '51' ) ; +test( macro , '-29' , '22' , '-7' ) ; +test( macro , '29' , '-22' , '7' ) ; +test( macro , '-29' , '-22' , '-51' ) ; +test( macro , '29' , '24' , '53' ) ; +test( macro , '-29' , '24' , '-5' ) ; +test( macro , '29' , '-24' , '5' ) ; +test( macro , '-29' , '-24' , '-53' ) ; +test( macro , '29' , '27' , '56' ) ; +test( macro , '-29' , '27' , '-2' ) ; +test( macro , '29' , '-27' , '2' ) ; +test( macro , '-29' , '-27' , '-56' ) ; +test( macro , '29' , '29' , '58' ) ; +test( macro , '-29' , '29' , '0' ) ; +test( macro , '29' , '-29' , '0' ) ; +test( macro , '-29' , '-29' , '-58' ) ; +test( macro , '29' , '1234' , '1263' ) ; +test( macro , '-29' , '1234' , '1205' ) ; +test( macro , '29' , '-1234' , '-1205' ) ; +test( macro , '-29' , '-1234' , '-1263' ) ; +test( macro , '29' , '5678' , '5707' ) ; +test( macro , '-29' , '5678' , '5649' ) ; +test( macro , '29' , '-5678' , '-5649' ) ; +test( macro , '-29' , '-5678' , '-5707' ) ; +test( macro , '29' , '1073741824' , '1073741853' ) ; +test( macro , '-29' , '1073741824' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '-1073741853' ) ; +test( macro , '29' , '51676101935731' , '51676101935760' ) ; +test( macro , '-29' , '51676101935731' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '-51676101935760' ) ; +test( macro , '29' , '717897987691852588770249' , '717897987691852588770278' ) ; +test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '1234' , '1' , '1235' ) ; +test( macro , '-1234' , '1' , '-1233' ) ; +test( macro , '1234' , '-1' , '1233' ) ; +test( macro , '-1234' , '-1' , '-1235' ) ; +test( macro , '1234' , '3' , '1237' ) ; +test( macro , '-1234' , '3' , '-1231' ) ; +test( macro , '1234' , '-3' , '1231' ) ; +test( macro , '-1234' , '-3' , '-1237' ) ; +test( macro , '1234' , '7' , '1241' ) ; +test( macro , '-1234' , '7' , '-1227' ) ; +test( macro , '1234' , '-7' , '1227' ) ; +test( macro , '-1234' , '-7' , '-1241' ) ; +test( macro , '1234' , '9' , '1243' ) ; +test( macro , '-1234' , '9' , '-1225' ) ; +test( macro , '1234' , '-9' , '1225' ) ; +test( macro , '-1234' , '-9' , '-1243' ) ; +test( macro , '1234' , '11' , '1245' ) ; +test( macro , '-1234' , '11' , '-1223' ) ; +test( macro , '1234' , '-11' , '1223' ) ; +test( macro , '-1234' , '-11' , '-1245' ) ; +test( macro , '1234' , '17' , '1251' ) ; +test( macro , '-1234' , '17' , '-1217' ) ; +test( macro , '1234' , '-17' , '1217' ) ; +test( macro , '-1234' , '-17' , '-1251' ) ; +test( macro , '1234' , '22' , '1256' ) ; +test( macro , '-1234' , '22' , '-1212' ) ; +test( macro , '1234' , '-22' , '1212' ) ; +test( macro , '-1234' , '-22' , '-1256' ) ; +test( macro , '1234' , '24' , '1258' ) ; +test( macro , '-1234' , '24' , '-1210' ) ; +test( macro , '1234' , '-24' , '1210' ) ; +test( macro , '-1234' , '-24' , '-1258' ) ; +test( macro , '1234' , '27' , '1261' ) ; +test( macro , '-1234' , '27' , '-1207' ) ; +test( macro , '1234' , '-27' , '1207' ) ; +test( macro , '-1234' , '-27' , '-1261' ) ; +test( macro , '1234' , '29' , '1263' ) ; +test( macro , '-1234' , '29' , '-1205' ) ; +test( macro , '1234' , '-29' , '1205' ) ; +test( macro , '-1234' , '-29' , '-1263' ) ; +test( macro , '1234' , '1234' , '2468' ) ; +test( macro , '-1234' , '1234' , '0' ) ; +test( macro , '1234' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1234' , '-2468' ) ; +test( macro , '1234' , '5678' , '6912' ) ; +test( macro , '-1234' , '5678' , '4444' ) ; +test( macro , '1234' , '-5678' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '-6912' ) ; +test( macro , '1234' , '1073741824' , '1073743058' ) ; +test( macro , '-1234' , '1073741824' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '-1073743058' ) ; +test( macro , '1234' , '51676101935731' , '51676101936965' ) ; +test( macro , '-1234' , '51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '-51676101936965' ) ; +test( macro , '1234' , '717897987691852588770249' , '717897987691852588771483' ) ; +test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '5678' , '1' , '5679' ) ; +test( macro , '-5678' , '1' , '-5677' ) ; +test( macro , '5678' , '-1' , '5677' ) ; +test( macro , '-5678' , '-1' , '-5679' ) ; +test( macro , '5678' , '3' , '5681' ) ; +test( macro , '-5678' , '3' , '-5675' ) ; +test( macro , '5678' , '-3' , '5675' ) ; +test( macro , '-5678' , '-3' , '-5681' ) ; +test( macro , '5678' , '7' , '5685' ) ; +test( macro , '-5678' , '7' , '-5671' ) ; +test( macro , '5678' , '-7' , '5671' ) ; +test( macro , '-5678' , '-7' , '-5685' ) ; +test( macro , '5678' , '9' , '5687' ) ; +test( macro , '-5678' , '9' , '-5669' ) ; +test( macro , '5678' , '-9' , '5669' ) ; +test( macro , '-5678' , '-9' , '-5687' ) ; +test( macro , '5678' , '11' , '5689' ) ; +test( macro , '-5678' , '11' , '-5667' ) ; +test( macro , '5678' , '-11' , '5667' ) ; +test( macro , '-5678' , '-11' , '-5689' ) ; +test( macro , '5678' , '17' , '5695' ) ; +test( macro , '-5678' , '17' , '-5661' ) ; +test( macro , '5678' , '-17' , '5661' ) ; +test( macro , '-5678' , '-17' , '-5695' ) ; +test( macro , '5678' , '22' , '5700' ) ; +test( macro , '-5678' , '22' , '-5656' ) ; +test( macro , '5678' , '-22' , '5656' ) ; +test( macro , '-5678' , '-22' , '-5700' ) ; +test( macro , '5678' , '24' , '5702' ) ; +test( macro , '-5678' , '24' , '-5654' ) ; +test( macro , '5678' , '-24' , '5654' ) ; +test( macro , '-5678' , '-24' , '-5702' ) ; +test( macro , '5678' , '27' , '5705' ) ; +test( macro , '-5678' , '27' , '-5651' ) ; +test( macro , '5678' , '-27' , '5651' ) ; +test( macro , '-5678' , '-27' , '-5705' ) ; +test( macro , '5678' , '29' , '5707' ) ; +test( macro , '-5678' , '29' , '-5649' ) ; +test( macro , '5678' , '-29' , '5649' ) ; +test( macro , '-5678' , '-29' , '-5707' ) ; +test( macro , '5678' , '1234' , '6912' ) ; +test( macro , '-5678' , '1234' , '-4444' ) ; +test( macro , '5678' , '-1234' , '4444' ) ; +test( macro , '-5678' , '-1234' , '-6912' ) ; +test( macro , '5678' , '5678' , '11356' ) ; +test( macro , '-5678' , '5678' , '0' ) ; +test( macro , '5678' , '-5678' , '0' ) ; +test( macro , '-5678' , '-5678' , '-11356' ) ; +test( macro , '5678' , '1073741824' , '1073747502' ) ; +test( macro , '-5678' , '1073741824' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '-1073747502' ) ; +test( macro , '5678' , '51676101935731' , '51676101941409' ) ; +test( macro , '-5678' , '51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '-51676101941409' ) ; +test( macro , '5678' , '717897987691852588770249' , '717897987691852588775927' ) ; +test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '-717897987691852588775927' ) ; test( macro , '1073741824' , '1' , '1073741825' ) ; test( macro , '-1073741824' , '1' , '-1073741823' ) ; test( macro , '1073741824' , '-1' , '1073741823' ) ; test( macro , '-1073741824' , '-1' , '-1073741825' ) ; +test( macro , '1073741824' , '3' , '1073741827' ) ; +test( macro , '-1073741824' , '3' , '-1073741821' ) ; +test( macro , '1073741824' , '-3' , '1073741821' ) ; +test( macro , '-1073741824' , '-3' , '-1073741827' ) ; +test( macro , '1073741824' , '7' , '1073741831' ) ; +test( macro , '-1073741824' , '7' , '-1073741817' ) ; +test( macro , '1073741824' , '-7' , '1073741817' ) ; +test( macro , '-1073741824' , '-7' , '-1073741831' ) ; +test( macro , '1073741824' , '9' , '1073741833' ) ; +test( macro , '-1073741824' , '9' , '-1073741815' ) ; +test( macro , '1073741824' , '-9' , '1073741815' ) ; +test( macro , '-1073741824' , '-9' , '-1073741833' ) ; +test( macro , '1073741824' , '11' , '1073741835' ) ; +test( macro , '-1073741824' , '11' , '-1073741813' ) ; +test( macro , '1073741824' , '-11' , '1073741813' ) ; +test( macro , '-1073741824' , '-11' , '-1073741835' ) ; test( macro , '1073741824' , '17' , '1073741841' ) ; test( macro , '-1073741824' , '17' , '-1073741807' ) ; test( macro , '1073741824' , '-17' , '1073741807' ) ; test( macro , '-1073741824' , '-17' , '-1073741841' ) ; -test( macro , '1073741824' , '51676101935731' , '51677175677555' ) ; -test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; -test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '-51676101935731' , '-51677175677555' ) ; +test( macro , '1073741824' , '22' , '1073741846' ) ; +test( macro , '-1073741824' , '22' , '-1073741802' ) ; +test( macro , '1073741824' , '-22' , '1073741802' ) ; +test( macro , '-1073741824' , '-22' , '-1073741846' ) ; +test( macro , '1073741824' , '24' , '1073741848' ) ; +test( macro , '-1073741824' , '24' , '-1073741800' ) ; +test( macro , '1073741824' , '-24' , '1073741800' ) ; +test( macro , '-1073741824' , '-24' , '-1073741848' ) ; +test( macro , '1073741824' , '27' , '1073741851' ) ; +test( macro , '-1073741824' , '27' , '-1073741797' ) ; +test( macro , '1073741824' , '-27' , '1073741797' ) ; +test( macro , '-1073741824' , '-27' , '-1073741851' ) ; +test( macro , '1073741824' , '29' , '1073741853' ) ; +test( macro , '-1073741824' , '29' , '-1073741795' ) ; +test( macro , '1073741824' , '-29' , '1073741795' ) ; +test( macro , '-1073741824' , '-29' , '-1073741853' ) ; +test( macro , '1073741824' , '1234' , '1073743058' ) ; +test( macro , '-1073741824' , '1234' , '-1073740590' ) ; +test( macro , '1073741824' , '-1234' , '1073740590' ) ; +test( macro , '-1073741824' , '-1234' , '-1073743058' ) ; +test( macro , '1073741824' , '5678' , '1073747502' ) ; +test( macro , '-1073741824' , '5678' , '-1073736146' ) ; +test( macro , '1073741824' , '-5678' , '1073736146' ) ; +test( macro , '-1073741824' , '-5678' , '-1073747502' ) ; test( macro , '1073741824' , '1073741824' , '2147483648' ) ; test( macro , '-1073741824' , '1073741824' , '0' ) ; test( macro , '1073741824' , '-1073741824' , '0' ) ; test( macro , '-1073741824' , '-1073741824' , '-2147483648' ) ; +test( macro , '1073741824' , '51676101935731' , '51677175677555' ) ; +test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '-51677175677555' ) ; test( macro , '1073741824' , '717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-717897987691853662512073' ) ; +test( macro , '51676101935731' , '1' , '51676101935732' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935730' ) ; +test( macro , '51676101935731' , '-1' , '51676101935730' ) ; +test( macro , '-51676101935731' , '-1' , '-51676101935732' ) ; +test( macro , '51676101935731' , '3' , '51676101935734' ) ; +test( macro , '-51676101935731' , '3' , '-51676101935728' ) ; +test( macro , '51676101935731' , '-3' , '51676101935728' ) ; +test( macro , '-51676101935731' , '-3' , '-51676101935734' ) ; +test( macro , '51676101935731' , '7' , '51676101935738' ) ; +test( macro , '-51676101935731' , '7' , '-51676101935724' ) ; +test( macro , '51676101935731' , '-7' , '51676101935724' ) ; +test( macro , '-51676101935731' , '-7' , '-51676101935738' ) ; +test( macro , '51676101935731' , '9' , '51676101935740' ) ; +test( macro , '-51676101935731' , '9' , '-51676101935722' ) ; +test( macro , '51676101935731' , '-9' , '51676101935722' ) ; +test( macro , '-51676101935731' , '-9' , '-51676101935740' ) ; +test( macro , '51676101935731' , '11' , '51676101935742' ) ; +test( macro , '-51676101935731' , '11' , '-51676101935720' ) ; +test( macro , '51676101935731' , '-11' , '51676101935720' ) ; +test( macro , '-51676101935731' , '-11' , '-51676101935742' ) ; +test( macro , '51676101935731' , '17' , '51676101935748' ) ; +test( macro , '-51676101935731' , '17' , '-51676101935714' ) ; +test( macro , '51676101935731' , '-17' , '51676101935714' ) ; +test( macro , '-51676101935731' , '-17' , '-51676101935748' ) ; +test( macro , '51676101935731' , '22' , '51676101935753' ) ; +test( macro , '-51676101935731' , '22' , '-51676101935709' ) ; +test( macro , '51676101935731' , '-22' , '51676101935709' ) ; +test( macro , '-51676101935731' , '-22' , '-51676101935753' ) ; +test( macro , '51676101935731' , '24' , '51676101935755' ) ; +test( macro , '-51676101935731' , '24' , '-51676101935707' ) ; +test( macro , '51676101935731' , '-24' , '51676101935707' ) ; +test( macro , '-51676101935731' , '-24' , '-51676101935755' ) ; +test( macro , '51676101935731' , '27' , '51676101935758' ) ; +test( macro , '-51676101935731' , '27' , '-51676101935704' ) ; +test( macro , '51676101935731' , '-27' , '51676101935704' ) ; +test( macro , '-51676101935731' , '-27' , '-51676101935758' ) ; +test( macro , '51676101935731' , '29' , '51676101935760' ) ; +test( macro , '-51676101935731' , '29' , '-51676101935702' ) ; +test( macro , '51676101935731' , '-29' , '51676101935702' ) ; +test( macro , '-51676101935731' , '-29' , '-51676101935760' ) ; +test( macro , '51676101935731' , '1234' , '51676101936965' ) ; +test( macro , '-51676101935731' , '1234' , '-51676101934497' ) ; +test( macro , '51676101935731' , '-1234' , '51676101934497' ) ; +test( macro , '-51676101935731' , '-1234' , '-51676101936965' ) ; +test( macro , '51676101935731' , '5678' , '51676101941409' ) ; +test( macro , '-51676101935731' , '5678' , '-51676101930053' ) ; +test( macro , '51676101935731' , '-5678' , '51676101930053' ) ; +test( macro , '-51676101935731' , '-5678' , '-51676101941409' ) ; +test( macro , '51676101935731' , '1073741824' , '51677175677555' ) ; +test( macro , '-51676101935731' , '1073741824' , '-51675028193907' ) ; +test( macro , '51676101935731' , '-1073741824' , '51675028193907' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-51677175677555' ) ; +test( macro , '51676101935731' , '51676101935731' , '103352203871462' ) ; +test( macro , '-51676101935731' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '-103352203871462' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '717897987743528690705980' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '-717897987743528690705980' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770248' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '-1' , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , '3' , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , '3' , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , '-3' , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , '-3' , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , '7' , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , '7' , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , '-7' , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , '9' , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , '9' , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , '-9' , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , '-9' , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , '11' , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , '11' , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , '-11' , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-717897987691852588770260' ) ; test( macro , '717897987691852588770249' , '17' , '717897987691852588770266' ) ; test( macro , '-717897987691852588770249' , '17' , '-717897987691852588770232' ) ; test( macro , '717897987691852588770249' , '-17' , '717897987691852588770232' ) ; test( macro , '-717897987691852588770249' , '-17' , '-717897987691852588770266' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '717897987743528690705980' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987640176486834518' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '717897987640176486834518' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '22' , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , '22' , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , '-22' , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , '24' , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , '24' , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , '-24' , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , '27' , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , '27' , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , '-27' , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , '-27' , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , '29' , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , '29' , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , '-29' , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , '1234' , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , '-1234' , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , '5678' , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , '-5678' , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-717897987691852588775927' ) ; test( macro , '717897987691852588770249' , '1073741824' , '717897987691853662512073' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-717897987691851515028425' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '717897987691851515028425' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987743528690705980' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '1435795975383705177540498' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '0' ) ; diff --git a/test/src/integer/arithmetic/iaddn.js b/test/src/integer/arithmetic/iaddn.js new file mode 100644 index 0000000..3551f91 --- /dev/null +++ b/test/src/integer/arithmetic/iaddn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , iaddn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = iaddn( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `iaddn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '2' ) ; +test( macro , '-1' , 1 , '0' ) ; +test( macro , '1' , -1 , '0' ) ; +test( macro , '-1' , -1 , '-2' ) ; +test( macro , '1' , 3 , '4' ) ; +test( macro , '-1' , 3 , '2' ) ; +test( macro , '1' , -3 , '-2' ) ; +test( macro , '-1' , -3 , '-4' ) ; +test( macro , '1' , 7 , '8' ) ; +test( macro , '-1' , 7 , '6' ) ; +test( macro , '1' , -7 , '-6' ) ; +test( macro , '-1' , -7 , '-8' ) ; +test( macro , '1' , 9 , '10' ) ; +test( macro , '-1' , 9 , '8' ) ; +test( macro , '1' , -9 , '-8' ) ; +test( macro , '-1' , -9 , '-10' ) ; +test( macro , '1' , 11 , '12' ) ; +test( macro , '-1' , 11 , '10' ) ; +test( macro , '1' , -11 , '-10' ) ; +test( macro , '-1' , -11 , '-12' ) ; +test( macro , '1' , 17 , '18' ) ; +test( macro , '-1' , 17 , '16' ) ; +test( macro , '1' , -17 , '-16' ) ; +test( macro , '-1' , -17 , '-18' ) ; +test( macro , '1' , 22 , '23' ) ; +test( macro , '-1' , 22 , '21' ) ; +test( macro , '1' , -22 , '-21' ) ; +test( macro , '-1' , -22 , '-23' ) ; +test( macro , '1' , 24 , '25' ) ; +test( macro , '-1' , 24 , '23' ) ; +test( macro , '1' , -24 , '-23' ) ; +test( macro , '-1' , -24 , '-25' ) ; +test( macro , '1' , 27 , '28' ) ; +test( macro , '-1' , 27 , '26' ) ; +test( macro , '1' , -27 , '-26' ) ; +test( macro , '-1' , -27 , '-28' ) ; +test( macro , '1' , 29 , '30' ) ; +test( macro , '-1' , 29 , '28' ) ; +test( macro , '1' , -29 , '-28' ) ; +test( macro , '-1' , -29 , '-30' ) ; +test( macro , '1' , 1234 , '1235' ) ; +test( macro , '-1' , 1234 , '1233' ) ; +test( macro , '1' , -1234 , '-1233' ) ; +test( macro , '-1' , -1234 , '-1235' ) ; +test( macro , '1' , 5678 , '5679' ) ; +test( macro , '-1' , 5678 , '5677' ) ; +test( macro , '1' , -5678 , '-5677' ) ; +test( macro , '-1' , -5678 , '-5679' ) ; +test( macro , '1' , 1073741824 , '1073741825' ) ; +test( macro , '-1' , 1073741824 , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '-1073741825' ) ; +test( macro , '1' , 51676101935731 , '51676101935732' ) ; +test( macro , '-1' , 51676101935731 , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '-51676101935732' ) ; +test( macro , '3' , 1 , '4' ) ; +test( macro , '-3' , 1 , '-2' ) ; +test( macro , '3' , -1 , '2' ) ; +test( macro , '-3' , -1 , '-4' ) ; +test( macro , '3' , 3 , '6' ) ; +test( macro , '-3' , 3 , '0' ) ; +test( macro , '3' , -3 , '0' ) ; +test( macro , '-3' , -3 , '-6' ) ; +test( macro , '3' , 7 , '10' ) ; +test( macro , '-3' , 7 , '4' ) ; +test( macro , '3' , -7 , '-4' ) ; +test( macro , '-3' , -7 , '-10' ) ; +test( macro , '3' , 9 , '12' ) ; +test( macro , '-3' , 9 , '6' ) ; +test( macro , '3' , -9 , '-6' ) ; +test( macro , '-3' , -9 , '-12' ) ; +test( macro , '3' , 11 , '14' ) ; +test( macro , '-3' , 11 , '8' ) ; +test( macro , '3' , -11 , '-8' ) ; +test( macro , '-3' , -11 , '-14' ) ; +test( macro , '3' , 17 , '20' ) ; +test( macro , '-3' , 17 , '14' ) ; +test( macro , '3' , -17 , '-14' ) ; +test( macro , '-3' , -17 , '-20' ) ; +test( macro , '3' , 22 , '25' ) ; +test( macro , '-3' , 22 , '19' ) ; +test( macro , '3' , -22 , '-19' ) ; +test( macro , '-3' , -22 , '-25' ) ; +test( macro , '3' , 24 , '27' ) ; +test( macro , '-3' , 24 , '21' ) ; +test( macro , '3' , -24 , '-21' ) ; +test( macro , '-3' , -24 , '-27' ) ; +test( macro , '3' , 27 , '30' ) ; +test( macro , '-3' , 27 , '24' ) ; +test( macro , '3' , -27 , '-24' ) ; +test( macro , '-3' , -27 , '-30' ) ; +test( macro , '3' , 29 , '32' ) ; +test( macro , '-3' , 29 , '26' ) ; +test( macro , '3' , -29 , '-26' ) ; +test( macro , '-3' , -29 , '-32' ) ; +test( macro , '3' , 1234 , '1237' ) ; +test( macro , '-3' , 1234 , '1231' ) ; +test( macro , '3' , -1234 , '-1231' ) ; +test( macro , '-3' , -1234 , '-1237' ) ; +test( macro , '3' , 5678 , '5681' ) ; +test( macro , '-3' , 5678 , '5675' ) ; +test( macro , '3' , -5678 , '-5675' ) ; +test( macro , '-3' , -5678 , '-5681' ) ; +test( macro , '3' , 1073741824 , '1073741827' ) ; +test( macro , '-3' , 1073741824 , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '-1073741827' ) ; +test( macro , '3' , 51676101935731 , '51676101935734' ) ; +test( macro , '-3' , 51676101935731 , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '-51676101935734' ) ; +test( macro , '7' , 1 , '8' ) ; +test( macro , '-7' , 1 , '-6' ) ; +test( macro , '7' , -1 , '6' ) ; +test( macro , '-7' , -1 , '-8' ) ; +test( macro , '7' , 3 , '10' ) ; +test( macro , '-7' , 3 , '-4' ) ; +test( macro , '7' , -3 , '4' ) ; +test( macro , '-7' , -3 , '-10' ) ; +test( macro , '7' , 7 , '14' ) ; +test( macro , '-7' , 7 , '0' ) ; +test( macro , '7' , -7 , '0' ) ; +test( macro , '-7' , -7 , '-14' ) ; +test( macro , '7' , 9 , '16' ) ; +test( macro , '-7' , 9 , '2' ) ; +test( macro , '7' , -9 , '-2' ) ; +test( macro , '-7' , -9 , '-16' ) ; +test( macro , '7' , 11 , '18' ) ; +test( macro , '-7' , 11 , '4' ) ; +test( macro , '7' , -11 , '-4' ) ; +test( macro , '-7' , -11 , '-18' ) ; +test( macro , '7' , 17 , '24' ) ; +test( macro , '-7' , 17 , '10' ) ; +test( macro , '7' , -17 , '-10' ) ; +test( macro , '-7' , -17 , '-24' ) ; +test( macro , '7' , 22 , '29' ) ; +test( macro , '-7' , 22 , '15' ) ; +test( macro , '7' , -22 , '-15' ) ; +test( macro , '-7' , -22 , '-29' ) ; +test( macro , '7' , 24 , '31' ) ; +test( macro , '-7' , 24 , '17' ) ; +test( macro , '7' , -24 , '-17' ) ; +test( macro , '-7' , -24 , '-31' ) ; +test( macro , '7' , 27 , '34' ) ; +test( macro , '-7' , 27 , '20' ) ; +test( macro , '7' , -27 , '-20' ) ; +test( macro , '-7' , -27 , '-34' ) ; +test( macro , '7' , 29 , '36' ) ; +test( macro , '-7' , 29 , '22' ) ; +test( macro , '7' , -29 , '-22' ) ; +test( macro , '-7' , -29 , '-36' ) ; +test( macro , '7' , 1234 , '1241' ) ; +test( macro , '-7' , 1234 , '1227' ) ; +test( macro , '7' , -1234 , '-1227' ) ; +test( macro , '-7' , -1234 , '-1241' ) ; +test( macro , '7' , 5678 , '5685' ) ; +test( macro , '-7' , 5678 , '5671' ) ; +test( macro , '7' , -5678 , '-5671' ) ; +test( macro , '-7' , -5678 , '-5685' ) ; +test( macro , '7' , 1073741824 , '1073741831' ) ; +test( macro , '-7' , 1073741824 , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '-1073741831' ) ; +test( macro , '7' , 51676101935731 , '51676101935738' ) ; +test( macro , '-7' , 51676101935731 , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '-51676101935738' ) ; +test( macro , '9' , 1 , '10' ) ; +test( macro , '-9' , 1 , '-8' ) ; +test( macro , '9' , -1 , '8' ) ; +test( macro , '-9' , -1 , '-10' ) ; +test( macro , '9' , 3 , '12' ) ; +test( macro , '-9' , 3 , '-6' ) ; +test( macro , '9' , -3 , '6' ) ; +test( macro , '-9' , -3 , '-12' ) ; +test( macro , '9' , 7 , '16' ) ; +test( macro , '-9' , 7 , '-2' ) ; +test( macro , '9' , -7 , '2' ) ; +test( macro , '-9' , -7 , '-16' ) ; +test( macro , '9' , 9 , '18' ) ; +test( macro , '-9' , 9 , '0' ) ; +test( macro , '9' , -9 , '0' ) ; +test( macro , '-9' , -9 , '-18' ) ; +test( macro , '9' , 11 , '20' ) ; +test( macro , '-9' , 11 , '2' ) ; +test( macro , '9' , -11 , '-2' ) ; +test( macro , '-9' , -11 , '-20' ) ; +test( macro , '9' , 17 , '26' ) ; +test( macro , '-9' , 17 , '8' ) ; +test( macro , '9' , -17 , '-8' ) ; +test( macro , '-9' , -17 , '-26' ) ; +test( macro , '9' , 22 , '31' ) ; +test( macro , '-9' , 22 , '13' ) ; +test( macro , '9' , -22 , '-13' ) ; +test( macro , '-9' , -22 , '-31' ) ; +test( macro , '9' , 24 , '33' ) ; +test( macro , '-9' , 24 , '15' ) ; +test( macro , '9' , -24 , '-15' ) ; +test( macro , '-9' , -24 , '-33' ) ; +test( macro , '9' , 27 , '36' ) ; +test( macro , '-9' , 27 , '18' ) ; +test( macro , '9' , -27 , '-18' ) ; +test( macro , '-9' , -27 , '-36' ) ; +test( macro , '9' , 29 , '38' ) ; +test( macro , '-9' , 29 , '20' ) ; +test( macro , '9' , -29 , '-20' ) ; +test( macro , '-9' , -29 , '-38' ) ; +test( macro , '9' , 1234 , '1243' ) ; +test( macro , '-9' , 1234 , '1225' ) ; +test( macro , '9' , -1234 , '-1225' ) ; +test( macro , '-9' , -1234 , '-1243' ) ; +test( macro , '9' , 5678 , '5687' ) ; +test( macro , '-9' , 5678 , '5669' ) ; +test( macro , '9' , -5678 , '-5669' ) ; +test( macro , '-9' , -5678 , '-5687' ) ; +test( macro , '9' , 1073741824 , '1073741833' ) ; +test( macro , '-9' , 1073741824 , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '-1073741833' ) ; +test( macro , '9' , 51676101935731 , '51676101935740' ) ; +test( macro , '-9' , 51676101935731 , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '-51676101935740' ) ; +test( macro , '11' , 1 , '12' ) ; +test( macro , '-11' , 1 , '-10' ) ; +test( macro , '11' , -1 , '10' ) ; +test( macro , '-11' , -1 , '-12' ) ; +test( macro , '11' , 3 , '14' ) ; +test( macro , '-11' , 3 , '-8' ) ; +test( macro , '11' , -3 , '8' ) ; +test( macro , '-11' , -3 , '-14' ) ; +test( macro , '11' , 7 , '18' ) ; +test( macro , '-11' , 7 , '-4' ) ; +test( macro , '11' , -7 , '4' ) ; +test( macro , '-11' , -7 , '-18' ) ; +test( macro , '11' , 9 , '20' ) ; +test( macro , '-11' , 9 , '-2' ) ; +test( macro , '11' , -9 , '2' ) ; +test( macro , '-11' , -9 , '-20' ) ; +test( macro , '11' , 11 , '22' ) ; +test( macro , '-11' , 11 , '0' ) ; +test( macro , '11' , -11 , '0' ) ; +test( macro , '-11' , -11 , '-22' ) ; +test( macro , '11' , 17 , '28' ) ; +test( macro , '-11' , 17 , '6' ) ; +test( macro , '11' , -17 , '-6' ) ; +test( macro , '-11' , -17 , '-28' ) ; +test( macro , '11' , 22 , '33' ) ; +test( macro , '-11' , 22 , '11' ) ; +test( macro , '11' , -22 , '-11' ) ; +test( macro , '-11' , -22 , '-33' ) ; +test( macro , '11' , 24 , '35' ) ; +test( macro , '-11' , 24 , '13' ) ; +test( macro , '11' , -24 , '-13' ) ; +test( macro , '-11' , -24 , '-35' ) ; +test( macro , '11' , 27 , '38' ) ; +test( macro , '-11' , 27 , '16' ) ; +test( macro , '11' , -27 , '-16' ) ; +test( macro , '-11' , -27 , '-38' ) ; +test( macro , '11' , 29 , '40' ) ; +test( macro , '-11' , 29 , '18' ) ; +test( macro , '11' , -29 , '-18' ) ; +test( macro , '-11' , -29 , '-40' ) ; +test( macro , '11' , 1234 , '1245' ) ; +test( macro , '-11' , 1234 , '1223' ) ; +test( macro , '11' , -1234 , '-1223' ) ; +test( macro , '-11' , -1234 , '-1245' ) ; +test( macro , '11' , 5678 , '5689' ) ; +test( macro , '-11' , 5678 , '5667' ) ; +test( macro , '11' , -5678 , '-5667' ) ; +test( macro , '-11' , -5678 , '-5689' ) ; +test( macro , '11' , 1073741824 , '1073741835' ) ; +test( macro , '-11' , 1073741824 , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '-1073741835' ) ; +test( macro , '11' , 51676101935731 , '51676101935742' ) ; +test( macro , '-11' , 51676101935731 , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '-51676101935742' ) ; +test( macro , '17' , 1 , '18' ) ; +test( macro , '-17' , 1 , '-16' ) ; +test( macro , '17' , -1 , '16' ) ; +test( macro , '-17' , -1 , '-18' ) ; +test( macro , '17' , 3 , '20' ) ; +test( macro , '-17' , 3 , '-14' ) ; +test( macro , '17' , -3 , '14' ) ; +test( macro , '-17' , -3 , '-20' ) ; +test( macro , '17' , 7 , '24' ) ; +test( macro , '-17' , 7 , '-10' ) ; +test( macro , '17' , -7 , '10' ) ; +test( macro , '-17' , -7 , '-24' ) ; +test( macro , '17' , 9 , '26' ) ; +test( macro , '-17' , 9 , '-8' ) ; +test( macro , '17' , -9 , '8' ) ; +test( macro , '-17' , -9 , '-26' ) ; +test( macro , '17' , 11 , '28' ) ; +test( macro , '-17' , 11 , '-6' ) ; +test( macro , '17' , -11 , '6' ) ; +test( macro , '-17' , -11 , '-28' ) ; +test( macro , '17' , 17 , '34' ) ; +test( macro , '-17' , 17 , '0' ) ; +test( macro , '17' , -17 , '0' ) ; +test( macro , '-17' , -17 , '-34' ) ; +test( macro , '17' , 22 , '39' ) ; +test( macro , '-17' , 22 , '5' ) ; +test( macro , '17' , -22 , '-5' ) ; +test( macro , '-17' , -22 , '-39' ) ; +test( macro , '17' , 24 , '41' ) ; +test( macro , '-17' , 24 , '7' ) ; +test( macro , '17' , -24 , '-7' ) ; +test( macro , '-17' , -24 , '-41' ) ; +test( macro , '17' , 27 , '44' ) ; +test( macro , '-17' , 27 , '10' ) ; +test( macro , '17' , -27 , '-10' ) ; +test( macro , '-17' , -27 , '-44' ) ; +test( macro , '17' , 29 , '46' ) ; +test( macro , '-17' , 29 , '12' ) ; +test( macro , '17' , -29 , '-12' ) ; +test( macro , '-17' , -29 , '-46' ) ; +test( macro , '17' , 1234 , '1251' ) ; +test( macro , '-17' , 1234 , '1217' ) ; +test( macro , '17' , -1234 , '-1217' ) ; +test( macro , '-17' , -1234 , '-1251' ) ; +test( macro , '17' , 5678 , '5695' ) ; +test( macro , '-17' , 5678 , '5661' ) ; +test( macro , '17' , -5678 , '-5661' ) ; +test( macro , '-17' , -5678 , '-5695' ) ; +test( macro , '17' , 1073741824 , '1073741841' ) ; +test( macro , '-17' , 1073741824 , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '-1073741841' ) ; +test( macro , '17' , 51676101935731 , '51676101935748' ) ; +test( macro , '-17' , 51676101935731 , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '-51676101935748' ) ; +test( macro , '22' , 1 , '23' ) ; +test( macro , '-22' , 1 , '-21' ) ; +test( macro , '22' , -1 , '21' ) ; +test( macro , '-22' , -1 , '-23' ) ; +test( macro , '22' , 3 , '25' ) ; +test( macro , '-22' , 3 , '-19' ) ; +test( macro , '22' , -3 , '19' ) ; +test( macro , '-22' , -3 , '-25' ) ; +test( macro , '22' , 7 , '29' ) ; +test( macro , '-22' , 7 , '-15' ) ; +test( macro , '22' , -7 , '15' ) ; +test( macro , '-22' , -7 , '-29' ) ; +test( macro , '22' , 9 , '31' ) ; +test( macro , '-22' , 9 , '-13' ) ; +test( macro , '22' , -9 , '13' ) ; +test( macro , '-22' , -9 , '-31' ) ; +test( macro , '22' , 11 , '33' ) ; +test( macro , '-22' , 11 , '-11' ) ; +test( macro , '22' , -11 , '11' ) ; +test( macro , '-22' , -11 , '-33' ) ; +test( macro , '22' , 17 , '39' ) ; +test( macro , '-22' , 17 , '-5' ) ; +test( macro , '22' , -17 , '5' ) ; +test( macro , '-22' , -17 , '-39' ) ; +test( macro , '22' , 22 , '44' ) ; +test( macro , '-22' , 22 , '0' ) ; +test( macro , '22' , -22 , '0' ) ; +test( macro , '-22' , -22 , '-44' ) ; +test( macro , '22' , 24 , '46' ) ; +test( macro , '-22' , 24 , '2' ) ; +test( macro , '22' , -24 , '-2' ) ; +test( macro , '-22' , -24 , '-46' ) ; +test( macro , '22' , 27 , '49' ) ; +test( macro , '-22' , 27 , '5' ) ; +test( macro , '22' , -27 , '-5' ) ; +test( macro , '-22' , -27 , '-49' ) ; +test( macro , '22' , 29 , '51' ) ; +test( macro , '-22' , 29 , '7' ) ; +test( macro , '22' , -29 , '-7' ) ; +test( macro , '-22' , -29 , '-51' ) ; +test( macro , '22' , 1234 , '1256' ) ; +test( macro , '-22' , 1234 , '1212' ) ; +test( macro , '22' , -1234 , '-1212' ) ; +test( macro , '-22' , -1234 , '-1256' ) ; +test( macro , '22' , 5678 , '5700' ) ; +test( macro , '-22' , 5678 , '5656' ) ; +test( macro , '22' , -5678 , '-5656' ) ; +test( macro , '-22' , -5678 , '-5700' ) ; +test( macro , '22' , 1073741824 , '1073741846' ) ; +test( macro , '-22' , 1073741824 , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '-1073741846' ) ; +test( macro , '22' , 51676101935731 , '51676101935753' ) ; +test( macro , '-22' , 51676101935731 , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '-51676101935753' ) ; +test( macro , '24' , 1 , '25' ) ; +test( macro , '-24' , 1 , '-23' ) ; +test( macro , '24' , -1 , '23' ) ; +test( macro , '-24' , -1 , '-25' ) ; +test( macro , '24' , 3 , '27' ) ; +test( macro , '-24' , 3 , '-21' ) ; +test( macro , '24' , -3 , '21' ) ; +test( macro , '-24' , -3 , '-27' ) ; +test( macro , '24' , 7 , '31' ) ; +test( macro , '-24' , 7 , '-17' ) ; +test( macro , '24' , -7 , '17' ) ; +test( macro , '-24' , -7 , '-31' ) ; +test( macro , '24' , 9 , '33' ) ; +test( macro , '-24' , 9 , '-15' ) ; +test( macro , '24' , -9 , '15' ) ; +test( macro , '-24' , -9 , '-33' ) ; +test( macro , '24' , 11 , '35' ) ; +test( macro , '-24' , 11 , '-13' ) ; +test( macro , '24' , -11 , '13' ) ; +test( macro , '-24' , -11 , '-35' ) ; +test( macro , '24' , 17 , '41' ) ; +test( macro , '-24' , 17 , '-7' ) ; +test( macro , '24' , -17 , '7' ) ; +test( macro , '-24' , -17 , '-41' ) ; +test( macro , '24' , 22 , '46' ) ; +test( macro , '-24' , 22 , '-2' ) ; +test( macro , '24' , -22 , '2' ) ; +test( macro , '-24' , -22 , '-46' ) ; +test( macro , '24' , 24 , '48' ) ; +test( macro , '-24' , 24 , '0' ) ; +test( macro , '24' , -24 , '0' ) ; +test( macro , '-24' , -24 , '-48' ) ; +test( macro , '24' , 27 , '51' ) ; +test( macro , '-24' , 27 , '3' ) ; +test( macro , '24' , -27 , '-3' ) ; +test( macro , '-24' , -27 , '-51' ) ; +test( macro , '24' , 29 , '53' ) ; +test( macro , '-24' , 29 , '5' ) ; +test( macro , '24' , -29 , '-5' ) ; +test( macro , '-24' , -29 , '-53' ) ; +test( macro , '24' , 1234 , '1258' ) ; +test( macro , '-24' , 1234 , '1210' ) ; +test( macro , '24' , -1234 , '-1210' ) ; +test( macro , '-24' , -1234 , '-1258' ) ; +test( macro , '24' , 5678 , '5702' ) ; +test( macro , '-24' , 5678 , '5654' ) ; +test( macro , '24' , -5678 , '-5654' ) ; +test( macro , '-24' , -5678 , '-5702' ) ; +test( macro , '24' , 1073741824 , '1073741848' ) ; +test( macro , '-24' , 1073741824 , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '-1073741848' ) ; +test( macro , '24' , 51676101935731 , '51676101935755' ) ; +test( macro , '-24' , 51676101935731 , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '-51676101935755' ) ; +test( macro , '27' , 1 , '28' ) ; +test( macro , '-27' , 1 , '-26' ) ; +test( macro , '27' , -1 , '26' ) ; +test( macro , '-27' , -1 , '-28' ) ; +test( macro , '27' , 3 , '30' ) ; +test( macro , '-27' , 3 , '-24' ) ; +test( macro , '27' , -3 , '24' ) ; +test( macro , '-27' , -3 , '-30' ) ; +test( macro , '27' , 7 , '34' ) ; +test( macro , '-27' , 7 , '-20' ) ; +test( macro , '27' , -7 , '20' ) ; +test( macro , '-27' , -7 , '-34' ) ; +test( macro , '27' , 9 , '36' ) ; +test( macro , '-27' , 9 , '-18' ) ; +test( macro , '27' , -9 , '18' ) ; +test( macro , '-27' , -9 , '-36' ) ; +test( macro , '27' , 11 , '38' ) ; +test( macro , '-27' , 11 , '-16' ) ; +test( macro , '27' , -11 , '16' ) ; +test( macro , '-27' , -11 , '-38' ) ; +test( macro , '27' , 17 , '44' ) ; +test( macro , '-27' , 17 , '-10' ) ; +test( macro , '27' , -17 , '10' ) ; +test( macro , '-27' , -17 , '-44' ) ; +test( macro , '27' , 22 , '49' ) ; +test( macro , '-27' , 22 , '-5' ) ; +test( macro , '27' , -22 , '5' ) ; +test( macro , '-27' , -22 , '-49' ) ; +test( macro , '27' , 24 , '51' ) ; +test( macro , '-27' , 24 , '-3' ) ; +test( macro , '27' , -24 , '3' ) ; +test( macro , '-27' , -24 , '-51' ) ; +test( macro , '27' , 27 , '54' ) ; +test( macro , '-27' , 27 , '0' ) ; +test( macro , '27' , -27 , '0' ) ; +test( macro , '-27' , -27 , '-54' ) ; +test( macro , '27' , 29 , '56' ) ; +test( macro , '-27' , 29 , '2' ) ; +test( macro , '27' , -29 , '-2' ) ; +test( macro , '-27' , -29 , '-56' ) ; +test( macro , '27' , 1234 , '1261' ) ; +test( macro , '-27' , 1234 , '1207' ) ; +test( macro , '27' , -1234 , '-1207' ) ; +test( macro , '-27' , -1234 , '-1261' ) ; +test( macro , '27' , 5678 , '5705' ) ; +test( macro , '-27' , 5678 , '5651' ) ; +test( macro , '27' , -5678 , '-5651' ) ; +test( macro , '-27' , -5678 , '-5705' ) ; +test( macro , '27' , 1073741824 , '1073741851' ) ; +test( macro , '-27' , 1073741824 , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '-1073741851' ) ; +test( macro , '27' , 51676101935731 , '51676101935758' ) ; +test( macro , '-27' , 51676101935731 , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '-51676101935758' ) ; +test( macro , '29' , 1 , '30' ) ; +test( macro , '-29' , 1 , '-28' ) ; +test( macro , '29' , -1 , '28' ) ; +test( macro , '-29' , -1 , '-30' ) ; +test( macro , '29' , 3 , '32' ) ; +test( macro , '-29' , 3 , '-26' ) ; +test( macro , '29' , -3 , '26' ) ; +test( macro , '-29' , -3 , '-32' ) ; +test( macro , '29' , 7 , '36' ) ; +test( macro , '-29' , 7 , '-22' ) ; +test( macro , '29' , -7 , '22' ) ; +test( macro , '-29' , -7 , '-36' ) ; +test( macro , '29' , 9 , '38' ) ; +test( macro , '-29' , 9 , '-20' ) ; +test( macro , '29' , -9 , '20' ) ; +test( macro , '-29' , -9 , '-38' ) ; +test( macro , '29' , 11 , '40' ) ; +test( macro , '-29' , 11 , '-18' ) ; +test( macro , '29' , -11 , '18' ) ; +test( macro , '-29' , -11 , '-40' ) ; +test( macro , '29' , 17 , '46' ) ; +test( macro , '-29' , 17 , '-12' ) ; +test( macro , '29' , -17 , '12' ) ; +test( macro , '-29' , -17 , '-46' ) ; +test( macro , '29' , 22 , '51' ) ; +test( macro , '-29' , 22 , '-7' ) ; +test( macro , '29' , -22 , '7' ) ; +test( macro , '-29' , -22 , '-51' ) ; +test( macro , '29' , 24 , '53' ) ; +test( macro , '-29' , 24 , '-5' ) ; +test( macro , '29' , -24 , '5' ) ; +test( macro , '-29' , -24 , '-53' ) ; +test( macro , '29' , 27 , '56' ) ; +test( macro , '-29' , 27 , '-2' ) ; +test( macro , '29' , -27 , '2' ) ; +test( macro , '-29' , -27 , '-56' ) ; +test( macro , '29' , 29 , '58' ) ; +test( macro , '-29' , 29 , '0' ) ; +test( macro , '29' , -29 , '0' ) ; +test( macro , '-29' , -29 , '-58' ) ; +test( macro , '29' , 1234 , '1263' ) ; +test( macro , '-29' , 1234 , '1205' ) ; +test( macro , '29' , -1234 , '-1205' ) ; +test( macro , '-29' , -1234 , '-1263' ) ; +test( macro , '29' , 5678 , '5707' ) ; +test( macro , '-29' , 5678 , '5649' ) ; +test( macro , '29' , -5678 , '-5649' ) ; +test( macro , '-29' , -5678 , '-5707' ) ; +test( macro , '29' , 1073741824 , '1073741853' ) ; +test( macro , '-29' , 1073741824 , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '-1073741853' ) ; +test( macro , '29' , 51676101935731 , '51676101935760' ) ; +test( macro , '-29' , 51676101935731 , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '-51676101935760' ) ; +test( macro , '1234' , 1 , '1235' ) ; +test( macro , '-1234' , 1 , '-1233' ) ; +test( macro , '1234' , -1 , '1233' ) ; +test( macro , '-1234' , -1 , '-1235' ) ; +test( macro , '1234' , 3 , '1237' ) ; +test( macro , '-1234' , 3 , '-1231' ) ; +test( macro , '1234' , -3 , '1231' ) ; +test( macro , '-1234' , -3 , '-1237' ) ; +test( macro , '1234' , 7 , '1241' ) ; +test( macro , '-1234' , 7 , '-1227' ) ; +test( macro , '1234' , -7 , '1227' ) ; +test( macro , '-1234' , -7 , '-1241' ) ; +test( macro , '1234' , 9 , '1243' ) ; +test( macro , '-1234' , 9 , '-1225' ) ; +test( macro , '1234' , -9 , '1225' ) ; +test( macro , '-1234' , -9 , '-1243' ) ; +test( macro , '1234' , 11 , '1245' ) ; +test( macro , '-1234' , 11 , '-1223' ) ; +test( macro , '1234' , -11 , '1223' ) ; +test( macro , '-1234' , -11 , '-1245' ) ; +test( macro , '1234' , 17 , '1251' ) ; +test( macro , '-1234' , 17 , '-1217' ) ; +test( macro , '1234' , -17 , '1217' ) ; +test( macro , '-1234' , -17 , '-1251' ) ; +test( macro , '1234' , 22 , '1256' ) ; +test( macro , '-1234' , 22 , '-1212' ) ; +test( macro , '1234' , -22 , '1212' ) ; +test( macro , '-1234' , -22 , '-1256' ) ; +test( macro , '1234' , 24 , '1258' ) ; +test( macro , '-1234' , 24 , '-1210' ) ; +test( macro , '1234' , -24 , '1210' ) ; +test( macro , '-1234' , -24 , '-1258' ) ; +test( macro , '1234' , 27 , '1261' ) ; +test( macro , '-1234' , 27 , '-1207' ) ; +test( macro , '1234' , -27 , '1207' ) ; +test( macro , '-1234' , -27 , '-1261' ) ; +test( macro , '1234' , 29 , '1263' ) ; +test( macro , '-1234' , 29 , '-1205' ) ; +test( macro , '1234' , -29 , '1205' ) ; +test( macro , '-1234' , -29 , '-1263' ) ; +test( macro , '1234' , 1234 , '2468' ) ; +test( macro , '-1234' , 1234 , '0' ) ; +test( macro , '1234' , -1234 , '0' ) ; +test( macro , '-1234' , -1234 , '-2468' ) ; +test( macro , '1234' , 5678 , '6912' ) ; +test( macro , '-1234' , 5678 , '4444' ) ; +test( macro , '1234' , -5678 , '-4444' ) ; +test( macro , '-1234' , -5678 , '-6912' ) ; +test( macro , '1234' , 1073741824 , '1073743058' ) ; +test( macro , '-1234' , 1073741824 , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '-1073743058' ) ; +test( macro , '1234' , 51676101935731 , '51676101936965' ) ; +test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '-51676101936965' ) ; +test( macro , '5678' , 1 , '5679' ) ; +test( macro , '-5678' , 1 , '-5677' ) ; +test( macro , '5678' , -1 , '5677' ) ; +test( macro , '-5678' , -1 , '-5679' ) ; +test( macro , '5678' , 3 , '5681' ) ; +test( macro , '-5678' , 3 , '-5675' ) ; +test( macro , '5678' , -3 , '5675' ) ; +test( macro , '-5678' , -3 , '-5681' ) ; +test( macro , '5678' , 7 , '5685' ) ; +test( macro , '-5678' , 7 , '-5671' ) ; +test( macro , '5678' , -7 , '5671' ) ; +test( macro , '-5678' , -7 , '-5685' ) ; +test( macro , '5678' , 9 , '5687' ) ; +test( macro , '-5678' , 9 , '-5669' ) ; +test( macro , '5678' , -9 , '5669' ) ; +test( macro , '-5678' , -9 , '-5687' ) ; +test( macro , '5678' , 11 , '5689' ) ; +test( macro , '-5678' , 11 , '-5667' ) ; +test( macro , '5678' , -11 , '5667' ) ; +test( macro , '-5678' , -11 , '-5689' ) ; +test( macro , '5678' , 17 , '5695' ) ; +test( macro , '-5678' , 17 , '-5661' ) ; +test( macro , '5678' , -17 , '5661' ) ; +test( macro , '-5678' , -17 , '-5695' ) ; +test( macro , '5678' , 22 , '5700' ) ; +test( macro , '-5678' , 22 , '-5656' ) ; +test( macro , '5678' , -22 , '5656' ) ; +test( macro , '-5678' , -22 , '-5700' ) ; +test( macro , '5678' , 24 , '5702' ) ; +test( macro , '-5678' , 24 , '-5654' ) ; +test( macro , '5678' , -24 , '5654' ) ; +test( macro , '-5678' , -24 , '-5702' ) ; +test( macro , '5678' , 27 , '5705' ) ; +test( macro , '-5678' , 27 , '-5651' ) ; +test( macro , '5678' , -27 , '5651' ) ; +test( macro , '-5678' , -27 , '-5705' ) ; +test( macro , '5678' , 29 , '5707' ) ; +test( macro , '-5678' , 29 , '-5649' ) ; +test( macro , '5678' , -29 , '5649' ) ; +test( macro , '-5678' , -29 , '-5707' ) ; +test( macro , '5678' , 1234 , '6912' ) ; +test( macro , '-5678' , 1234 , '-4444' ) ; +test( macro , '5678' , -1234 , '4444' ) ; +test( macro , '-5678' , -1234 , '-6912' ) ; +test( macro , '5678' , 5678 , '11356' ) ; +test( macro , '-5678' , 5678 , '0' ) ; +test( macro , '5678' , -5678 , '0' ) ; +test( macro , '-5678' , -5678 , '-11356' ) ; +test( macro , '5678' , 1073741824 , '1073747502' ) ; +test( macro , '-5678' , 1073741824 , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '-1073747502' ) ; +test( macro , '5678' , 51676101935731 , '51676101941409' ) ; +test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '-51676101941409' ) ; +test( macro , '1073741824' , 1 , '1073741825' ) ; +test( macro , '-1073741824' , 1 , '-1073741823' ) ; +test( macro , '1073741824' , -1 , '1073741823' ) ; +test( macro , '-1073741824' , -1 , '-1073741825' ) ; +test( macro , '1073741824' , 3 , '1073741827' ) ; +test( macro , '-1073741824' , 3 , '-1073741821' ) ; +test( macro , '1073741824' , -3 , '1073741821' ) ; +test( macro , '-1073741824' , -3 , '-1073741827' ) ; +test( macro , '1073741824' , 7 , '1073741831' ) ; +test( macro , '-1073741824' , 7 , '-1073741817' ) ; +test( macro , '1073741824' , -7 , '1073741817' ) ; +test( macro , '-1073741824' , -7 , '-1073741831' ) ; +test( macro , '1073741824' , 9 , '1073741833' ) ; +test( macro , '-1073741824' , 9 , '-1073741815' ) ; +test( macro , '1073741824' , -9 , '1073741815' ) ; +test( macro , '-1073741824' , -9 , '-1073741833' ) ; +test( macro , '1073741824' , 11 , '1073741835' ) ; +test( macro , '-1073741824' , 11 , '-1073741813' ) ; +test( macro , '1073741824' , -11 , '1073741813' ) ; +test( macro , '-1073741824' , -11 , '-1073741835' ) ; +test( macro , '1073741824' , 17 , '1073741841' ) ; +test( macro , '-1073741824' , 17 , '-1073741807' ) ; +test( macro , '1073741824' , -17 , '1073741807' ) ; +test( macro , '-1073741824' , -17 , '-1073741841' ) ; +test( macro , '1073741824' , 22 , '1073741846' ) ; +test( macro , '-1073741824' , 22 , '-1073741802' ) ; +test( macro , '1073741824' , -22 , '1073741802' ) ; +test( macro , '-1073741824' , -22 , '-1073741846' ) ; +test( macro , '1073741824' , 24 , '1073741848' ) ; +test( macro , '-1073741824' , 24 , '-1073741800' ) ; +test( macro , '1073741824' , -24 , '1073741800' ) ; +test( macro , '-1073741824' , -24 , '-1073741848' ) ; +test( macro , '1073741824' , 27 , '1073741851' ) ; +test( macro , '-1073741824' , 27 , '-1073741797' ) ; +test( macro , '1073741824' , -27 , '1073741797' ) ; +test( macro , '-1073741824' , -27 , '-1073741851' ) ; +test( macro , '1073741824' , 29 , '1073741853' ) ; +test( macro , '-1073741824' , 29 , '-1073741795' ) ; +test( macro , '1073741824' , -29 , '1073741795' ) ; +test( macro , '-1073741824' , -29 , '-1073741853' ) ; +test( macro , '1073741824' , 1234 , '1073743058' ) ; +test( macro , '-1073741824' , 1234 , '-1073740590' ) ; +test( macro , '1073741824' , -1234 , '1073740590' ) ; +test( macro , '-1073741824' , -1234 , '-1073743058' ) ; +test( macro , '1073741824' , 5678 , '1073747502' ) ; +test( macro , '-1073741824' , 5678 , '-1073736146' ) ; +test( macro , '1073741824' , -5678 , '1073736146' ) ; +test( macro , '-1073741824' , -5678 , '-1073747502' ) ; +test( macro , '1073741824' , 1073741824 , '2147483648' ) ; +test( macro , '-1073741824' , 1073741824 , '0' ) ; +test( macro , '1073741824' , -1073741824 , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '-2147483648' ) ; +test( macro , '1073741824' , 51676101935731 , '51677175677555' ) ; +test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '-51677175677555' ) ; +test( macro , '51676101935731' , 1 , '51676101935732' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935730' ) ; +test( macro , '51676101935731' , -1 , '51676101935730' ) ; +test( macro , '-51676101935731' , -1 , '-51676101935732' ) ; +test( macro , '51676101935731' , 3 , '51676101935734' ) ; +test( macro , '-51676101935731' , 3 , '-51676101935728' ) ; +test( macro , '51676101935731' , -3 , '51676101935728' ) ; +test( macro , '-51676101935731' , -3 , '-51676101935734' ) ; +test( macro , '51676101935731' , 7 , '51676101935738' ) ; +test( macro , '-51676101935731' , 7 , '-51676101935724' ) ; +test( macro , '51676101935731' , -7 , '51676101935724' ) ; +test( macro , '-51676101935731' , -7 , '-51676101935738' ) ; +test( macro , '51676101935731' , 9 , '51676101935740' ) ; +test( macro , '-51676101935731' , 9 , '-51676101935722' ) ; +test( macro , '51676101935731' , -9 , '51676101935722' ) ; +test( macro , '-51676101935731' , -9 , '-51676101935740' ) ; +test( macro , '51676101935731' , 11 , '51676101935742' ) ; +test( macro , '-51676101935731' , 11 , '-51676101935720' ) ; +test( macro , '51676101935731' , -11 , '51676101935720' ) ; +test( macro , '-51676101935731' , -11 , '-51676101935742' ) ; +test( macro , '51676101935731' , 17 , '51676101935748' ) ; +test( macro , '-51676101935731' , 17 , '-51676101935714' ) ; +test( macro , '51676101935731' , -17 , '51676101935714' ) ; +test( macro , '-51676101935731' , -17 , '-51676101935748' ) ; +test( macro , '51676101935731' , 22 , '51676101935753' ) ; +test( macro , '-51676101935731' , 22 , '-51676101935709' ) ; +test( macro , '51676101935731' , -22 , '51676101935709' ) ; +test( macro , '-51676101935731' , -22 , '-51676101935753' ) ; +test( macro , '51676101935731' , 24 , '51676101935755' ) ; +test( macro , '-51676101935731' , 24 , '-51676101935707' ) ; +test( macro , '51676101935731' , -24 , '51676101935707' ) ; +test( macro , '-51676101935731' , -24 , '-51676101935755' ) ; +test( macro , '51676101935731' , 27 , '51676101935758' ) ; +test( macro , '-51676101935731' , 27 , '-51676101935704' ) ; +test( macro , '51676101935731' , -27 , '51676101935704' ) ; +test( macro , '-51676101935731' , -27 , '-51676101935758' ) ; +test( macro , '51676101935731' , 29 , '51676101935760' ) ; +test( macro , '-51676101935731' , 29 , '-51676101935702' ) ; +test( macro , '51676101935731' , -29 , '51676101935702' ) ; +test( macro , '-51676101935731' , -29 , '-51676101935760' ) ; +test( macro , '51676101935731' , 1234 , '51676101936965' ) ; +test( macro , '-51676101935731' , 1234 , '-51676101934497' ) ; +test( macro , '51676101935731' , -1234 , '51676101934497' ) ; +test( macro , '-51676101935731' , -1234 , '-51676101936965' ) ; +test( macro , '51676101935731' , 5678 , '51676101941409' ) ; +test( macro , '-51676101935731' , 5678 , '-51676101930053' ) ; +test( macro , '51676101935731' , -5678 , '51676101930053' ) ; +test( macro , '-51676101935731' , -5678 , '-51676101941409' ) ; +test( macro , '51676101935731' , 1073741824 , '51677175677555' ) ; +test( macro , '-51676101935731' , 1073741824 , '-51675028193907' ) ; +test( macro , '51676101935731' , -1073741824 , '51675028193907' ) ; +test( macro , '-51676101935731' , -1073741824 , '-51677175677555' ) ; +test( macro , '51676101935731' , 51676101935731 , '103352203871462' ) ; +test( macro , '-51676101935731' , 51676101935731 , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '-103352203871462' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770250' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , -1 , '717897987691852588770248' ) ; +test( macro , '-717897987691852588770249' , -1 , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , 3 , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , 3 , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , -3 , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , -3 , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , 7 , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , 7 , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , -7 , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , -7 , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , 9 , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , 9 , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , -9 , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , -9 , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , 11 , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , 11 , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , -11 , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , -11 , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , 17 , '717897987691852588770266' ) ; +test( macro , '-717897987691852588770249' , 17 , '-717897987691852588770232' ) ; +test( macro , '717897987691852588770249' , -17 , '717897987691852588770232' ) ; +test( macro , '-717897987691852588770249' , -17 , '-717897987691852588770266' ) ; +test( macro , '717897987691852588770249' , 22 , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , 22 , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , -22 , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , -22 , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , 24 , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , 24 , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , -24 , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , -24 , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , 27 , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , 27 , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , -27 , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , -27 , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , 29 , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , 29 , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , -29 , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , -29 , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , 1234 , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , -1234 , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , 5678 , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , -5678 , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '717897987691853662512073' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '717897987691851515028425' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-717897987743528690705980' ) ; diff --git a/test/src/integer/arithmetic/idiv.js b/test/src/integer/arithmetic/idiv.js index de461b0..8707cd7 100644 --- a/test/src/integer/arithmetic/idiv.js +++ b/test/src/integer/arithmetic/idiv.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} /= ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `idiv(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; test( macro , '-1' , '-1' , '1' ) ; +test( macro , '1' , '3' , '0' ) ; +test( macro , '-1' , '3' , '-1' ) ; +test( macro , '1' , '-3' , '-1' ) ; +test( macro , '-1' , '-3' , '0' ) ; +test( macro , '1' , '7' , '0' ) ; +test( macro , '-1' , '7' , '-1' ) ; +test( macro , '1' , '-7' , '-1' ) ; +test( macro , '-1' , '-7' , '0' ) ; +test( macro , '1' , '9' , '0' ) ; +test( macro , '-1' , '9' , '-1' ) ; +test( macro , '1' , '-9' , '-1' ) ; +test( macro , '-1' , '-9' , '0' ) ; +test( macro , '1' , '11' , '0' ) ; +test( macro , '-1' , '11' , '-1' ) ; +test( macro , '1' , '-11' , '-1' ) ; +test( macro , '-1' , '-11' , '0' ) ; test( macro , '1' , '17' , '0' ) ; test( macro , '-1' , '17' , '-1' ) ; test( macro , '1' , '-17' , '-1' ) ; test( macro , '-1' , '-17' , '0' ) ; -test( macro , '1' , '51676101935731' , '0' ) ; -test( macro , '-1' , '51676101935731' , '-1' ) ; -test( macro , '1' , '-51676101935731' , '-1' ) ; -test( macro , '-1' , '-51676101935731' , '0' ) ; +test( macro , '1' , '22' , '0' ) ; +test( macro , '-1' , '22' , '-1' ) ; +test( macro , '1' , '-22' , '-1' ) ; +test( macro , '-1' , '-22' , '0' ) ; +test( macro , '1' , '24' , '0' ) ; +test( macro , '-1' , '24' , '-1' ) ; +test( macro , '1' , '-24' , '-1' ) ; +test( macro , '-1' , '-24' , '0' ) ; +test( macro , '1' , '27' , '0' ) ; +test( macro , '-1' , '27' , '-1' ) ; +test( macro , '1' , '-27' , '-1' ) ; +test( macro , '-1' , '-27' , '0' ) ; +test( macro , '1' , '29' , '0' ) ; +test( macro , '-1' , '29' , '-1' ) ; +test( macro , '1' , '-29' , '-1' ) ; +test( macro , '-1' , '-29' , '0' ) ; +test( macro , '1' , '1234' , '0' ) ; +test( macro , '-1' , '1234' , '-1' ) ; +test( macro , '1' , '-1234' , '-1' ) ; +test( macro , '-1' , '-1234' , '0' ) ; +test( macro , '1' , '5678' , '0' ) ; +test( macro , '-1' , '5678' , '-1' ) ; +test( macro , '1' , '-5678' , '-1' ) ; +test( macro , '-1' , '-5678' , '0' ) ; test( macro , '1' , '1073741824' , '0' ) ; test( macro , '-1' , '1073741824' , '-1' ) ; test( macro , '1' , '-1073741824' , '-1' ) ; test( macro , '-1' , '-1073741824' , '0' ) ; +test( macro , '1' , '51676101935731' , '0' ) ; +test( macro , '-1' , '51676101935731' , '-1' ) ; +test( macro , '1' , '-51676101935731' , '-1' ) ; +test( macro , '-1' , '-51676101935731' , '0' ) ; test( macro , '1' , '717897987691852588770249' , '0' ) ; test( macro , '-1' , '717897987691852588770249' , '-1' ) ; test( macro , '1' , '-717897987691852588770249' , '-1' ) ; test( macro , '-1' , '-717897987691852588770249' , '0' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '-1' , '-3' ) ; +test( macro , '-3' , '-1' , '3' ) ; +test( macro , '3' , '3' , '1' ) ; +test( macro , '-3' , '3' , '-1' ) ; +test( macro , '3' , '-3' , '-1' ) ; +test( macro , '-3' , '-3' , '1' ) ; +test( macro , '3' , '7' , '0' ) ; +test( macro , '-3' , '7' , '-1' ) ; +test( macro , '3' , '-7' , '-1' ) ; +test( macro , '-3' , '-7' , '0' ) ; +test( macro , '3' , '9' , '0' ) ; +test( macro , '-3' , '9' , '-1' ) ; +test( macro , '3' , '-9' , '-1' ) ; +test( macro , '-3' , '-9' , '0' ) ; +test( macro , '3' , '11' , '0' ) ; +test( macro , '-3' , '11' , '-1' ) ; +test( macro , '3' , '-11' , '-1' ) ; +test( macro , '-3' , '-11' , '0' ) ; +test( macro , '3' , '17' , '0' ) ; +test( macro , '-3' , '17' , '-1' ) ; +test( macro , '3' , '-17' , '-1' ) ; +test( macro , '-3' , '-17' , '0' ) ; +test( macro , '3' , '22' , '0' ) ; +test( macro , '-3' , '22' , '-1' ) ; +test( macro , '3' , '-22' , '-1' ) ; +test( macro , '-3' , '-22' , '0' ) ; +test( macro , '3' , '24' , '0' ) ; +test( macro , '-3' , '24' , '-1' ) ; +test( macro , '3' , '-24' , '-1' ) ; +test( macro , '-3' , '-24' , '0' ) ; +test( macro , '3' , '27' , '0' ) ; +test( macro , '-3' , '27' , '-1' ) ; +test( macro , '3' , '-27' , '-1' ) ; +test( macro , '-3' , '-27' , '0' ) ; +test( macro , '3' , '29' , '0' ) ; +test( macro , '-3' , '29' , '-1' ) ; +test( macro , '3' , '-29' , '-1' ) ; +test( macro , '-3' , '-29' , '0' ) ; +test( macro , '3' , '1234' , '0' ) ; +test( macro , '-3' , '1234' , '-1' ) ; +test( macro , '3' , '-1234' , '-1' ) ; +test( macro , '-3' , '-1234' , '0' ) ; +test( macro , '3' , '5678' , '0' ) ; +test( macro , '-3' , '5678' , '-1' ) ; +test( macro , '3' , '-5678' , '-1' ) ; +test( macro , '-3' , '-5678' , '0' ) ; +test( macro , '3' , '1073741824' , '0' ) ; +test( macro , '-3' , '1073741824' , '-1' ) ; +test( macro , '3' , '-1073741824' , '-1' ) ; +test( macro , '-3' , '-1073741824' , '0' ) ; +test( macro , '3' , '51676101935731' , '0' ) ; +test( macro , '-3' , '51676101935731' , '-1' ) ; +test( macro , '3' , '-51676101935731' , '-1' ) ; +test( macro , '-3' , '-51676101935731' , '0' ) ; +test( macro , '3' , '717897987691852588770249' , '0' ) ; +test( macro , '-3' , '717897987691852588770249' , '-1' ) ; +test( macro , '3' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-3' , '-717897987691852588770249' , '0' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '-1' , '-7' ) ; +test( macro , '-7' , '-1' , '7' ) ; +test( macro , '7' , '3' , '2' ) ; +test( macro , '-7' , '3' , '-3' ) ; +test( macro , '7' , '-3' , '-3' ) ; +test( macro , '-7' , '-3' , '2' ) ; +test( macro , '7' , '7' , '1' ) ; +test( macro , '-7' , '7' , '-1' ) ; +test( macro , '7' , '-7' , '-1' ) ; +test( macro , '-7' , '-7' , '1' ) ; +test( macro , '7' , '9' , '0' ) ; +test( macro , '-7' , '9' , '-1' ) ; +test( macro , '7' , '-9' , '-1' ) ; +test( macro , '-7' , '-9' , '0' ) ; +test( macro , '7' , '11' , '0' ) ; +test( macro , '-7' , '11' , '-1' ) ; +test( macro , '7' , '-11' , '-1' ) ; +test( macro , '-7' , '-11' , '0' ) ; +test( macro , '7' , '17' , '0' ) ; +test( macro , '-7' , '17' , '-1' ) ; +test( macro , '7' , '-17' , '-1' ) ; +test( macro , '-7' , '-17' , '0' ) ; +test( macro , '7' , '22' , '0' ) ; +test( macro , '-7' , '22' , '-1' ) ; +test( macro , '7' , '-22' , '-1' ) ; +test( macro , '-7' , '-22' , '0' ) ; +test( macro , '7' , '24' , '0' ) ; +test( macro , '-7' , '24' , '-1' ) ; +test( macro , '7' , '-24' , '-1' ) ; +test( macro , '-7' , '-24' , '0' ) ; +test( macro , '7' , '27' , '0' ) ; +test( macro , '-7' , '27' , '-1' ) ; +test( macro , '7' , '-27' , '-1' ) ; +test( macro , '-7' , '-27' , '0' ) ; +test( macro , '7' , '29' , '0' ) ; +test( macro , '-7' , '29' , '-1' ) ; +test( macro , '7' , '-29' , '-1' ) ; +test( macro , '-7' , '-29' , '0' ) ; +test( macro , '7' , '1234' , '0' ) ; +test( macro , '-7' , '1234' , '-1' ) ; +test( macro , '7' , '-1234' , '-1' ) ; +test( macro , '-7' , '-1234' , '0' ) ; +test( macro , '7' , '5678' , '0' ) ; +test( macro , '-7' , '5678' , '-1' ) ; +test( macro , '7' , '-5678' , '-1' ) ; +test( macro , '-7' , '-5678' , '0' ) ; +test( macro , '7' , '1073741824' , '0' ) ; +test( macro , '-7' , '1073741824' , '-1' ) ; +test( macro , '7' , '-1073741824' , '-1' ) ; +test( macro , '-7' , '-1073741824' , '0' ) ; +test( macro , '7' , '51676101935731' , '0' ) ; +test( macro , '-7' , '51676101935731' , '-1' ) ; +test( macro , '7' , '-51676101935731' , '-1' ) ; +test( macro , '-7' , '-51676101935731' , '0' ) ; +test( macro , '7' , '717897987691852588770249' , '0' ) ; +test( macro , '-7' , '717897987691852588770249' , '-1' ) ; +test( macro , '7' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-7' , '-717897987691852588770249' , '0' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '-1' , '-9' ) ; +test( macro , '-9' , '-1' , '9' ) ; +test( macro , '9' , '3' , '3' ) ; +test( macro , '-9' , '3' , '-3' ) ; +test( macro , '9' , '-3' , '-3' ) ; +test( macro , '-9' , '-3' , '3' ) ; +test( macro , '9' , '7' , '1' ) ; +test( macro , '-9' , '7' , '-2' ) ; +test( macro , '9' , '-7' , '-2' ) ; +test( macro , '-9' , '-7' , '1' ) ; +test( macro , '9' , '9' , '1' ) ; +test( macro , '-9' , '9' , '-1' ) ; +test( macro , '9' , '-9' , '-1' ) ; +test( macro , '-9' , '-9' , '1' ) ; +test( macro , '9' , '11' , '0' ) ; +test( macro , '-9' , '11' , '-1' ) ; +test( macro , '9' , '-11' , '-1' ) ; +test( macro , '-9' , '-11' , '0' ) ; +test( macro , '9' , '17' , '0' ) ; +test( macro , '-9' , '17' , '-1' ) ; +test( macro , '9' , '-17' , '-1' ) ; +test( macro , '-9' , '-17' , '0' ) ; +test( macro , '9' , '22' , '0' ) ; +test( macro , '-9' , '22' , '-1' ) ; +test( macro , '9' , '-22' , '-1' ) ; +test( macro , '-9' , '-22' , '0' ) ; +test( macro , '9' , '24' , '0' ) ; +test( macro , '-9' , '24' , '-1' ) ; +test( macro , '9' , '-24' , '-1' ) ; +test( macro , '-9' , '-24' , '0' ) ; +test( macro , '9' , '27' , '0' ) ; +test( macro , '-9' , '27' , '-1' ) ; +test( macro , '9' , '-27' , '-1' ) ; +test( macro , '-9' , '-27' , '0' ) ; +test( macro , '9' , '29' , '0' ) ; +test( macro , '-9' , '29' , '-1' ) ; +test( macro , '9' , '-29' , '-1' ) ; +test( macro , '-9' , '-29' , '0' ) ; +test( macro , '9' , '1234' , '0' ) ; +test( macro , '-9' , '1234' , '-1' ) ; +test( macro , '9' , '-1234' , '-1' ) ; +test( macro , '-9' , '-1234' , '0' ) ; +test( macro , '9' , '5678' , '0' ) ; +test( macro , '-9' , '5678' , '-1' ) ; +test( macro , '9' , '-5678' , '-1' ) ; +test( macro , '-9' , '-5678' , '0' ) ; +test( macro , '9' , '1073741824' , '0' ) ; +test( macro , '-9' , '1073741824' , '-1' ) ; +test( macro , '9' , '-1073741824' , '-1' ) ; +test( macro , '-9' , '-1073741824' , '0' ) ; +test( macro , '9' , '51676101935731' , '0' ) ; +test( macro , '-9' , '51676101935731' , '-1' ) ; +test( macro , '9' , '-51676101935731' , '-1' ) ; +test( macro , '-9' , '-51676101935731' , '0' ) ; +test( macro , '9' , '717897987691852588770249' , '0' ) ; +test( macro , '-9' , '717897987691852588770249' , '-1' ) ; +test( macro , '9' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-9' , '-717897987691852588770249' , '0' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '-1' , '-11' ) ; +test( macro , '-11' , '-1' , '11' ) ; +test( macro , '11' , '3' , '3' ) ; +test( macro , '-11' , '3' , '-4' ) ; +test( macro , '11' , '-3' , '-4' ) ; +test( macro , '-11' , '-3' , '3' ) ; +test( macro , '11' , '7' , '1' ) ; +test( macro , '-11' , '7' , '-2' ) ; +test( macro , '11' , '-7' , '-2' ) ; +test( macro , '-11' , '-7' , '1' ) ; +test( macro , '11' , '9' , '1' ) ; +test( macro , '-11' , '9' , '-2' ) ; +test( macro , '11' , '-9' , '-2' ) ; +test( macro , '-11' , '-9' , '1' ) ; +test( macro , '11' , '11' , '1' ) ; +test( macro , '-11' , '11' , '-1' ) ; +test( macro , '11' , '-11' , '-1' ) ; +test( macro , '-11' , '-11' , '1' ) ; +test( macro , '11' , '17' , '0' ) ; +test( macro , '-11' , '17' , '-1' ) ; +test( macro , '11' , '-17' , '-1' ) ; +test( macro , '-11' , '-17' , '0' ) ; +test( macro , '11' , '22' , '0' ) ; +test( macro , '-11' , '22' , '-1' ) ; +test( macro , '11' , '-22' , '-1' ) ; +test( macro , '-11' , '-22' , '0' ) ; +test( macro , '11' , '24' , '0' ) ; +test( macro , '-11' , '24' , '-1' ) ; +test( macro , '11' , '-24' , '-1' ) ; +test( macro , '-11' , '-24' , '0' ) ; +test( macro , '11' , '27' , '0' ) ; +test( macro , '-11' , '27' , '-1' ) ; +test( macro , '11' , '-27' , '-1' ) ; +test( macro , '-11' , '-27' , '0' ) ; +test( macro , '11' , '29' , '0' ) ; +test( macro , '-11' , '29' , '-1' ) ; +test( macro , '11' , '-29' , '-1' ) ; +test( macro , '-11' , '-29' , '0' ) ; +test( macro , '11' , '1234' , '0' ) ; +test( macro , '-11' , '1234' , '-1' ) ; +test( macro , '11' , '-1234' , '-1' ) ; +test( macro , '-11' , '-1234' , '0' ) ; +test( macro , '11' , '5678' , '0' ) ; +test( macro , '-11' , '5678' , '-1' ) ; +test( macro , '11' , '-5678' , '-1' ) ; +test( macro , '-11' , '-5678' , '0' ) ; +test( macro , '11' , '1073741824' , '0' ) ; +test( macro , '-11' , '1073741824' , '-1' ) ; +test( macro , '11' , '-1073741824' , '-1' ) ; +test( macro , '-11' , '-1073741824' , '0' ) ; +test( macro , '11' , '51676101935731' , '0' ) ; +test( macro , '-11' , '51676101935731' , '-1' ) ; +test( macro , '11' , '-51676101935731' , '-1' ) ; +test( macro , '-11' , '-51676101935731' , '0' ) ; +test( macro , '11' , '717897987691852588770249' , '0' ) ; +test( macro , '-11' , '717897987691852588770249' , '-1' ) ; +test( macro , '11' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-11' , '-717897987691852588770249' , '0' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; test( macro , '-17' , '-1' , '17' ) ; +test( macro , '17' , '3' , '5' ) ; +test( macro , '-17' , '3' , '-6' ) ; +test( macro , '17' , '-3' , '-6' ) ; +test( macro , '-17' , '-3' , '5' ) ; +test( macro , '17' , '7' , '2' ) ; +test( macro , '-17' , '7' , '-3' ) ; +test( macro , '17' , '-7' , '-3' ) ; +test( macro , '-17' , '-7' , '2' ) ; +test( macro , '17' , '9' , '1' ) ; +test( macro , '-17' , '9' , '-2' ) ; +test( macro , '17' , '-9' , '-2' ) ; +test( macro , '-17' , '-9' , '1' ) ; +test( macro , '17' , '11' , '1' ) ; +test( macro , '-17' , '11' , '-2' ) ; +test( macro , '17' , '-11' , '-2' ) ; +test( macro , '-17' , '-11' , '1' ) ; test( macro , '17' , '17' , '1' ) ; test( macro , '-17' , '17' , '-1' ) ; test( macro , '17' , '-17' , '-1' ) ; test( macro , '-17' , '-17' , '1' ) ; -test( macro , '17' , '51676101935731' , '0' ) ; -test( macro , '-17' , '51676101935731' , '-1' ) ; -test( macro , '17' , '-51676101935731' , '-1' ) ; -test( macro , '-17' , '-51676101935731' , '0' ) ; +test( macro , '17' , '22' , '0' ) ; +test( macro , '-17' , '22' , '-1' ) ; +test( macro , '17' , '-22' , '-1' ) ; +test( macro , '-17' , '-22' , '0' ) ; +test( macro , '17' , '24' , '0' ) ; +test( macro , '-17' , '24' , '-1' ) ; +test( macro , '17' , '-24' , '-1' ) ; +test( macro , '-17' , '-24' , '0' ) ; +test( macro , '17' , '27' , '0' ) ; +test( macro , '-17' , '27' , '-1' ) ; +test( macro , '17' , '-27' , '-1' ) ; +test( macro , '-17' , '-27' , '0' ) ; +test( macro , '17' , '29' , '0' ) ; +test( macro , '-17' , '29' , '-1' ) ; +test( macro , '17' , '-29' , '-1' ) ; +test( macro , '-17' , '-29' , '0' ) ; +test( macro , '17' , '1234' , '0' ) ; +test( macro , '-17' , '1234' , '-1' ) ; +test( macro , '17' , '-1234' , '-1' ) ; +test( macro , '-17' , '-1234' , '0' ) ; +test( macro , '17' , '5678' , '0' ) ; +test( macro , '-17' , '5678' , '-1' ) ; +test( macro , '17' , '-5678' , '-1' ) ; +test( macro , '-17' , '-5678' , '0' ) ; test( macro , '17' , '1073741824' , '0' ) ; test( macro , '-17' , '1073741824' , '-1' ) ; test( macro , '17' , '-1073741824' , '-1' ) ; test( macro , '-17' , '-1073741824' , '0' ) ; +test( macro , '17' , '51676101935731' , '0' ) ; +test( macro , '-17' , '51676101935731' , '-1' ) ; +test( macro , '17' , '-51676101935731' , '-1' ) ; +test( macro , '-17' , '-51676101935731' , '0' ) ; test( macro , '17' , '717897987691852588770249' , '0' ) ; test( macro , '-17' , '717897987691852588770249' , '-1' ) ; test( macro , '17' , '-717897987691852588770249' , '-1' ) ; test( macro , '-17' , '-717897987691852588770249' , '0' ) ; -test( macro , '51676101935731' , '1' , '51676101935731' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; -test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; -test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; -test( macro , '51676101935731' , '17' , '3039770702101' ) ; -test( macro , '-51676101935731' , '17' , '-3039770702102' ) ; -test( macro , '51676101935731' , '-17' , '-3039770702102' ) ; -test( macro , '-51676101935731' , '-17' , '3039770702101' ) ; -test( macro , '51676101935731' , '51676101935731' , '1' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-1' ) ; -test( macro , '51676101935731' , '-51676101935731' , '-1' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '1' ) ; -test( macro , '51676101935731' , '1073741824' , '48127' ) ; -test( macro , '-51676101935731' , '1073741824' , '-48128' ) ; -test( macro , '51676101935731' , '-1073741824' , '-48128' ) ; -test( macro , '-51676101935731' , '-1073741824' , '48127' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '0' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-1' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-1' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '0' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '-1' , '-22' ) ; +test( macro , '-22' , '-1' , '22' ) ; +test( macro , '22' , '3' , '7' ) ; +test( macro , '-22' , '3' , '-8' ) ; +test( macro , '22' , '-3' , '-8' ) ; +test( macro , '-22' , '-3' , '7' ) ; +test( macro , '22' , '7' , '3' ) ; +test( macro , '-22' , '7' , '-4' ) ; +test( macro , '22' , '-7' , '-4' ) ; +test( macro , '-22' , '-7' , '3' ) ; +test( macro , '22' , '9' , '2' ) ; +test( macro , '-22' , '9' , '-3' ) ; +test( macro , '22' , '-9' , '-3' ) ; +test( macro , '-22' , '-9' , '2' ) ; +test( macro , '22' , '11' , '2' ) ; +test( macro , '-22' , '11' , '-2' ) ; +test( macro , '22' , '-11' , '-2' ) ; +test( macro , '-22' , '-11' , '2' ) ; +test( macro , '22' , '17' , '1' ) ; +test( macro , '-22' , '17' , '-2' ) ; +test( macro , '22' , '-17' , '-2' ) ; +test( macro , '-22' , '-17' , '1' ) ; +test( macro , '22' , '22' , '1' ) ; +test( macro , '-22' , '22' , '-1' ) ; +test( macro , '22' , '-22' , '-1' ) ; +test( macro , '-22' , '-22' , '1' ) ; +test( macro , '22' , '24' , '0' ) ; +test( macro , '-22' , '24' , '-1' ) ; +test( macro , '22' , '-24' , '-1' ) ; +test( macro , '-22' , '-24' , '0' ) ; +test( macro , '22' , '27' , '0' ) ; +test( macro , '-22' , '27' , '-1' ) ; +test( macro , '22' , '-27' , '-1' ) ; +test( macro , '-22' , '-27' , '0' ) ; +test( macro , '22' , '29' , '0' ) ; +test( macro , '-22' , '29' , '-1' ) ; +test( macro , '22' , '-29' , '-1' ) ; +test( macro , '-22' , '-29' , '0' ) ; +test( macro , '22' , '1234' , '0' ) ; +test( macro , '-22' , '1234' , '-1' ) ; +test( macro , '22' , '-1234' , '-1' ) ; +test( macro , '-22' , '-1234' , '0' ) ; +test( macro , '22' , '5678' , '0' ) ; +test( macro , '-22' , '5678' , '-1' ) ; +test( macro , '22' , '-5678' , '-1' ) ; +test( macro , '-22' , '-5678' , '0' ) ; +test( macro , '22' , '1073741824' , '0' ) ; +test( macro , '-22' , '1073741824' , '-1' ) ; +test( macro , '22' , '-1073741824' , '-1' ) ; +test( macro , '-22' , '-1073741824' , '0' ) ; +test( macro , '22' , '51676101935731' , '0' ) ; +test( macro , '-22' , '51676101935731' , '-1' ) ; +test( macro , '22' , '-51676101935731' , '-1' ) ; +test( macro , '-22' , '-51676101935731' , '0' ) ; +test( macro , '22' , '717897987691852588770249' , '0' ) ; +test( macro , '-22' , '717897987691852588770249' , '-1' ) ; +test( macro , '22' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-22' , '-717897987691852588770249' , '0' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '-1' , '-24' ) ; +test( macro , '-24' , '-1' , '24' ) ; +test( macro , '24' , '3' , '8' ) ; +test( macro , '-24' , '3' , '-8' ) ; +test( macro , '24' , '-3' , '-8' ) ; +test( macro , '-24' , '-3' , '8' ) ; +test( macro , '24' , '7' , '3' ) ; +test( macro , '-24' , '7' , '-4' ) ; +test( macro , '24' , '-7' , '-4' ) ; +test( macro , '-24' , '-7' , '3' ) ; +test( macro , '24' , '9' , '2' ) ; +test( macro , '-24' , '9' , '-3' ) ; +test( macro , '24' , '-9' , '-3' ) ; +test( macro , '-24' , '-9' , '2' ) ; +test( macro , '24' , '11' , '2' ) ; +test( macro , '-24' , '11' , '-3' ) ; +test( macro , '24' , '-11' , '-3' ) ; +test( macro , '-24' , '-11' , '2' ) ; +test( macro , '24' , '17' , '1' ) ; +test( macro , '-24' , '17' , '-2' ) ; +test( macro , '24' , '-17' , '-2' ) ; +test( macro , '-24' , '-17' , '1' ) ; +test( macro , '24' , '22' , '1' ) ; +test( macro , '-24' , '22' , '-2' ) ; +test( macro , '24' , '-22' , '-2' ) ; +test( macro , '-24' , '-22' , '1' ) ; +test( macro , '24' , '24' , '1' ) ; +test( macro , '-24' , '24' , '-1' ) ; +test( macro , '24' , '-24' , '-1' ) ; +test( macro , '-24' , '-24' , '1' ) ; +test( macro , '24' , '27' , '0' ) ; +test( macro , '-24' , '27' , '-1' ) ; +test( macro , '24' , '-27' , '-1' ) ; +test( macro , '-24' , '-27' , '0' ) ; +test( macro , '24' , '29' , '0' ) ; +test( macro , '-24' , '29' , '-1' ) ; +test( macro , '24' , '-29' , '-1' ) ; +test( macro , '-24' , '-29' , '0' ) ; +test( macro , '24' , '1234' , '0' ) ; +test( macro , '-24' , '1234' , '-1' ) ; +test( macro , '24' , '-1234' , '-1' ) ; +test( macro , '-24' , '-1234' , '0' ) ; +test( macro , '24' , '5678' , '0' ) ; +test( macro , '-24' , '5678' , '-1' ) ; +test( macro , '24' , '-5678' , '-1' ) ; +test( macro , '-24' , '-5678' , '0' ) ; +test( macro , '24' , '1073741824' , '0' ) ; +test( macro , '-24' , '1073741824' , '-1' ) ; +test( macro , '24' , '-1073741824' , '-1' ) ; +test( macro , '-24' , '-1073741824' , '0' ) ; +test( macro , '24' , '51676101935731' , '0' ) ; +test( macro , '-24' , '51676101935731' , '-1' ) ; +test( macro , '24' , '-51676101935731' , '-1' ) ; +test( macro , '-24' , '-51676101935731' , '0' ) ; +test( macro , '24' , '717897987691852588770249' , '0' ) ; +test( macro , '-24' , '717897987691852588770249' , '-1' ) ; +test( macro , '24' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-24' , '-717897987691852588770249' , '0' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '-1' , '-27' ) ; +test( macro , '-27' , '-1' , '27' ) ; +test( macro , '27' , '3' , '9' ) ; +test( macro , '-27' , '3' , '-9' ) ; +test( macro , '27' , '-3' , '-9' ) ; +test( macro , '-27' , '-3' , '9' ) ; +test( macro , '27' , '7' , '3' ) ; +test( macro , '-27' , '7' , '-4' ) ; +test( macro , '27' , '-7' , '-4' ) ; +test( macro , '-27' , '-7' , '3' ) ; +test( macro , '27' , '9' , '3' ) ; +test( macro , '-27' , '9' , '-3' ) ; +test( macro , '27' , '-9' , '-3' ) ; +test( macro , '-27' , '-9' , '3' ) ; +test( macro , '27' , '11' , '2' ) ; +test( macro , '-27' , '11' , '-3' ) ; +test( macro , '27' , '-11' , '-3' ) ; +test( macro , '-27' , '-11' , '2' ) ; +test( macro , '27' , '17' , '1' ) ; +test( macro , '-27' , '17' , '-2' ) ; +test( macro , '27' , '-17' , '-2' ) ; +test( macro , '-27' , '-17' , '1' ) ; +test( macro , '27' , '22' , '1' ) ; +test( macro , '-27' , '22' , '-2' ) ; +test( macro , '27' , '-22' , '-2' ) ; +test( macro , '-27' , '-22' , '1' ) ; +test( macro , '27' , '24' , '1' ) ; +test( macro , '-27' , '24' , '-2' ) ; +test( macro , '27' , '-24' , '-2' ) ; +test( macro , '-27' , '-24' , '1' ) ; +test( macro , '27' , '27' , '1' ) ; +test( macro , '-27' , '27' , '-1' ) ; +test( macro , '27' , '-27' , '-1' ) ; +test( macro , '-27' , '-27' , '1' ) ; +test( macro , '27' , '29' , '0' ) ; +test( macro , '-27' , '29' , '-1' ) ; +test( macro , '27' , '-29' , '-1' ) ; +test( macro , '-27' , '-29' , '0' ) ; +test( macro , '27' , '1234' , '0' ) ; +test( macro , '-27' , '1234' , '-1' ) ; +test( macro , '27' , '-1234' , '-1' ) ; +test( macro , '-27' , '-1234' , '0' ) ; +test( macro , '27' , '5678' , '0' ) ; +test( macro , '-27' , '5678' , '-1' ) ; +test( macro , '27' , '-5678' , '-1' ) ; +test( macro , '-27' , '-5678' , '0' ) ; +test( macro , '27' , '1073741824' , '0' ) ; +test( macro , '-27' , '1073741824' , '-1' ) ; +test( macro , '27' , '-1073741824' , '-1' ) ; +test( macro , '-27' , '-1073741824' , '0' ) ; +test( macro , '27' , '51676101935731' , '0' ) ; +test( macro , '-27' , '51676101935731' , '-1' ) ; +test( macro , '27' , '-51676101935731' , '-1' ) ; +test( macro , '-27' , '-51676101935731' , '0' ) ; +test( macro , '27' , '717897987691852588770249' , '0' ) ; +test( macro , '-27' , '717897987691852588770249' , '-1' ) ; +test( macro , '27' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-27' , '-717897987691852588770249' , '0' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '-1' , '-29' ) ; +test( macro , '-29' , '-1' , '29' ) ; +test( macro , '29' , '3' , '9' ) ; +test( macro , '-29' , '3' , '-10' ) ; +test( macro , '29' , '-3' , '-10' ) ; +test( macro , '-29' , '-3' , '9' ) ; +test( macro , '29' , '7' , '4' ) ; +test( macro , '-29' , '7' , '-5' ) ; +test( macro , '29' , '-7' , '-5' ) ; +test( macro , '-29' , '-7' , '4' ) ; +test( macro , '29' , '9' , '3' ) ; +test( macro , '-29' , '9' , '-4' ) ; +test( macro , '29' , '-9' , '-4' ) ; +test( macro , '-29' , '-9' , '3' ) ; +test( macro , '29' , '11' , '2' ) ; +test( macro , '-29' , '11' , '-3' ) ; +test( macro , '29' , '-11' , '-3' ) ; +test( macro , '-29' , '-11' , '2' ) ; +test( macro , '29' , '17' , '1' ) ; +test( macro , '-29' , '17' , '-2' ) ; +test( macro , '29' , '-17' , '-2' ) ; +test( macro , '-29' , '-17' , '1' ) ; +test( macro , '29' , '22' , '1' ) ; +test( macro , '-29' , '22' , '-2' ) ; +test( macro , '29' , '-22' , '-2' ) ; +test( macro , '-29' , '-22' , '1' ) ; +test( macro , '29' , '24' , '1' ) ; +test( macro , '-29' , '24' , '-2' ) ; +test( macro , '29' , '-24' , '-2' ) ; +test( macro , '-29' , '-24' , '1' ) ; +test( macro , '29' , '27' , '1' ) ; +test( macro , '-29' , '27' , '-2' ) ; +test( macro , '29' , '-27' , '-2' ) ; +test( macro , '-29' , '-27' , '1' ) ; +test( macro , '29' , '29' , '1' ) ; +test( macro , '-29' , '29' , '-1' ) ; +test( macro , '29' , '-29' , '-1' ) ; +test( macro , '-29' , '-29' , '1' ) ; +test( macro , '29' , '1234' , '0' ) ; +test( macro , '-29' , '1234' , '-1' ) ; +test( macro , '29' , '-1234' , '-1' ) ; +test( macro , '-29' , '-1234' , '0' ) ; +test( macro , '29' , '5678' , '0' ) ; +test( macro , '-29' , '5678' , '-1' ) ; +test( macro , '29' , '-5678' , '-1' ) ; +test( macro , '-29' , '-5678' , '0' ) ; +test( macro , '29' , '1073741824' , '0' ) ; +test( macro , '-29' , '1073741824' , '-1' ) ; +test( macro , '29' , '-1073741824' , '-1' ) ; +test( macro , '-29' , '-1073741824' , '0' ) ; +test( macro , '29' , '51676101935731' , '0' ) ; +test( macro , '-29' , '51676101935731' , '-1' ) ; +test( macro , '29' , '-51676101935731' , '-1' ) ; +test( macro , '-29' , '-51676101935731' , '0' ) ; +test( macro , '29' , '717897987691852588770249' , '0' ) ; +test( macro , '-29' , '717897987691852588770249' , '-1' ) ; +test( macro , '29' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-29' , '-717897987691852588770249' , '0' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '-1' , '-1234' ) ; +test( macro , '-1234' , '-1' , '1234' ) ; +test( macro , '1234' , '3' , '411' ) ; +test( macro , '-1234' , '3' , '-412' ) ; +test( macro , '1234' , '-3' , '-412' ) ; +test( macro , '-1234' , '-3' , '411' ) ; +test( macro , '1234' , '7' , '176' ) ; +test( macro , '-1234' , '7' , '-177' ) ; +test( macro , '1234' , '-7' , '-177' ) ; +test( macro , '-1234' , '-7' , '176' ) ; +test( macro , '1234' , '9' , '137' ) ; +test( macro , '-1234' , '9' , '-138' ) ; +test( macro , '1234' , '-9' , '-138' ) ; +test( macro , '-1234' , '-9' , '137' ) ; +test( macro , '1234' , '11' , '112' ) ; +test( macro , '-1234' , '11' , '-113' ) ; +test( macro , '1234' , '-11' , '-113' ) ; +test( macro , '-1234' , '-11' , '112' ) ; +test( macro , '1234' , '17' , '72' ) ; +test( macro , '-1234' , '17' , '-73' ) ; +test( macro , '1234' , '-17' , '-73' ) ; +test( macro , '-1234' , '-17' , '72' ) ; +test( macro , '1234' , '22' , '56' ) ; +test( macro , '-1234' , '22' , '-57' ) ; +test( macro , '1234' , '-22' , '-57' ) ; +test( macro , '-1234' , '-22' , '56' ) ; +test( macro , '1234' , '24' , '51' ) ; +test( macro , '-1234' , '24' , '-52' ) ; +test( macro , '1234' , '-24' , '-52' ) ; +test( macro , '-1234' , '-24' , '51' ) ; +test( macro , '1234' , '27' , '45' ) ; +test( macro , '-1234' , '27' , '-46' ) ; +test( macro , '1234' , '-27' , '-46' ) ; +test( macro , '-1234' , '-27' , '45' ) ; +test( macro , '1234' , '29' , '42' ) ; +test( macro , '-1234' , '29' , '-43' ) ; +test( macro , '1234' , '-29' , '-43' ) ; +test( macro , '-1234' , '-29' , '42' ) ; +test( macro , '1234' , '1234' , '1' ) ; +test( macro , '-1234' , '1234' , '-1' ) ; +test( macro , '1234' , '-1234' , '-1' ) ; +test( macro , '-1234' , '-1234' , '1' ) ; +test( macro , '1234' , '5678' , '0' ) ; +test( macro , '-1234' , '5678' , '-1' ) ; +test( macro , '1234' , '-5678' , '-1' ) ; +test( macro , '-1234' , '-5678' , '0' ) ; +test( macro , '1234' , '1073741824' , '0' ) ; +test( macro , '-1234' , '1073741824' , '-1' ) ; +test( macro , '1234' , '-1073741824' , '-1' ) ; +test( macro , '-1234' , '-1073741824' , '0' ) ; +test( macro , '1234' , '51676101935731' , '0' ) ; +test( macro , '-1234' , '51676101935731' , '-1' ) ; +test( macro , '1234' , '-51676101935731' , '-1' ) ; +test( macro , '-1234' , '-51676101935731' , '0' ) ; +test( macro , '1234' , '717897987691852588770249' , '0' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-1' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '0' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '-1' , '-5678' ) ; +test( macro , '-5678' , '-1' , '5678' ) ; +test( macro , '5678' , '3' , '1892' ) ; +test( macro , '-5678' , '3' , '-1893' ) ; +test( macro , '5678' , '-3' , '-1893' ) ; +test( macro , '-5678' , '-3' , '1892' ) ; +test( macro , '5678' , '7' , '811' ) ; +test( macro , '-5678' , '7' , '-812' ) ; +test( macro , '5678' , '-7' , '-812' ) ; +test( macro , '-5678' , '-7' , '811' ) ; +test( macro , '5678' , '9' , '630' ) ; +test( macro , '-5678' , '9' , '-631' ) ; +test( macro , '5678' , '-9' , '-631' ) ; +test( macro , '-5678' , '-9' , '630' ) ; +test( macro , '5678' , '11' , '516' ) ; +test( macro , '-5678' , '11' , '-517' ) ; +test( macro , '5678' , '-11' , '-517' ) ; +test( macro , '-5678' , '-11' , '516' ) ; +test( macro , '5678' , '17' , '334' ) ; +test( macro , '-5678' , '17' , '-334' ) ; +test( macro , '5678' , '-17' , '-334' ) ; +test( macro , '-5678' , '-17' , '334' ) ; +test( macro , '5678' , '22' , '258' ) ; +test( macro , '-5678' , '22' , '-259' ) ; +test( macro , '5678' , '-22' , '-259' ) ; +test( macro , '-5678' , '-22' , '258' ) ; +test( macro , '5678' , '24' , '236' ) ; +test( macro , '-5678' , '24' , '-237' ) ; +test( macro , '5678' , '-24' , '-237' ) ; +test( macro , '-5678' , '-24' , '236' ) ; +test( macro , '5678' , '27' , '210' ) ; +test( macro , '-5678' , '27' , '-211' ) ; +test( macro , '5678' , '-27' , '-211' ) ; +test( macro , '-5678' , '-27' , '210' ) ; +test( macro , '5678' , '29' , '195' ) ; +test( macro , '-5678' , '29' , '-196' ) ; +test( macro , '5678' , '-29' , '-196' ) ; +test( macro , '-5678' , '-29' , '195' ) ; +test( macro , '5678' , '1234' , '4' ) ; +test( macro , '-5678' , '1234' , '-5' ) ; +test( macro , '5678' , '-1234' , '-5' ) ; +test( macro , '-5678' , '-1234' , '4' ) ; +test( macro , '5678' , '5678' , '1' ) ; +test( macro , '-5678' , '5678' , '-1' ) ; +test( macro , '5678' , '-5678' , '-1' ) ; +test( macro , '-5678' , '-5678' , '1' ) ; +test( macro , '5678' , '1073741824' , '0' ) ; +test( macro , '-5678' , '1073741824' , '-1' ) ; +test( macro , '5678' , '-1073741824' , '-1' ) ; +test( macro , '-5678' , '-1073741824' , '0' ) ; +test( macro , '5678' , '51676101935731' , '0' ) ; +test( macro , '-5678' , '51676101935731' , '-1' ) ; +test( macro , '5678' , '-51676101935731' , '-1' ) ; +test( macro , '-5678' , '-51676101935731' , '0' ) ; +test( macro , '5678' , '717897987691852588770249' , '0' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-1' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '0' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; test( macro , '-1073741824' , '-1' , '1073741824' ) ; +test( macro , '1073741824' , '3' , '357913941' ) ; +test( macro , '-1073741824' , '3' , '-357913942' ) ; +test( macro , '1073741824' , '-3' , '-357913942' ) ; +test( macro , '-1073741824' , '-3' , '357913941' ) ; +test( macro , '1073741824' , '7' , '153391689' ) ; +test( macro , '-1073741824' , '7' , '-153391690' ) ; +test( macro , '1073741824' , '-7' , '-153391690' ) ; +test( macro , '-1073741824' , '-7' , '153391689' ) ; +test( macro , '1073741824' , '9' , '119304647' ) ; +test( macro , '-1073741824' , '9' , '-119304648' ) ; +test( macro , '1073741824' , '-9' , '-119304648' ) ; +test( macro , '-1073741824' , '-9' , '119304647' ) ; +test( macro , '1073741824' , '11' , '97612893' ) ; +test( macro , '-1073741824' , '11' , '-97612894' ) ; +test( macro , '1073741824' , '-11' , '-97612894' ) ; +test( macro , '-1073741824' , '-11' , '97612893' ) ; test( macro , '1073741824' , '17' , '63161283' ) ; test( macro , '-1073741824' , '17' , '-63161284' ) ; test( macro , '1073741824' , '-17' , '-63161284' ) ; test( macro , '-1073741824' , '-17' , '63161283' ) ; -test( macro , '1073741824' , '51676101935731' , '0' ) ; -test( macro , '-1073741824' , '51676101935731' , '-1' ) ; -test( macro , '1073741824' , '-51676101935731' , '-1' ) ; -test( macro , '-1073741824' , '-51676101935731' , '0' ) ; +test( macro , '1073741824' , '22' , '48806446' ) ; +test( macro , '-1073741824' , '22' , '-48806447' ) ; +test( macro , '1073741824' , '-22' , '-48806447' ) ; +test( macro , '-1073741824' , '-22' , '48806446' ) ; +test( macro , '1073741824' , '24' , '44739242' ) ; +test( macro , '-1073741824' , '24' , '-44739243' ) ; +test( macro , '1073741824' , '-24' , '-44739243' ) ; +test( macro , '-1073741824' , '-24' , '44739242' ) ; +test( macro , '1073741824' , '27' , '39768215' ) ; +test( macro , '-1073741824' , '27' , '-39768216' ) ; +test( macro , '1073741824' , '-27' , '-39768216' ) ; +test( macro , '-1073741824' , '-27' , '39768215' ) ; +test( macro , '1073741824' , '29' , '37025580' ) ; +test( macro , '-1073741824' , '29' , '-37025581' ) ; +test( macro , '1073741824' , '-29' , '-37025581' ) ; +test( macro , '-1073741824' , '-29' , '37025580' ) ; +test( macro , '1073741824' , '1234' , '870131' ) ; +test( macro , '-1073741824' , '1234' , '-870132' ) ; +test( macro , '1073741824' , '-1234' , '-870132' ) ; +test( macro , '-1073741824' , '-1234' , '870131' ) ; +test( macro , '1073741824' , '5678' , '189105' ) ; +test( macro , '-1073741824' , '5678' , '-189106' ) ; +test( macro , '1073741824' , '-5678' , '-189106' ) ; +test( macro , '-1073741824' , '-5678' , '189105' ) ; test( macro , '1073741824' , '1073741824' , '1' ) ; test( macro , '-1073741824' , '1073741824' , '-1' ) ; test( macro , '1073741824' , '-1073741824' , '-1' ) ; test( macro , '-1073741824' , '-1073741824' , '1' ) ; +test( macro , '1073741824' , '51676101935731' , '0' ) ; +test( macro , '-1073741824' , '51676101935731' , '-1' ) ; +test( macro , '1073741824' , '-51676101935731' , '-1' ) ; +test( macro , '-1073741824' , '-51676101935731' , '0' ) ; test( macro , '1073741824' , '717897987691852588770249' , '0' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-1' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-1' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '0' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; +test( macro , '51676101935731' , '3' , '17225367311910' ) ; +test( macro , '-51676101935731' , '3' , '-17225367311911' ) ; +test( macro , '51676101935731' , '-3' , '-17225367311911' ) ; +test( macro , '-51676101935731' , '-3' , '17225367311910' ) ; +test( macro , '51676101935731' , '7' , '7382300276533' ) ; +test( macro , '-51676101935731' , '7' , '-7382300276533' ) ; +test( macro , '51676101935731' , '-7' , '-7382300276533' ) ; +test( macro , '-51676101935731' , '-7' , '7382300276533' ) ; +test( macro , '51676101935731' , '9' , '5741789103970' ) ; +test( macro , '-51676101935731' , '9' , '-5741789103971' ) ; +test( macro , '51676101935731' , '-9' , '-5741789103971' ) ; +test( macro , '-51676101935731' , '-9' , '5741789103970' ) ; +test( macro , '51676101935731' , '11' , '4697827448702' ) ; +test( macro , '-51676101935731' , '11' , '-4697827448703' ) ; +test( macro , '51676101935731' , '-11' , '-4697827448703' ) ; +test( macro , '-51676101935731' , '-11' , '4697827448702' ) ; +test( macro , '51676101935731' , '17' , '3039770702101' ) ; +test( macro , '-51676101935731' , '17' , '-3039770702102' ) ; +test( macro , '51676101935731' , '-17' , '-3039770702102' ) ; +test( macro , '-51676101935731' , '-17' , '3039770702101' ) ; +test( macro , '51676101935731' , '22' , '2348913724351' ) ; +test( macro , '-51676101935731' , '22' , '-2348913724352' ) ; +test( macro , '51676101935731' , '-22' , '-2348913724352' ) ; +test( macro , '-51676101935731' , '-22' , '2348913724351' ) ; +test( macro , '51676101935731' , '24' , '2153170913988' ) ; +test( macro , '-51676101935731' , '24' , '-2153170913989' ) ; +test( macro , '51676101935731' , '-24' , '-2153170913989' ) ; +test( macro , '-51676101935731' , '-24' , '2153170913988' ) ; +test( macro , '51676101935731' , '27' , '1913929701323' ) ; +test( macro , '-51676101935731' , '27' , '-1913929701324' ) ; +test( macro , '51676101935731' , '-27' , '-1913929701324' ) ; +test( macro , '-51676101935731' , '-27' , '1913929701323' ) ; +test( macro , '51676101935731' , '29' , '1781934549507' ) ; +test( macro , '-51676101935731' , '29' , '-1781934549508' ) ; +test( macro , '51676101935731' , '-29' , '-1781934549508' ) ; +test( macro , '-51676101935731' , '-29' , '1781934549507' ) ; +test( macro , '51676101935731' , '1234' , '41876905944' ) ; +test( macro , '-51676101935731' , '1234' , '-41876905945' ) ; +test( macro , '51676101935731' , '-1234' , '-41876905945' ) ; +test( macro , '-51676101935731' , '-1234' , '41876905944' ) ; +test( macro , '51676101935731' , '5678' , '9101109886' ) ; +test( macro , '-51676101935731' , '5678' , '-9101109887' ) ; +test( macro , '51676101935731' , '-5678' , '-9101109887' ) ; +test( macro , '-51676101935731' , '-5678' , '9101109886' ) ; +test( macro , '51676101935731' , '1073741824' , '48127' ) ; +test( macro , '-51676101935731' , '1073741824' , '-48128' ) ; +test( macro , '51676101935731' , '-1073741824' , '-48128' ) ; +test( macro , '-51676101935731' , '-1073741824' , '48127' ) ; +test( macro , '51676101935731' , '51676101935731' , '1' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-1' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-1' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '1' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '0' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-1' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-1' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , '3' , '-239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , '-3' , '-239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , '-3' , '239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , '7' , '102556855384550369824321' ) ; +test( macro , '-717897987691852588770249' , '7' , '-102556855384550369824322' ) ; +test( macro , '717897987691852588770249' , '-7' , '-102556855384550369824322' ) ; +test( macro , '-717897987691852588770249' , '-7' , '102556855384550369824321' ) ; +test( macro , '717897987691852588770249' , '9' , '79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , '9' , '-79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , '-9' , '-79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , '-9' , '79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , '11' , '65263453426532053524568' ) ; +test( macro , '-717897987691852588770249' , '11' , '-65263453426532053524569' ) ; +test( macro , '717897987691852588770249' , '-11' , '-65263453426532053524569' ) ; +test( macro , '-717897987691852588770249' , '-11' , '65263453426532053524568' ) ; test( macro , '717897987691852588770249' , '17' , '42229293393638387574720' ) ; test( macro , '-717897987691852588770249' , '17' , '-42229293393638387574721' ) ; test( macro , '717897987691852588770249' , '-17' , '-42229293393638387574721' ) ; test( macro , '-717897987691852588770249' , '-17' , '42229293393638387574720' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' ) ; +test( macro , '717897987691852588770249' , '22' , '32631726713266026762284' ) ; +test( macro , '-717897987691852588770249' , '22' , '-32631726713266026762285' ) ; +test( macro , '717897987691852588770249' , '-22' , '-32631726713266026762285' ) ; +test( macro , '-717897987691852588770249' , '-22' , '32631726713266026762284' ) ; +test( macro , '717897987691852588770249' , '24' , '29912416153827191198760' ) ; +test( macro , '-717897987691852588770249' , '24' , '-29912416153827191198761' ) ; +test( macro , '717897987691852588770249' , '-24' , '-29912416153827191198761' ) ; +test( macro , '-717897987691852588770249' , '-24' , '29912416153827191198760' ) ; +test( macro , '717897987691852588770249' , '27' , '26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , '27' , '-26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , '-27' , '-26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , '-27' , '26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , '29' , '24755103023856985819663' ) ; +test( macro , '-717897987691852588770249' , '29' , '-24755103023856985819664' ) ; +test( macro , '717897987691852588770249' , '-29' , '-24755103023856985819664' ) ; +test( macro , '-717897987691852588770249' , '-29' , '24755103023856985819663' ) ; +test( macro , '717897987691852588770249' , '1234' , '581764981922084755891' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-581764981922084755892' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-581764981922084755892' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '581764981922084755891' ) ; +test( macro , '717897987691852588770249' , '5678' , '126435010160593974774' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-126435010160593974775' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-126435010160593974775' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '126435010160593974774' ) ; test( macro , '717897987691852588770249' , '1073741824' , '668594602208447' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-668594602208448' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-668594602208448' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '668594602208447' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '1' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-1' ) ; diff --git a/test/src/integer/arithmetic/idivn.js b/test/src/integer/arithmetic/idivn.js new file mode 100644 index 0000000..2b469d4 --- /dev/null +++ b/test/src/integer/arithmetic/idivn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , idivn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = idivn( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `idivn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , -1 , '-1' ) ; +test( macro , '-1' , -1 , '1' ) ; +test( macro , '1' , 3 , '0' ) ; +test( macro , '-1' , 3 , '-1' ) ; +test( macro , '1' , -3 , '-1' ) ; +test( macro , '-1' , -3 , '0' ) ; +test( macro , '1' , 7 , '0' ) ; +test( macro , '-1' , 7 , '-1' ) ; +test( macro , '1' , -7 , '-1' ) ; +test( macro , '-1' , -7 , '0' ) ; +test( macro , '1' , 9 , '0' ) ; +test( macro , '-1' , 9 , '-1' ) ; +test( macro , '1' , -9 , '-1' ) ; +test( macro , '-1' , -9 , '0' ) ; +test( macro , '1' , 11 , '0' ) ; +test( macro , '-1' , 11 , '-1' ) ; +test( macro , '1' , -11 , '-1' ) ; +test( macro , '-1' , -11 , '0' ) ; +test( macro , '1' , 17 , '0' ) ; +test( macro , '-1' , 17 , '-1' ) ; +test( macro , '1' , -17 , '-1' ) ; +test( macro , '-1' , -17 , '0' ) ; +test( macro , '1' , 22 , '0' ) ; +test( macro , '-1' , 22 , '-1' ) ; +test( macro , '1' , -22 , '-1' ) ; +test( macro , '-1' , -22 , '0' ) ; +test( macro , '1' , 24 , '0' ) ; +test( macro , '-1' , 24 , '-1' ) ; +test( macro , '1' , -24 , '-1' ) ; +test( macro , '-1' , -24 , '0' ) ; +test( macro , '1' , 27 , '0' ) ; +test( macro , '-1' , 27 , '-1' ) ; +test( macro , '1' , -27 , '-1' ) ; +test( macro , '-1' , -27 , '0' ) ; +test( macro , '1' , 29 , '0' ) ; +test( macro , '-1' , 29 , '-1' ) ; +test( macro , '1' , -29 , '-1' ) ; +test( macro , '-1' , -29 , '0' ) ; +test( macro , '1' , 1234 , '0' ) ; +test( macro , '-1' , 1234 , '-1' ) ; +test( macro , '1' , -1234 , '-1' ) ; +test( macro , '-1' , -1234 , '0' ) ; +test( macro , '1' , 5678 , '0' ) ; +test( macro , '-1' , 5678 , '-1' ) ; +test( macro , '1' , -5678 , '-1' ) ; +test( macro , '-1' , -5678 , '0' ) ; +test( macro , '1' , 1073741824 , '0' ) ; +test( macro , '-1' , 1073741824 , '-1' ) ; +test( macro , '1' , -1073741824 , '-1' ) ; +test( macro , '-1' , -1073741824 , '0' ) ; +test( macro , '1' , 51676101935731 , '0' ) ; +test( macro , '-1' , 51676101935731 , '-1' ) ; +test( macro , '1' , -51676101935731 , '-1' ) ; +test( macro , '-1' , -51676101935731 , '0' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , -1 , '-3' ) ; +test( macro , '-3' , -1 , '3' ) ; +test( macro , '3' , 3 , '1' ) ; +test( macro , '-3' , 3 , '-1' ) ; +test( macro , '3' , -3 , '-1' ) ; +test( macro , '-3' , -3 , '1' ) ; +test( macro , '3' , 7 , '0' ) ; +test( macro , '-3' , 7 , '-1' ) ; +test( macro , '3' , -7 , '-1' ) ; +test( macro , '-3' , -7 , '0' ) ; +test( macro , '3' , 9 , '0' ) ; +test( macro , '-3' , 9 , '-1' ) ; +test( macro , '3' , -9 , '-1' ) ; +test( macro , '-3' , -9 , '0' ) ; +test( macro , '3' , 11 , '0' ) ; +test( macro , '-3' , 11 , '-1' ) ; +test( macro , '3' , -11 , '-1' ) ; +test( macro , '-3' , -11 , '0' ) ; +test( macro , '3' , 17 , '0' ) ; +test( macro , '-3' , 17 , '-1' ) ; +test( macro , '3' , -17 , '-1' ) ; +test( macro , '-3' , -17 , '0' ) ; +test( macro , '3' , 22 , '0' ) ; +test( macro , '-3' , 22 , '-1' ) ; +test( macro , '3' , -22 , '-1' ) ; +test( macro , '-3' , -22 , '0' ) ; +test( macro , '3' , 24 , '0' ) ; +test( macro , '-3' , 24 , '-1' ) ; +test( macro , '3' , -24 , '-1' ) ; +test( macro , '-3' , -24 , '0' ) ; +test( macro , '3' , 27 , '0' ) ; +test( macro , '-3' , 27 , '-1' ) ; +test( macro , '3' , -27 , '-1' ) ; +test( macro , '-3' , -27 , '0' ) ; +test( macro , '3' , 29 , '0' ) ; +test( macro , '-3' , 29 , '-1' ) ; +test( macro , '3' , -29 , '-1' ) ; +test( macro , '-3' , -29 , '0' ) ; +test( macro , '3' , 1234 , '0' ) ; +test( macro , '-3' , 1234 , '-1' ) ; +test( macro , '3' , -1234 , '-1' ) ; +test( macro , '-3' , -1234 , '0' ) ; +test( macro , '3' , 5678 , '0' ) ; +test( macro , '-3' , 5678 , '-1' ) ; +test( macro , '3' , -5678 , '-1' ) ; +test( macro , '-3' , -5678 , '0' ) ; +test( macro , '3' , 1073741824 , '0' ) ; +test( macro , '-3' , 1073741824 , '-1' ) ; +test( macro , '3' , -1073741824 , '-1' ) ; +test( macro , '-3' , -1073741824 , '0' ) ; +test( macro , '3' , 51676101935731 , '0' ) ; +test( macro , '-3' , 51676101935731 , '-1' ) ; +test( macro , '3' , -51676101935731 , '-1' ) ; +test( macro , '-3' , -51676101935731 , '0' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , -1 , '-7' ) ; +test( macro , '-7' , -1 , '7' ) ; +test( macro , '7' , 3 , '2' ) ; +test( macro , '-7' , 3 , '-3' ) ; +test( macro , '7' , -3 , '-3' ) ; +test( macro , '-7' , -3 , '2' ) ; +test( macro , '7' , 7 , '1' ) ; +test( macro , '-7' , 7 , '-1' ) ; +test( macro , '7' , -7 , '-1' ) ; +test( macro , '-7' , -7 , '1' ) ; +test( macro , '7' , 9 , '0' ) ; +test( macro , '-7' , 9 , '-1' ) ; +test( macro , '7' , -9 , '-1' ) ; +test( macro , '-7' , -9 , '0' ) ; +test( macro , '7' , 11 , '0' ) ; +test( macro , '-7' , 11 , '-1' ) ; +test( macro , '7' , -11 , '-1' ) ; +test( macro , '-7' , -11 , '0' ) ; +test( macro , '7' , 17 , '0' ) ; +test( macro , '-7' , 17 , '-1' ) ; +test( macro , '7' , -17 , '-1' ) ; +test( macro , '-7' , -17 , '0' ) ; +test( macro , '7' , 22 , '0' ) ; +test( macro , '-7' , 22 , '-1' ) ; +test( macro , '7' , -22 , '-1' ) ; +test( macro , '-7' , -22 , '0' ) ; +test( macro , '7' , 24 , '0' ) ; +test( macro , '-7' , 24 , '-1' ) ; +test( macro , '7' , -24 , '-1' ) ; +test( macro , '-7' , -24 , '0' ) ; +test( macro , '7' , 27 , '0' ) ; +test( macro , '-7' , 27 , '-1' ) ; +test( macro , '7' , -27 , '-1' ) ; +test( macro , '-7' , -27 , '0' ) ; +test( macro , '7' , 29 , '0' ) ; +test( macro , '-7' , 29 , '-1' ) ; +test( macro , '7' , -29 , '-1' ) ; +test( macro , '-7' , -29 , '0' ) ; +test( macro , '7' , 1234 , '0' ) ; +test( macro , '-7' , 1234 , '-1' ) ; +test( macro , '7' , -1234 , '-1' ) ; +test( macro , '-7' , -1234 , '0' ) ; +test( macro , '7' , 5678 , '0' ) ; +test( macro , '-7' , 5678 , '-1' ) ; +test( macro , '7' , -5678 , '-1' ) ; +test( macro , '-7' , -5678 , '0' ) ; +test( macro , '7' , 1073741824 , '0' ) ; +test( macro , '-7' , 1073741824 , '-1' ) ; +test( macro , '7' , -1073741824 , '-1' ) ; +test( macro , '-7' , -1073741824 , '0' ) ; +test( macro , '7' , 51676101935731 , '0' ) ; +test( macro , '-7' , 51676101935731 , '-1' ) ; +test( macro , '7' , -51676101935731 , '-1' ) ; +test( macro , '-7' , -51676101935731 , '0' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , -1 , '-9' ) ; +test( macro , '-9' , -1 , '9' ) ; +test( macro , '9' , 3 , '3' ) ; +test( macro , '-9' , 3 , '-3' ) ; +test( macro , '9' , -3 , '-3' ) ; +test( macro , '-9' , -3 , '3' ) ; +test( macro , '9' , 7 , '1' ) ; +test( macro , '-9' , 7 , '-2' ) ; +test( macro , '9' , -7 , '-2' ) ; +test( macro , '-9' , -7 , '1' ) ; +test( macro , '9' , 9 , '1' ) ; +test( macro , '-9' , 9 , '-1' ) ; +test( macro , '9' , -9 , '-1' ) ; +test( macro , '-9' , -9 , '1' ) ; +test( macro , '9' , 11 , '0' ) ; +test( macro , '-9' , 11 , '-1' ) ; +test( macro , '9' , -11 , '-1' ) ; +test( macro , '-9' , -11 , '0' ) ; +test( macro , '9' , 17 , '0' ) ; +test( macro , '-9' , 17 , '-1' ) ; +test( macro , '9' , -17 , '-1' ) ; +test( macro , '-9' , -17 , '0' ) ; +test( macro , '9' , 22 , '0' ) ; +test( macro , '-9' , 22 , '-1' ) ; +test( macro , '9' , -22 , '-1' ) ; +test( macro , '-9' , -22 , '0' ) ; +test( macro , '9' , 24 , '0' ) ; +test( macro , '-9' , 24 , '-1' ) ; +test( macro , '9' , -24 , '-1' ) ; +test( macro , '-9' , -24 , '0' ) ; +test( macro , '9' , 27 , '0' ) ; +test( macro , '-9' , 27 , '-1' ) ; +test( macro , '9' , -27 , '-1' ) ; +test( macro , '-9' , -27 , '0' ) ; +test( macro , '9' , 29 , '0' ) ; +test( macro , '-9' , 29 , '-1' ) ; +test( macro , '9' , -29 , '-1' ) ; +test( macro , '-9' , -29 , '0' ) ; +test( macro , '9' , 1234 , '0' ) ; +test( macro , '-9' , 1234 , '-1' ) ; +test( macro , '9' , -1234 , '-1' ) ; +test( macro , '-9' , -1234 , '0' ) ; +test( macro , '9' , 5678 , '0' ) ; +test( macro , '-9' , 5678 , '-1' ) ; +test( macro , '9' , -5678 , '-1' ) ; +test( macro , '-9' , -5678 , '0' ) ; +test( macro , '9' , 1073741824 , '0' ) ; +test( macro , '-9' , 1073741824 , '-1' ) ; +test( macro , '9' , -1073741824 , '-1' ) ; +test( macro , '-9' , -1073741824 , '0' ) ; +test( macro , '9' , 51676101935731 , '0' ) ; +test( macro , '-9' , 51676101935731 , '-1' ) ; +test( macro , '9' , -51676101935731 , '-1' ) ; +test( macro , '-9' , -51676101935731 , '0' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , -1 , '-11' ) ; +test( macro , '-11' , -1 , '11' ) ; +test( macro , '11' , 3 , '3' ) ; +test( macro , '-11' , 3 , '-4' ) ; +test( macro , '11' , -3 , '-4' ) ; +test( macro , '-11' , -3 , '3' ) ; +test( macro , '11' , 7 , '1' ) ; +test( macro , '-11' , 7 , '-2' ) ; +test( macro , '11' , -7 , '-2' ) ; +test( macro , '-11' , -7 , '1' ) ; +test( macro , '11' , 9 , '1' ) ; +test( macro , '-11' , 9 , '-2' ) ; +test( macro , '11' , -9 , '-2' ) ; +test( macro , '-11' , -9 , '1' ) ; +test( macro , '11' , 11 , '1' ) ; +test( macro , '-11' , 11 , '-1' ) ; +test( macro , '11' , -11 , '-1' ) ; +test( macro , '-11' , -11 , '1' ) ; +test( macro , '11' , 17 , '0' ) ; +test( macro , '-11' , 17 , '-1' ) ; +test( macro , '11' , -17 , '-1' ) ; +test( macro , '-11' , -17 , '0' ) ; +test( macro , '11' , 22 , '0' ) ; +test( macro , '-11' , 22 , '-1' ) ; +test( macro , '11' , -22 , '-1' ) ; +test( macro , '-11' , -22 , '0' ) ; +test( macro , '11' , 24 , '0' ) ; +test( macro , '-11' , 24 , '-1' ) ; +test( macro , '11' , -24 , '-1' ) ; +test( macro , '-11' , -24 , '0' ) ; +test( macro , '11' , 27 , '0' ) ; +test( macro , '-11' , 27 , '-1' ) ; +test( macro , '11' , -27 , '-1' ) ; +test( macro , '-11' , -27 , '0' ) ; +test( macro , '11' , 29 , '0' ) ; +test( macro , '-11' , 29 , '-1' ) ; +test( macro , '11' , -29 , '-1' ) ; +test( macro , '-11' , -29 , '0' ) ; +test( macro , '11' , 1234 , '0' ) ; +test( macro , '-11' , 1234 , '-1' ) ; +test( macro , '11' , -1234 , '-1' ) ; +test( macro , '-11' , -1234 , '0' ) ; +test( macro , '11' , 5678 , '0' ) ; +test( macro , '-11' , 5678 , '-1' ) ; +test( macro , '11' , -5678 , '-1' ) ; +test( macro , '-11' , -5678 , '0' ) ; +test( macro , '11' , 1073741824 , '0' ) ; +test( macro , '-11' , 1073741824 , '-1' ) ; +test( macro , '11' , -1073741824 , '-1' ) ; +test( macro , '-11' , -1073741824 , '0' ) ; +test( macro , '11' , 51676101935731 , '0' ) ; +test( macro , '-11' , 51676101935731 , '-1' ) ; +test( macro , '11' , -51676101935731 , '-1' ) ; +test( macro , '-11' , -51676101935731 , '0' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , -1 , '-17' ) ; +test( macro , '-17' , -1 , '17' ) ; +test( macro , '17' , 3 , '5' ) ; +test( macro , '-17' , 3 , '-6' ) ; +test( macro , '17' , -3 , '-6' ) ; +test( macro , '-17' , -3 , '5' ) ; +test( macro , '17' , 7 , '2' ) ; +test( macro , '-17' , 7 , '-3' ) ; +test( macro , '17' , -7 , '-3' ) ; +test( macro , '-17' , -7 , '2' ) ; +test( macro , '17' , 9 , '1' ) ; +test( macro , '-17' , 9 , '-2' ) ; +test( macro , '17' , -9 , '-2' ) ; +test( macro , '-17' , -9 , '1' ) ; +test( macro , '17' , 11 , '1' ) ; +test( macro , '-17' , 11 , '-2' ) ; +test( macro , '17' , -11 , '-2' ) ; +test( macro , '-17' , -11 , '1' ) ; +test( macro , '17' , 17 , '1' ) ; +test( macro , '-17' , 17 , '-1' ) ; +test( macro , '17' , -17 , '-1' ) ; +test( macro , '-17' , -17 , '1' ) ; +test( macro , '17' , 22 , '0' ) ; +test( macro , '-17' , 22 , '-1' ) ; +test( macro , '17' , -22 , '-1' ) ; +test( macro , '-17' , -22 , '0' ) ; +test( macro , '17' , 24 , '0' ) ; +test( macro , '-17' , 24 , '-1' ) ; +test( macro , '17' , -24 , '-1' ) ; +test( macro , '-17' , -24 , '0' ) ; +test( macro , '17' , 27 , '0' ) ; +test( macro , '-17' , 27 , '-1' ) ; +test( macro , '17' , -27 , '-1' ) ; +test( macro , '-17' , -27 , '0' ) ; +test( macro , '17' , 29 , '0' ) ; +test( macro , '-17' , 29 , '-1' ) ; +test( macro , '17' , -29 , '-1' ) ; +test( macro , '-17' , -29 , '0' ) ; +test( macro , '17' , 1234 , '0' ) ; +test( macro , '-17' , 1234 , '-1' ) ; +test( macro , '17' , -1234 , '-1' ) ; +test( macro , '-17' , -1234 , '0' ) ; +test( macro , '17' , 5678 , '0' ) ; +test( macro , '-17' , 5678 , '-1' ) ; +test( macro , '17' , -5678 , '-1' ) ; +test( macro , '-17' , -5678 , '0' ) ; +test( macro , '17' , 1073741824 , '0' ) ; +test( macro , '-17' , 1073741824 , '-1' ) ; +test( macro , '17' , -1073741824 , '-1' ) ; +test( macro , '-17' , -1073741824 , '0' ) ; +test( macro , '17' , 51676101935731 , '0' ) ; +test( macro , '-17' , 51676101935731 , '-1' ) ; +test( macro , '17' , -51676101935731 , '-1' ) ; +test( macro , '-17' , -51676101935731 , '0' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , -1 , '-22' ) ; +test( macro , '-22' , -1 , '22' ) ; +test( macro , '22' , 3 , '7' ) ; +test( macro , '-22' , 3 , '-8' ) ; +test( macro , '22' , -3 , '-8' ) ; +test( macro , '-22' , -3 , '7' ) ; +test( macro , '22' , 7 , '3' ) ; +test( macro , '-22' , 7 , '-4' ) ; +test( macro , '22' , -7 , '-4' ) ; +test( macro , '-22' , -7 , '3' ) ; +test( macro , '22' , 9 , '2' ) ; +test( macro , '-22' , 9 , '-3' ) ; +test( macro , '22' , -9 , '-3' ) ; +test( macro , '-22' , -9 , '2' ) ; +test( macro , '22' , 11 , '2' ) ; +test( macro , '-22' , 11 , '-2' ) ; +test( macro , '22' , -11 , '-2' ) ; +test( macro , '-22' , -11 , '2' ) ; +test( macro , '22' , 17 , '1' ) ; +test( macro , '-22' , 17 , '-2' ) ; +test( macro , '22' , -17 , '-2' ) ; +test( macro , '-22' , -17 , '1' ) ; +test( macro , '22' , 22 , '1' ) ; +test( macro , '-22' , 22 , '-1' ) ; +test( macro , '22' , -22 , '-1' ) ; +test( macro , '-22' , -22 , '1' ) ; +test( macro , '22' , 24 , '0' ) ; +test( macro , '-22' , 24 , '-1' ) ; +test( macro , '22' , -24 , '-1' ) ; +test( macro , '-22' , -24 , '0' ) ; +test( macro , '22' , 27 , '0' ) ; +test( macro , '-22' , 27 , '-1' ) ; +test( macro , '22' , -27 , '-1' ) ; +test( macro , '-22' , -27 , '0' ) ; +test( macro , '22' , 29 , '0' ) ; +test( macro , '-22' , 29 , '-1' ) ; +test( macro , '22' , -29 , '-1' ) ; +test( macro , '-22' , -29 , '0' ) ; +test( macro , '22' , 1234 , '0' ) ; +test( macro , '-22' , 1234 , '-1' ) ; +test( macro , '22' , -1234 , '-1' ) ; +test( macro , '-22' , -1234 , '0' ) ; +test( macro , '22' , 5678 , '0' ) ; +test( macro , '-22' , 5678 , '-1' ) ; +test( macro , '22' , -5678 , '-1' ) ; +test( macro , '-22' , -5678 , '0' ) ; +test( macro , '22' , 1073741824 , '0' ) ; +test( macro , '-22' , 1073741824 , '-1' ) ; +test( macro , '22' , -1073741824 , '-1' ) ; +test( macro , '-22' , -1073741824 , '0' ) ; +test( macro , '22' , 51676101935731 , '0' ) ; +test( macro , '-22' , 51676101935731 , '-1' ) ; +test( macro , '22' , -51676101935731 , '-1' ) ; +test( macro , '-22' , -51676101935731 , '0' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , -1 , '-24' ) ; +test( macro , '-24' , -1 , '24' ) ; +test( macro , '24' , 3 , '8' ) ; +test( macro , '-24' , 3 , '-8' ) ; +test( macro , '24' , -3 , '-8' ) ; +test( macro , '-24' , -3 , '8' ) ; +test( macro , '24' , 7 , '3' ) ; +test( macro , '-24' , 7 , '-4' ) ; +test( macro , '24' , -7 , '-4' ) ; +test( macro , '-24' , -7 , '3' ) ; +test( macro , '24' , 9 , '2' ) ; +test( macro , '-24' , 9 , '-3' ) ; +test( macro , '24' , -9 , '-3' ) ; +test( macro , '-24' , -9 , '2' ) ; +test( macro , '24' , 11 , '2' ) ; +test( macro , '-24' , 11 , '-3' ) ; +test( macro , '24' , -11 , '-3' ) ; +test( macro , '-24' , -11 , '2' ) ; +test( macro , '24' , 17 , '1' ) ; +test( macro , '-24' , 17 , '-2' ) ; +test( macro , '24' , -17 , '-2' ) ; +test( macro , '-24' , -17 , '1' ) ; +test( macro , '24' , 22 , '1' ) ; +test( macro , '-24' , 22 , '-2' ) ; +test( macro , '24' , -22 , '-2' ) ; +test( macro , '-24' , -22 , '1' ) ; +test( macro , '24' , 24 , '1' ) ; +test( macro , '-24' , 24 , '-1' ) ; +test( macro , '24' , -24 , '-1' ) ; +test( macro , '-24' , -24 , '1' ) ; +test( macro , '24' , 27 , '0' ) ; +test( macro , '-24' , 27 , '-1' ) ; +test( macro , '24' , -27 , '-1' ) ; +test( macro , '-24' , -27 , '0' ) ; +test( macro , '24' , 29 , '0' ) ; +test( macro , '-24' , 29 , '-1' ) ; +test( macro , '24' , -29 , '-1' ) ; +test( macro , '-24' , -29 , '0' ) ; +test( macro , '24' , 1234 , '0' ) ; +test( macro , '-24' , 1234 , '-1' ) ; +test( macro , '24' , -1234 , '-1' ) ; +test( macro , '-24' , -1234 , '0' ) ; +test( macro , '24' , 5678 , '0' ) ; +test( macro , '-24' , 5678 , '-1' ) ; +test( macro , '24' , -5678 , '-1' ) ; +test( macro , '-24' , -5678 , '0' ) ; +test( macro , '24' , 1073741824 , '0' ) ; +test( macro , '-24' , 1073741824 , '-1' ) ; +test( macro , '24' , -1073741824 , '-1' ) ; +test( macro , '-24' , -1073741824 , '0' ) ; +test( macro , '24' , 51676101935731 , '0' ) ; +test( macro , '-24' , 51676101935731 , '-1' ) ; +test( macro , '24' , -51676101935731 , '-1' ) ; +test( macro , '-24' , -51676101935731 , '0' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , -1 , '-27' ) ; +test( macro , '-27' , -1 , '27' ) ; +test( macro , '27' , 3 , '9' ) ; +test( macro , '-27' , 3 , '-9' ) ; +test( macro , '27' , -3 , '-9' ) ; +test( macro , '-27' , -3 , '9' ) ; +test( macro , '27' , 7 , '3' ) ; +test( macro , '-27' , 7 , '-4' ) ; +test( macro , '27' , -7 , '-4' ) ; +test( macro , '-27' , -7 , '3' ) ; +test( macro , '27' , 9 , '3' ) ; +test( macro , '-27' , 9 , '-3' ) ; +test( macro , '27' , -9 , '-3' ) ; +test( macro , '-27' , -9 , '3' ) ; +test( macro , '27' , 11 , '2' ) ; +test( macro , '-27' , 11 , '-3' ) ; +test( macro , '27' , -11 , '-3' ) ; +test( macro , '-27' , -11 , '2' ) ; +test( macro , '27' , 17 , '1' ) ; +test( macro , '-27' , 17 , '-2' ) ; +test( macro , '27' , -17 , '-2' ) ; +test( macro , '-27' , -17 , '1' ) ; +test( macro , '27' , 22 , '1' ) ; +test( macro , '-27' , 22 , '-2' ) ; +test( macro , '27' , -22 , '-2' ) ; +test( macro , '-27' , -22 , '1' ) ; +test( macro , '27' , 24 , '1' ) ; +test( macro , '-27' , 24 , '-2' ) ; +test( macro , '27' , -24 , '-2' ) ; +test( macro , '-27' , -24 , '1' ) ; +test( macro , '27' , 27 , '1' ) ; +test( macro , '-27' , 27 , '-1' ) ; +test( macro , '27' , -27 , '-1' ) ; +test( macro , '-27' , -27 , '1' ) ; +test( macro , '27' , 29 , '0' ) ; +test( macro , '-27' , 29 , '-1' ) ; +test( macro , '27' , -29 , '-1' ) ; +test( macro , '-27' , -29 , '0' ) ; +test( macro , '27' , 1234 , '0' ) ; +test( macro , '-27' , 1234 , '-1' ) ; +test( macro , '27' , -1234 , '-1' ) ; +test( macro , '-27' , -1234 , '0' ) ; +test( macro , '27' , 5678 , '0' ) ; +test( macro , '-27' , 5678 , '-1' ) ; +test( macro , '27' , -5678 , '-1' ) ; +test( macro , '-27' , -5678 , '0' ) ; +test( macro , '27' , 1073741824 , '0' ) ; +test( macro , '-27' , 1073741824 , '-1' ) ; +test( macro , '27' , -1073741824 , '-1' ) ; +test( macro , '-27' , -1073741824 , '0' ) ; +test( macro , '27' , 51676101935731 , '0' ) ; +test( macro , '-27' , 51676101935731 , '-1' ) ; +test( macro , '27' , -51676101935731 , '-1' ) ; +test( macro , '-27' , -51676101935731 , '0' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , -1 , '-29' ) ; +test( macro , '-29' , -1 , '29' ) ; +test( macro , '29' , 3 , '9' ) ; +test( macro , '-29' , 3 , '-10' ) ; +test( macro , '29' , -3 , '-10' ) ; +test( macro , '-29' , -3 , '9' ) ; +test( macro , '29' , 7 , '4' ) ; +test( macro , '-29' , 7 , '-5' ) ; +test( macro , '29' , -7 , '-5' ) ; +test( macro , '-29' , -7 , '4' ) ; +test( macro , '29' , 9 , '3' ) ; +test( macro , '-29' , 9 , '-4' ) ; +test( macro , '29' , -9 , '-4' ) ; +test( macro , '-29' , -9 , '3' ) ; +test( macro , '29' , 11 , '2' ) ; +test( macro , '-29' , 11 , '-3' ) ; +test( macro , '29' , -11 , '-3' ) ; +test( macro , '-29' , -11 , '2' ) ; +test( macro , '29' , 17 , '1' ) ; +test( macro , '-29' , 17 , '-2' ) ; +test( macro , '29' , -17 , '-2' ) ; +test( macro , '-29' , -17 , '1' ) ; +test( macro , '29' , 22 , '1' ) ; +test( macro , '-29' , 22 , '-2' ) ; +test( macro , '29' , -22 , '-2' ) ; +test( macro , '-29' , -22 , '1' ) ; +test( macro , '29' , 24 , '1' ) ; +test( macro , '-29' , 24 , '-2' ) ; +test( macro , '29' , -24 , '-2' ) ; +test( macro , '-29' , -24 , '1' ) ; +test( macro , '29' , 27 , '1' ) ; +test( macro , '-29' , 27 , '-2' ) ; +test( macro , '29' , -27 , '-2' ) ; +test( macro , '-29' , -27 , '1' ) ; +test( macro , '29' , 29 , '1' ) ; +test( macro , '-29' , 29 , '-1' ) ; +test( macro , '29' , -29 , '-1' ) ; +test( macro , '-29' , -29 , '1' ) ; +test( macro , '29' , 1234 , '0' ) ; +test( macro , '-29' , 1234 , '-1' ) ; +test( macro , '29' , -1234 , '-1' ) ; +test( macro , '-29' , -1234 , '0' ) ; +test( macro , '29' , 5678 , '0' ) ; +test( macro , '-29' , 5678 , '-1' ) ; +test( macro , '29' , -5678 , '-1' ) ; +test( macro , '-29' , -5678 , '0' ) ; +test( macro , '29' , 1073741824 , '0' ) ; +test( macro , '-29' , 1073741824 , '-1' ) ; +test( macro , '29' , -1073741824 , '-1' ) ; +test( macro , '-29' , -1073741824 , '0' ) ; +test( macro , '29' , 51676101935731 , '0' ) ; +test( macro , '-29' , 51676101935731 , '-1' ) ; +test( macro , '29' , -51676101935731 , '-1' ) ; +test( macro , '-29' , -51676101935731 , '0' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , -1 , '-1234' ) ; +test( macro , '-1234' , -1 , '1234' ) ; +test( macro , '1234' , 3 , '411' ) ; +test( macro , '-1234' , 3 , '-412' ) ; +test( macro , '1234' , -3 , '-412' ) ; +test( macro , '-1234' , -3 , '411' ) ; +test( macro , '1234' , 7 , '176' ) ; +test( macro , '-1234' , 7 , '-177' ) ; +test( macro , '1234' , -7 , '-177' ) ; +test( macro , '-1234' , -7 , '176' ) ; +test( macro , '1234' , 9 , '137' ) ; +test( macro , '-1234' , 9 , '-138' ) ; +test( macro , '1234' , -9 , '-138' ) ; +test( macro , '-1234' , -9 , '137' ) ; +test( macro , '1234' , 11 , '112' ) ; +test( macro , '-1234' , 11 , '-113' ) ; +test( macro , '1234' , -11 , '-113' ) ; +test( macro , '-1234' , -11 , '112' ) ; +test( macro , '1234' , 17 , '72' ) ; +test( macro , '-1234' , 17 , '-73' ) ; +test( macro , '1234' , -17 , '-73' ) ; +test( macro , '-1234' , -17 , '72' ) ; +test( macro , '1234' , 22 , '56' ) ; +test( macro , '-1234' , 22 , '-57' ) ; +test( macro , '1234' , -22 , '-57' ) ; +test( macro , '-1234' , -22 , '56' ) ; +test( macro , '1234' , 24 , '51' ) ; +test( macro , '-1234' , 24 , '-52' ) ; +test( macro , '1234' , -24 , '-52' ) ; +test( macro , '-1234' , -24 , '51' ) ; +test( macro , '1234' , 27 , '45' ) ; +test( macro , '-1234' , 27 , '-46' ) ; +test( macro , '1234' , -27 , '-46' ) ; +test( macro , '-1234' , -27 , '45' ) ; +test( macro , '1234' , 29 , '42' ) ; +test( macro , '-1234' , 29 , '-43' ) ; +test( macro , '1234' , -29 , '-43' ) ; +test( macro , '-1234' , -29 , '42' ) ; +test( macro , '1234' , 1234 , '1' ) ; +test( macro , '-1234' , 1234 , '-1' ) ; +test( macro , '1234' , -1234 , '-1' ) ; +test( macro , '-1234' , -1234 , '1' ) ; +test( macro , '1234' , 5678 , '0' ) ; +test( macro , '-1234' , 5678 , '-1' ) ; +test( macro , '1234' , -5678 , '-1' ) ; +test( macro , '-1234' , -5678 , '0' ) ; +test( macro , '1234' , 1073741824 , '0' ) ; +test( macro , '-1234' , 1073741824 , '-1' ) ; +test( macro , '1234' , -1073741824 , '-1' ) ; +test( macro , '-1234' , -1073741824 , '0' ) ; +test( macro , '1234' , 51676101935731 , '0' ) ; +test( macro , '-1234' , 51676101935731 , '-1' ) ; +test( macro , '1234' , -51676101935731 , '-1' ) ; +test( macro , '-1234' , -51676101935731 , '0' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , -1 , '-5678' ) ; +test( macro , '-5678' , -1 , '5678' ) ; +test( macro , '5678' , 3 , '1892' ) ; +test( macro , '-5678' , 3 , '-1893' ) ; +test( macro , '5678' , -3 , '-1893' ) ; +test( macro , '-5678' , -3 , '1892' ) ; +test( macro , '5678' , 7 , '811' ) ; +test( macro , '-5678' , 7 , '-812' ) ; +test( macro , '5678' , -7 , '-812' ) ; +test( macro , '-5678' , -7 , '811' ) ; +test( macro , '5678' , 9 , '630' ) ; +test( macro , '-5678' , 9 , '-631' ) ; +test( macro , '5678' , -9 , '-631' ) ; +test( macro , '-5678' , -9 , '630' ) ; +test( macro , '5678' , 11 , '516' ) ; +test( macro , '-5678' , 11 , '-517' ) ; +test( macro , '5678' , -11 , '-517' ) ; +test( macro , '-5678' , -11 , '516' ) ; +test( macro , '5678' , 17 , '334' ) ; +test( macro , '-5678' , 17 , '-334' ) ; +test( macro , '5678' , -17 , '-334' ) ; +test( macro , '-5678' , -17 , '334' ) ; +test( macro , '5678' , 22 , '258' ) ; +test( macro , '-5678' , 22 , '-259' ) ; +test( macro , '5678' , -22 , '-259' ) ; +test( macro , '-5678' , -22 , '258' ) ; +test( macro , '5678' , 24 , '236' ) ; +test( macro , '-5678' , 24 , '-237' ) ; +test( macro , '5678' , -24 , '-237' ) ; +test( macro , '-5678' , -24 , '236' ) ; +test( macro , '5678' , 27 , '210' ) ; +test( macro , '-5678' , 27 , '-211' ) ; +test( macro , '5678' , -27 , '-211' ) ; +test( macro , '-5678' , -27 , '210' ) ; +test( macro , '5678' , 29 , '195' ) ; +test( macro , '-5678' , 29 , '-196' ) ; +test( macro , '5678' , -29 , '-196' ) ; +test( macro , '-5678' , -29 , '195' ) ; +test( macro , '5678' , 1234 , '4' ) ; +test( macro , '-5678' , 1234 , '-5' ) ; +test( macro , '5678' , -1234 , '-5' ) ; +test( macro , '-5678' , -1234 , '4' ) ; +test( macro , '5678' , 5678 , '1' ) ; +test( macro , '-5678' , 5678 , '-1' ) ; +test( macro , '5678' , -5678 , '-1' ) ; +test( macro , '-5678' , -5678 , '1' ) ; +test( macro , '5678' , 1073741824 , '0' ) ; +test( macro , '-5678' , 1073741824 , '-1' ) ; +test( macro , '5678' , -1073741824 , '-1' ) ; +test( macro , '-5678' , -1073741824 , '0' ) ; +test( macro , '5678' , 51676101935731 , '0' ) ; +test( macro , '-5678' , 51676101935731 , '-1' ) ; +test( macro , '5678' , -51676101935731 , '-1' ) ; +test( macro , '-5678' , -51676101935731 , '0' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , -1 , '-1073741824' ) ; +test( macro , '-1073741824' , -1 , '1073741824' ) ; +test( macro , '1073741824' , 3 , '357913941' ) ; +test( macro , '-1073741824' , 3 , '-357913942' ) ; +test( macro , '1073741824' , -3 , '-357913942' ) ; +test( macro , '-1073741824' , -3 , '357913941' ) ; +test( macro , '1073741824' , 7 , '153391689' ) ; +test( macro , '-1073741824' , 7 , '-153391690' ) ; +test( macro , '1073741824' , -7 , '-153391690' ) ; +test( macro , '-1073741824' , -7 , '153391689' ) ; +test( macro , '1073741824' , 9 , '119304647' ) ; +test( macro , '-1073741824' , 9 , '-119304648' ) ; +test( macro , '1073741824' , -9 , '-119304648' ) ; +test( macro , '-1073741824' , -9 , '119304647' ) ; +test( macro , '1073741824' , 11 , '97612893' ) ; +test( macro , '-1073741824' , 11 , '-97612894' ) ; +test( macro , '1073741824' , -11 , '-97612894' ) ; +test( macro , '-1073741824' , -11 , '97612893' ) ; +test( macro , '1073741824' , 17 , '63161283' ) ; +test( macro , '-1073741824' , 17 , '-63161284' ) ; +test( macro , '1073741824' , -17 , '-63161284' ) ; +test( macro , '-1073741824' , -17 , '63161283' ) ; +test( macro , '1073741824' , 22 , '48806446' ) ; +test( macro , '-1073741824' , 22 , '-48806447' ) ; +test( macro , '1073741824' , -22 , '-48806447' ) ; +test( macro , '-1073741824' , -22 , '48806446' ) ; +test( macro , '1073741824' , 24 , '44739242' ) ; +test( macro , '-1073741824' , 24 , '-44739243' ) ; +test( macro , '1073741824' , -24 , '-44739243' ) ; +test( macro , '-1073741824' , -24 , '44739242' ) ; +test( macro , '1073741824' , 27 , '39768215' ) ; +test( macro , '-1073741824' , 27 , '-39768216' ) ; +test( macro , '1073741824' , -27 , '-39768216' ) ; +test( macro , '-1073741824' , -27 , '39768215' ) ; +test( macro , '1073741824' , 29 , '37025580' ) ; +test( macro , '-1073741824' , 29 , '-37025581' ) ; +test( macro , '1073741824' , -29 , '-37025581' ) ; +test( macro , '-1073741824' , -29 , '37025580' ) ; +test( macro , '1073741824' , 1234 , '870131' ) ; +test( macro , '-1073741824' , 1234 , '-870132' ) ; +test( macro , '1073741824' , -1234 , '-870132' ) ; +test( macro , '-1073741824' , -1234 , '870131' ) ; +test( macro , '1073741824' , 5678 , '189105' ) ; +test( macro , '-1073741824' , 5678 , '-189106' ) ; +test( macro , '1073741824' , -5678 , '-189106' ) ; +test( macro , '-1073741824' , -5678 , '189105' ) ; +test( macro , '1073741824' , 1073741824 , '1' ) ; +test( macro , '-1073741824' , 1073741824 , '-1' ) ; +test( macro , '1073741824' , -1073741824 , '-1' ) ; +test( macro , '-1073741824' , -1073741824 , '1' ) ; +test( macro , '1073741824' , 51676101935731 , '0' ) ; +test( macro , '-1073741824' , 51676101935731 , '-1' ) ; +test( macro , '1073741824' , -51676101935731 , '-1' ) ; +test( macro , '-1073741824' , -51676101935731 , '0' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' ) ; +test( macro , '51676101935731' , 3 , '17225367311910' ) ; +test( macro , '-51676101935731' , 3 , '-17225367311911' ) ; +test( macro , '51676101935731' , -3 , '-17225367311911' ) ; +test( macro , '-51676101935731' , -3 , '17225367311910' ) ; +test( macro , '51676101935731' , 7 , '7382300276533' ) ; +test( macro , '-51676101935731' , 7 , '-7382300276533' ) ; +test( macro , '51676101935731' , -7 , '-7382300276533' ) ; +test( macro , '-51676101935731' , -7 , '7382300276533' ) ; +test( macro , '51676101935731' , 9 , '5741789103970' ) ; +test( macro , '-51676101935731' , 9 , '-5741789103971' ) ; +test( macro , '51676101935731' , -9 , '-5741789103971' ) ; +test( macro , '-51676101935731' , -9 , '5741789103970' ) ; +test( macro , '51676101935731' , 11 , '4697827448702' ) ; +test( macro , '-51676101935731' , 11 , '-4697827448703' ) ; +test( macro , '51676101935731' , -11 , '-4697827448703' ) ; +test( macro , '-51676101935731' , -11 , '4697827448702' ) ; +test( macro , '51676101935731' , 17 , '3039770702101' ) ; +test( macro , '-51676101935731' , 17 , '-3039770702102' ) ; +test( macro , '51676101935731' , -17 , '-3039770702102' ) ; +test( macro , '-51676101935731' , -17 , '3039770702101' ) ; +test( macro , '51676101935731' , 22 , '2348913724351' ) ; +test( macro , '-51676101935731' , 22 , '-2348913724352' ) ; +test( macro , '51676101935731' , -22 , '-2348913724352' ) ; +test( macro , '-51676101935731' , -22 , '2348913724351' ) ; +test( macro , '51676101935731' , 24 , '2153170913988' ) ; +test( macro , '-51676101935731' , 24 , '-2153170913989' ) ; +test( macro , '51676101935731' , -24 , '-2153170913989' ) ; +test( macro , '-51676101935731' , -24 , '2153170913988' ) ; +test( macro , '51676101935731' , 27 , '1913929701323' ) ; +test( macro , '-51676101935731' , 27 , '-1913929701324' ) ; +test( macro , '51676101935731' , -27 , '-1913929701324' ) ; +test( macro , '-51676101935731' , -27 , '1913929701323' ) ; +test( macro , '51676101935731' , 29 , '1781934549507' ) ; +test( macro , '-51676101935731' , 29 , '-1781934549508' ) ; +test( macro , '51676101935731' , -29 , '-1781934549508' ) ; +test( macro , '-51676101935731' , -29 , '1781934549507' ) ; +test( macro , '51676101935731' , 1234 , '41876905944' ) ; +test( macro , '-51676101935731' , 1234 , '-41876905945' ) ; +test( macro , '51676101935731' , -1234 , '-41876905945' ) ; +test( macro , '-51676101935731' , -1234 , '41876905944' ) ; +test( macro , '51676101935731' , 5678 , '9101109886' ) ; +test( macro , '-51676101935731' , 5678 , '-9101109887' ) ; +test( macro , '51676101935731' , -5678 , '-9101109887' ) ; +test( macro , '-51676101935731' , -5678 , '9101109886' ) ; +test( macro , '51676101935731' , 1073741824 , '48127' ) ; +test( macro , '-51676101935731' , 1073741824 , '-48128' ) ; +test( macro , '51676101935731' , -1073741824 , '-48128' ) ; +test( macro , '-51676101935731' , -1073741824 , '48127' ) ; +test( macro , '51676101935731' , 51676101935731 , '1' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-1' ) ; +test( macro , '51676101935731' , -51676101935731 , '-1' ) ; +test( macro , '-51676101935731' , -51676101935731 , '1' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , 3 , '-239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , -3 , '-239299329230617529590083' ) ; +test( macro , '-717897987691852588770249' , -3 , '239299329230617529590083' ) ; +test( macro , '717897987691852588770249' , 7 , '102556855384550369824321' ) ; +test( macro , '-717897987691852588770249' , 7 , '-102556855384550369824322' ) ; +test( macro , '717897987691852588770249' , -7 , '-102556855384550369824322' ) ; +test( macro , '-717897987691852588770249' , -7 , '102556855384550369824321' ) ; +test( macro , '717897987691852588770249' , 9 , '79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , 9 , '-79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , -9 , '-79766443076872509863361' ) ; +test( macro , '-717897987691852588770249' , -9 , '79766443076872509863361' ) ; +test( macro , '717897987691852588770249' , 11 , '65263453426532053524568' ) ; +test( macro , '-717897987691852588770249' , 11 , '-65263453426532053524569' ) ; +test( macro , '717897987691852588770249' , -11 , '-65263453426532053524569' ) ; +test( macro , '-717897987691852588770249' , -11 , '65263453426532053524568' ) ; +test( macro , '717897987691852588770249' , 17 , '42229293393638387574720' ) ; +test( macro , '-717897987691852588770249' , 17 , '-42229293393638387574721' ) ; +test( macro , '717897987691852588770249' , -17 , '-42229293393638387574721' ) ; +test( macro , '-717897987691852588770249' , -17 , '42229293393638387574720' ) ; +test( macro , '717897987691852588770249' , 22 , '32631726713266026762284' ) ; +test( macro , '-717897987691852588770249' , 22 , '-32631726713266026762285' ) ; +test( macro , '717897987691852588770249' , -22 , '-32631726713266026762285' ) ; +test( macro , '-717897987691852588770249' , -22 , '32631726713266026762284' ) ; +test( macro , '717897987691852588770249' , 24 , '29912416153827191198760' ) ; +test( macro , '-717897987691852588770249' , 24 , '-29912416153827191198761' ) ; +test( macro , '717897987691852588770249' , -24 , '-29912416153827191198761' ) ; +test( macro , '-717897987691852588770249' , -24 , '29912416153827191198760' ) ; +test( macro , '717897987691852588770249' , 27 , '26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , 27 , '-26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , -27 , '-26588814358957503287787' ) ; +test( macro , '-717897987691852588770249' , -27 , '26588814358957503287787' ) ; +test( macro , '717897987691852588770249' , 29 , '24755103023856985819663' ) ; +test( macro , '-717897987691852588770249' , 29 , '-24755103023856985819664' ) ; +test( macro , '717897987691852588770249' , -29 , '-24755103023856985819664' ) ; +test( macro , '-717897987691852588770249' , -29 , '24755103023856985819663' ) ; +test( macro , '717897987691852588770249' , 1234 , '581764981922084755891' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-581764981922084755892' ) ; +test( macro , '717897987691852588770249' , -1234 , '-581764981922084755892' ) ; +test( macro , '-717897987691852588770249' , -1234 , '581764981922084755891' ) ; +test( macro , '717897987691852588770249' , 5678 , '126435010160593974774' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-126435010160593974775' ) ; +test( macro , '717897987691852588770249' , -5678 , '-126435010160593974775' ) ; +test( macro , '-717897987691852588770249' , -5678 , '126435010160593974774' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '668594602208447' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-668594602208448' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-668594602208448' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '668594602208447' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '13892262782' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-13892262783' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-13892262783' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '13892262782' ) ; diff --git a/test/src/integer/arithmetic/imod.js b/test/src/integer/arithmetic/imod.js index b99b4b5..a3dd2d6 100644 --- a/test/src/integer/arithmetic/imod.js +++ b/test/src/integer/arithmetic/imod.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} %= ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `imod(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; test( macro , '-1' , '-1' , '0' ) ; +test( macro , '1' , '3' , '1' ) ; +test( macro , '-1' , '3' , '2' ) ; +test( macro , '1' , '-3' , '-2' ) ; +test( macro , '-1' , '-3' , '-1' ) ; +test( macro , '1' , '7' , '1' ) ; +test( macro , '-1' , '7' , '6' ) ; +test( macro , '1' , '-7' , '-6' ) ; +test( macro , '-1' , '-7' , '-1' ) ; +test( macro , '1' , '9' , '1' ) ; +test( macro , '-1' , '9' , '8' ) ; +test( macro , '1' , '-9' , '-8' ) ; +test( macro , '-1' , '-9' , '-1' ) ; +test( macro , '1' , '11' , '1' ) ; +test( macro , '-1' , '11' , '10' ) ; +test( macro , '1' , '-11' , '-10' ) ; +test( macro , '-1' , '-11' , '-1' ) ; test( macro , '1' , '17' , '1' ) ; test( macro , '-1' , '17' , '16' ) ; test( macro , '1' , '-17' , '-16' ) ; test( macro , '-1' , '-17' , '-1' ) ; -test( macro , '1' , '51676101935731' , '1' ) ; -test( macro , '-1' , '51676101935731' , '51676101935730' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '-51676101935731' , '-1' ) ; +test( macro , '1' , '22' , '1' ) ; +test( macro , '-1' , '22' , '21' ) ; +test( macro , '1' , '-22' , '-21' ) ; +test( macro , '-1' , '-22' , '-1' ) ; +test( macro , '1' , '24' , '1' ) ; +test( macro , '-1' , '24' , '23' ) ; +test( macro , '1' , '-24' , '-23' ) ; +test( macro , '-1' , '-24' , '-1' ) ; +test( macro , '1' , '27' , '1' ) ; +test( macro , '-1' , '27' , '26' ) ; +test( macro , '1' , '-27' , '-26' ) ; +test( macro , '-1' , '-27' , '-1' ) ; +test( macro , '1' , '29' , '1' ) ; +test( macro , '-1' , '29' , '28' ) ; +test( macro , '1' , '-29' , '-28' ) ; +test( macro , '-1' , '-29' , '-1' ) ; +test( macro , '1' , '1234' , '1' ) ; +test( macro , '-1' , '1234' , '1233' ) ; +test( macro , '1' , '-1234' , '-1233' ) ; +test( macro , '-1' , '-1234' , '-1' ) ; +test( macro , '1' , '5678' , '1' ) ; +test( macro , '-1' , '5678' , '5677' ) ; +test( macro , '1' , '-5678' , '-5677' ) ; +test( macro , '-1' , '-5678' , '-1' ) ; test( macro , '1' , '1073741824' , '1' ) ; test( macro , '-1' , '1073741824' , '1073741823' ) ; test( macro , '1' , '-1073741824' , '-1073741823' ) ; test( macro , '-1' , '-1073741824' , '-1' ) ; +test( macro , '1' , '51676101935731' , '1' ) ; +test( macro , '-1' , '51676101935731' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '-1' ) ; test( macro , '1' , '717897987691852588770249' , '1' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-1' ) ; +test( macro , '3' , '1' , '0' ) ; +test( macro , '-3' , '1' , '0' ) ; +test( macro , '3' , '-1' , '0' ) ; +test( macro , '-3' , '-1' , '0' ) ; +test( macro , '3' , '3' , '0' ) ; +test( macro , '-3' , '3' , '0' ) ; +test( macro , '3' , '-3' , '0' ) ; +test( macro , '-3' , '-3' , '0' ) ; +test( macro , '3' , '7' , '3' ) ; +test( macro , '-3' , '7' , '4' ) ; +test( macro , '3' , '-7' , '-4' ) ; +test( macro , '-3' , '-7' , '-3' ) ; +test( macro , '3' , '9' , '3' ) ; +test( macro , '-3' , '9' , '6' ) ; +test( macro , '3' , '-9' , '-6' ) ; +test( macro , '-3' , '-9' , '-3' ) ; +test( macro , '3' , '11' , '3' ) ; +test( macro , '-3' , '11' , '8' ) ; +test( macro , '3' , '-11' , '-8' ) ; +test( macro , '-3' , '-11' , '-3' ) ; +test( macro , '3' , '17' , '3' ) ; +test( macro , '-3' , '17' , '14' ) ; +test( macro , '3' , '-17' , '-14' ) ; +test( macro , '-3' , '-17' , '-3' ) ; +test( macro , '3' , '22' , '3' ) ; +test( macro , '-3' , '22' , '19' ) ; +test( macro , '3' , '-22' , '-19' ) ; +test( macro , '-3' , '-22' , '-3' ) ; +test( macro , '3' , '24' , '3' ) ; +test( macro , '-3' , '24' , '21' ) ; +test( macro , '3' , '-24' , '-21' ) ; +test( macro , '-3' , '-24' , '-3' ) ; +test( macro , '3' , '27' , '3' ) ; +test( macro , '-3' , '27' , '24' ) ; +test( macro , '3' , '-27' , '-24' ) ; +test( macro , '-3' , '-27' , '-3' ) ; +test( macro , '3' , '29' , '3' ) ; +test( macro , '-3' , '29' , '26' ) ; +test( macro , '3' , '-29' , '-26' ) ; +test( macro , '-3' , '-29' , '-3' ) ; +test( macro , '3' , '1234' , '3' ) ; +test( macro , '-3' , '1234' , '1231' ) ; +test( macro , '3' , '-1234' , '-1231' ) ; +test( macro , '-3' , '-1234' , '-3' ) ; +test( macro , '3' , '5678' , '3' ) ; +test( macro , '-3' , '5678' , '5675' ) ; +test( macro , '3' , '-5678' , '-5675' ) ; +test( macro , '-3' , '-5678' , '-3' ) ; +test( macro , '3' , '1073741824' , '3' ) ; +test( macro , '-3' , '1073741824' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '-3' ) ; +test( macro , '3' , '51676101935731' , '3' ) ; +test( macro , '-3' , '51676101935731' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '-3' ) ; +test( macro , '3' , '717897987691852588770249' , '3' ) ; +test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '-3' ) ; +test( macro , '7' , '1' , '0' ) ; +test( macro , '-7' , '1' , '0' ) ; +test( macro , '7' , '-1' , '0' ) ; +test( macro , '-7' , '-1' , '0' ) ; +test( macro , '7' , '3' , '1' ) ; +test( macro , '-7' , '3' , '2' ) ; +test( macro , '7' , '-3' , '-2' ) ; +test( macro , '-7' , '-3' , '-1' ) ; +test( macro , '7' , '7' , '0' ) ; +test( macro , '-7' , '7' , '0' ) ; +test( macro , '7' , '-7' , '0' ) ; +test( macro , '-7' , '-7' , '0' ) ; +test( macro , '7' , '9' , '7' ) ; +test( macro , '-7' , '9' , '2' ) ; +test( macro , '7' , '-9' , '-2' ) ; +test( macro , '-7' , '-9' , '-7' ) ; +test( macro , '7' , '11' , '7' ) ; +test( macro , '-7' , '11' , '4' ) ; +test( macro , '7' , '-11' , '-4' ) ; +test( macro , '-7' , '-11' , '-7' ) ; +test( macro , '7' , '17' , '7' ) ; +test( macro , '-7' , '17' , '10' ) ; +test( macro , '7' , '-17' , '-10' ) ; +test( macro , '-7' , '-17' , '-7' ) ; +test( macro , '7' , '22' , '7' ) ; +test( macro , '-7' , '22' , '15' ) ; +test( macro , '7' , '-22' , '-15' ) ; +test( macro , '-7' , '-22' , '-7' ) ; +test( macro , '7' , '24' , '7' ) ; +test( macro , '-7' , '24' , '17' ) ; +test( macro , '7' , '-24' , '-17' ) ; +test( macro , '-7' , '-24' , '-7' ) ; +test( macro , '7' , '27' , '7' ) ; +test( macro , '-7' , '27' , '20' ) ; +test( macro , '7' , '-27' , '-20' ) ; +test( macro , '-7' , '-27' , '-7' ) ; +test( macro , '7' , '29' , '7' ) ; +test( macro , '-7' , '29' , '22' ) ; +test( macro , '7' , '-29' , '-22' ) ; +test( macro , '-7' , '-29' , '-7' ) ; +test( macro , '7' , '1234' , '7' ) ; +test( macro , '-7' , '1234' , '1227' ) ; +test( macro , '7' , '-1234' , '-1227' ) ; +test( macro , '-7' , '-1234' , '-7' ) ; +test( macro , '7' , '5678' , '7' ) ; +test( macro , '-7' , '5678' , '5671' ) ; +test( macro , '7' , '-5678' , '-5671' ) ; +test( macro , '-7' , '-5678' , '-7' ) ; +test( macro , '7' , '1073741824' , '7' ) ; +test( macro , '-7' , '1073741824' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '-7' ) ; +test( macro , '7' , '51676101935731' , '7' ) ; +test( macro , '-7' , '51676101935731' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '-7' ) ; +test( macro , '7' , '717897987691852588770249' , '7' ) ; +test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '-7' ) ; +test( macro , '9' , '1' , '0' ) ; +test( macro , '-9' , '1' , '0' ) ; +test( macro , '9' , '-1' , '0' ) ; +test( macro , '-9' , '-1' , '0' ) ; +test( macro , '9' , '3' , '0' ) ; +test( macro , '-9' , '3' , '0' ) ; +test( macro , '9' , '-3' , '0' ) ; +test( macro , '-9' , '-3' , '0' ) ; +test( macro , '9' , '7' , '2' ) ; +test( macro , '-9' , '7' , '5' ) ; +test( macro , '9' , '-7' , '-5' ) ; +test( macro , '-9' , '-7' , '-2' ) ; +test( macro , '9' , '9' , '0' ) ; +test( macro , '-9' , '9' , '0' ) ; +test( macro , '9' , '-9' , '0' ) ; +test( macro , '-9' , '-9' , '0' ) ; +test( macro , '9' , '11' , '9' ) ; +test( macro , '-9' , '11' , '2' ) ; +test( macro , '9' , '-11' , '-2' ) ; +test( macro , '-9' , '-11' , '-9' ) ; +test( macro , '9' , '17' , '9' ) ; +test( macro , '-9' , '17' , '8' ) ; +test( macro , '9' , '-17' , '-8' ) ; +test( macro , '-9' , '-17' , '-9' ) ; +test( macro , '9' , '22' , '9' ) ; +test( macro , '-9' , '22' , '13' ) ; +test( macro , '9' , '-22' , '-13' ) ; +test( macro , '-9' , '-22' , '-9' ) ; +test( macro , '9' , '24' , '9' ) ; +test( macro , '-9' , '24' , '15' ) ; +test( macro , '9' , '-24' , '-15' ) ; +test( macro , '-9' , '-24' , '-9' ) ; +test( macro , '9' , '27' , '9' ) ; +test( macro , '-9' , '27' , '18' ) ; +test( macro , '9' , '-27' , '-18' ) ; +test( macro , '-9' , '-27' , '-9' ) ; +test( macro , '9' , '29' , '9' ) ; +test( macro , '-9' , '29' , '20' ) ; +test( macro , '9' , '-29' , '-20' ) ; +test( macro , '-9' , '-29' , '-9' ) ; +test( macro , '9' , '1234' , '9' ) ; +test( macro , '-9' , '1234' , '1225' ) ; +test( macro , '9' , '-1234' , '-1225' ) ; +test( macro , '-9' , '-1234' , '-9' ) ; +test( macro , '9' , '5678' , '9' ) ; +test( macro , '-9' , '5678' , '5669' ) ; +test( macro , '9' , '-5678' , '-5669' ) ; +test( macro , '-9' , '-5678' , '-9' ) ; +test( macro , '9' , '1073741824' , '9' ) ; +test( macro , '-9' , '1073741824' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '-9' ) ; +test( macro , '9' , '51676101935731' , '9' ) ; +test( macro , '-9' , '51676101935731' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '-9' ) ; +test( macro , '9' , '717897987691852588770249' , '9' ) ; +test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '-9' ) ; +test( macro , '11' , '1' , '0' ) ; +test( macro , '-11' , '1' , '0' ) ; +test( macro , '11' , '-1' , '0' ) ; +test( macro , '-11' , '-1' , '0' ) ; +test( macro , '11' , '3' , '2' ) ; +test( macro , '-11' , '3' , '1' ) ; +test( macro , '11' , '-3' , '-1' ) ; +test( macro , '-11' , '-3' , '-2' ) ; +test( macro , '11' , '7' , '4' ) ; +test( macro , '-11' , '7' , '3' ) ; +test( macro , '11' , '-7' , '-3' ) ; +test( macro , '-11' , '-7' , '-4' ) ; +test( macro , '11' , '9' , '2' ) ; +test( macro , '-11' , '9' , '7' ) ; +test( macro , '11' , '-9' , '-7' ) ; +test( macro , '-11' , '-9' , '-2' ) ; +test( macro , '11' , '11' , '0' ) ; +test( macro , '-11' , '11' , '0' ) ; +test( macro , '11' , '-11' , '0' ) ; +test( macro , '-11' , '-11' , '0' ) ; +test( macro , '11' , '17' , '11' ) ; +test( macro , '-11' , '17' , '6' ) ; +test( macro , '11' , '-17' , '-6' ) ; +test( macro , '-11' , '-17' , '-11' ) ; +test( macro , '11' , '22' , '11' ) ; +test( macro , '-11' , '22' , '11' ) ; +test( macro , '11' , '-22' , '-11' ) ; +test( macro , '-11' , '-22' , '-11' ) ; +test( macro , '11' , '24' , '11' ) ; +test( macro , '-11' , '24' , '13' ) ; +test( macro , '11' , '-24' , '-13' ) ; +test( macro , '-11' , '-24' , '-11' ) ; +test( macro , '11' , '27' , '11' ) ; +test( macro , '-11' , '27' , '16' ) ; +test( macro , '11' , '-27' , '-16' ) ; +test( macro , '-11' , '-27' , '-11' ) ; +test( macro , '11' , '29' , '11' ) ; +test( macro , '-11' , '29' , '18' ) ; +test( macro , '11' , '-29' , '-18' ) ; +test( macro , '-11' , '-29' , '-11' ) ; +test( macro , '11' , '1234' , '11' ) ; +test( macro , '-11' , '1234' , '1223' ) ; +test( macro , '11' , '-1234' , '-1223' ) ; +test( macro , '-11' , '-1234' , '-11' ) ; +test( macro , '11' , '5678' , '11' ) ; +test( macro , '-11' , '5678' , '5667' ) ; +test( macro , '11' , '-5678' , '-5667' ) ; +test( macro , '-11' , '-5678' , '-11' ) ; +test( macro , '11' , '1073741824' , '11' ) ; +test( macro , '-11' , '1073741824' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '-11' ) ; +test( macro , '11' , '51676101935731' , '11' ) ; +test( macro , '-11' , '51676101935731' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '-11' ) ; +test( macro , '11' , '717897987691852588770249' , '11' ) ; +test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '-11' ) ; test( macro , '17' , '1' , '0' ) ; test( macro , '-17' , '1' , '0' ) ; test( macro , '17' , '-1' , '0' ) ; test( macro , '-17' , '-1' , '0' ) ; +test( macro , '17' , '3' , '2' ) ; +test( macro , '-17' , '3' , '1' ) ; +test( macro , '17' , '-3' , '-1' ) ; +test( macro , '-17' , '-3' , '-2' ) ; +test( macro , '17' , '7' , '3' ) ; +test( macro , '-17' , '7' , '4' ) ; +test( macro , '17' , '-7' , '-4' ) ; +test( macro , '-17' , '-7' , '-3' ) ; +test( macro , '17' , '9' , '8' ) ; +test( macro , '-17' , '9' , '1' ) ; +test( macro , '17' , '-9' , '-1' ) ; +test( macro , '-17' , '-9' , '-8' ) ; +test( macro , '17' , '11' , '6' ) ; +test( macro , '-17' , '11' , '5' ) ; +test( macro , '17' , '-11' , '-5' ) ; +test( macro , '-17' , '-11' , '-6' ) ; test( macro , '17' , '17' , '0' ) ; test( macro , '-17' , '17' , '0' ) ; test( macro , '17' , '-17' , '0' ) ; test( macro , '-17' , '-17' , '0' ) ; -test( macro , '17' , '51676101935731' , '17' ) ; -test( macro , '-17' , '51676101935731' , '51676101935714' ) ; -test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '-51676101935731' , '-17' ) ; +test( macro , '17' , '22' , '17' ) ; +test( macro , '-17' , '22' , '5' ) ; +test( macro , '17' , '-22' , '-5' ) ; +test( macro , '-17' , '-22' , '-17' ) ; +test( macro , '17' , '24' , '17' ) ; +test( macro , '-17' , '24' , '7' ) ; +test( macro , '17' , '-24' , '-7' ) ; +test( macro , '-17' , '-24' , '-17' ) ; +test( macro , '17' , '27' , '17' ) ; +test( macro , '-17' , '27' , '10' ) ; +test( macro , '17' , '-27' , '-10' ) ; +test( macro , '-17' , '-27' , '-17' ) ; +test( macro , '17' , '29' , '17' ) ; +test( macro , '-17' , '29' , '12' ) ; +test( macro , '17' , '-29' , '-12' ) ; +test( macro , '-17' , '-29' , '-17' ) ; +test( macro , '17' , '1234' , '17' ) ; +test( macro , '-17' , '1234' , '1217' ) ; +test( macro , '17' , '-1234' , '-1217' ) ; +test( macro , '-17' , '-1234' , '-17' ) ; +test( macro , '17' , '5678' , '17' ) ; +test( macro , '-17' , '5678' , '5661' ) ; +test( macro , '17' , '-5678' , '-5661' ) ; +test( macro , '-17' , '-5678' , '-17' ) ; test( macro , '17' , '1073741824' , '17' ) ; test( macro , '-17' , '1073741824' , '1073741807' ) ; test( macro , '17' , '-1073741824' , '-1073741807' ) ; test( macro , '-17' , '-1073741824' , '-17' ) ; +test( macro , '17' , '51676101935731' , '17' ) ; +test( macro , '-17' , '51676101935731' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '-17' ) ; test( macro , '17' , '717897987691852588770249' , '17' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-17' ) ; -test( macro , '51676101935731' , '1' , '0' ) ; -test( macro , '-51676101935731' , '1' , '0' ) ; -test( macro , '51676101935731' , '-1' , '0' ) ; -test( macro , '-51676101935731' , '-1' , '0' ) ; -test( macro , '51676101935731' , '17' , '14' ) ; -test( macro , '-51676101935731' , '17' , '3' ) ; -test( macro , '51676101935731' , '-17' , '-3' ) ; -test( macro , '-51676101935731' , '-17' , '-14' ) ; -test( macro , '51676101935731' , '51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '51676101935731' , '0' ) ; -test( macro , '51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '51676101935731' , '1073741824' , '129172083' ) ; -test( macro , '-51676101935731' , '1073741824' , '944569741' ) ; -test( macro , '51676101935731' , '-1073741824' , '-944569741' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-129172083' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '51676101935731' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '-51676101935731' ) ; +test( macro , '22' , '1' , '0' ) ; +test( macro , '-22' , '1' , '0' ) ; +test( macro , '22' , '-1' , '0' ) ; +test( macro , '-22' , '-1' , '0' ) ; +test( macro , '22' , '3' , '1' ) ; +test( macro , '-22' , '3' , '2' ) ; +test( macro , '22' , '-3' , '-2' ) ; +test( macro , '-22' , '-3' , '-1' ) ; +test( macro , '22' , '7' , '1' ) ; +test( macro , '-22' , '7' , '6' ) ; +test( macro , '22' , '-7' , '-6' ) ; +test( macro , '-22' , '-7' , '-1' ) ; +test( macro , '22' , '9' , '4' ) ; +test( macro , '-22' , '9' , '5' ) ; +test( macro , '22' , '-9' , '-5' ) ; +test( macro , '-22' , '-9' , '-4' ) ; +test( macro , '22' , '11' , '0' ) ; +test( macro , '-22' , '11' , '0' ) ; +test( macro , '22' , '-11' , '0' ) ; +test( macro , '-22' , '-11' , '0' ) ; +test( macro , '22' , '17' , '5' ) ; +test( macro , '-22' , '17' , '12' ) ; +test( macro , '22' , '-17' , '-12' ) ; +test( macro , '-22' , '-17' , '-5' ) ; +test( macro , '22' , '22' , '0' ) ; +test( macro , '-22' , '22' , '0' ) ; +test( macro , '22' , '-22' , '0' ) ; +test( macro , '-22' , '-22' , '0' ) ; +test( macro , '22' , '24' , '22' ) ; +test( macro , '-22' , '24' , '2' ) ; +test( macro , '22' , '-24' , '-2' ) ; +test( macro , '-22' , '-24' , '-22' ) ; +test( macro , '22' , '27' , '22' ) ; +test( macro , '-22' , '27' , '5' ) ; +test( macro , '22' , '-27' , '-5' ) ; +test( macro , '-22' , '-27' , '-22' ) ; +test( macro , '22' , '29' , '22' ) ; +test( macro , '-22' , '29' , '7' ) ; +test( macro , '22' , '-29' , '-7' ) ; +test( macro , '-22' , '-29' , '-22' ) ; +test( macro , '22' , '1234' , '22' ) ; +test( macro , '-22' , '1234' , '1212' ) ; +test( macro , '22' , '-1234' , '-1212' ) ; +test( macro , '-22' , '-1234' , '-22' ) ; +test( macro , '22' , '5678' , '22' ) ; +test( macro , '-22' , '5678' , '5656' ) ; +test( macro , '22' , '-5678' , '-5656' ) ; +test( macro , '-22' , '-5678' , '-22' ) ; +test( macro , '22' , '1073741824' , '22' ) ; +test( macro , '-22' , '1073741824' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '-22' ) ; +test( macro , '22' , '51676101935731' , '22' ) ; +test( macro , '-22' , '51676101935731' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '-22' ) ; +test( macro , '22' , '717897987691852588770249' , '22' ) ; +test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '-22' ) ; +test( macro , '24' , '1' , '0' ) ; +test( macro , '-24' , '1' , '0' ) ; +test( macro , '24' , '-1' , '0' ) ; +test( macro , '-24' , '-1' , '0' ) ; +test( macro , '24' , '3' , '0' ) ; +test( macro , '-24' , '3' , '0' ) ; +test( macro , '24' , '-3' , '0' ) ; +test( macro , '-24' , '-3' , '0' ) ; +test( macro , '24' , '7' , '3' ) ; +test( macro , '-24' , '7' , '4' ) ; +test( macro , '24' , '-7' , '-4' ) ; +test( macro , '-24' , '-7' , '-3' ) ; +test( macro , '24' , '9' , '6' ) ; +test( macro , '-24' , '9' , '3' ) ; +test( macro , '24' , '-9' , '-3' ) ; +test( macro , '-24' , '-9' , '-6' ) ; +test( macro , '24' , '11' , '2' ) ; +test( macro , '-24' , '11' , '9' ) ; +test( macro , '24' , '-11' , '-9' ) ; +test( macro , '-24' , '-11' , '-2' ) ; +test( macro , '24' , '17' , '7' ) ; +test( macro , '-24' , '17' , '10' ) ; +test( macro , '24' , '-17' , '-10' ) ; +test( macro , '-24' , '-17' , '-7' ) ; +test( macro , '24' , '22' , '2' ) ; +test( macro , '-24' , '22' , '20' ) ; +test( macro , '24' , '-22' , '-20' ) ; +test( macro , '-24' , '-22' , '-2' ) ; +test( macro , '24' , '24' , '0' ) ; +test( macro , '-24' , '24' , '0' ) ; +test( macro , '24' , '-24' , '0' ) ; +test( macro , '-24' , '-24' , '0' ) ; +test( macro , '24' , '27' , '24' ) ; +test( macro , '-24' , '27' , '3' ) ; +test( macro , '24' , '-27' , '-3' ) ; +test( macro , '-24' , '-27' , '-24' ) ; +test( macro , '24' , '29' , '24' ) ; +test( macro , '-24' , '29' , '5' ) ; +test( macro , '24' , '-29' , '-5' ) ; +test( macro , '-24' , '-29' , '-24' ) ; +test( macro , '24' , '1234' , '24' ) ; +test( macro , '-24' , '1234' , '1210' ) ; +test( macro , '24' , '-1234' , '-1210' ) ; +test( macro , '-24' , '-1234' , '-24' ) ; +test( macro , '24' , '5678' , '24' ) ; +test( macro , '-24' , '5678' , '5654' ) ; +test( macro , '24' , '-5678' , '-5654' ) ; +test( macro , '-24' , '-5678' , '-24' ) ; +test( macro , '24' , '1073741824' , '24' ) ; +test( macro , '-24' , '1073741824' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '-24' ) ; +test( macro , '24' , '51676101935731' , '24' ) ; +test( macro , '-24' , '51676101935731' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '-24' ) ; +test( macro , '24' , '717897987691852588770249' , '24' ) ; +test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '-24' ) ; +test( macro , '27' , '1' , '0' ) ; +test( macro , '-27' , '1' , '0' ) ; +test( macro , '27' , '-1' , '0' ) ; +test( macro , '-27' , '-1' , '0' ) ; +test( macro , '27' , '3' , '0' ) ; +test( macro , '-27' , '3' , '0' ) ; +test( macro , '27' , '-3' , '0' ) ; +test( macro , '-27' , '-3' , '0' ) ; +test( macro , '27' , '7' , '6' ) ; +test( macro , '-27' , '7' , '1' ) ; +test( macro , '27' , '-7' , '-1' ) ; +test( macro , '-27' , '-7' , '-6' ) ; +test( macro , '27' , '9' , '0' ) ; +test( macro , '-27' , '9' , '0' ) ; +test( macro , '27' , '-9' , '0' ) ; +test( macro , '-27' , '-9' , '0' ) ; +test( macro , '27' , '11' , '5' ) ; +test( macro , '-27' , '11' , '6' ) ; +test( macro , '27' , '-11' , '-6' ) ; +test( macro , '-27' , '-11' , '-5' ) ; +test( macro , '27' , '17' , '10' ) ; +test( macro , '-27' , '17' , '7' ) ; +test( macro , '27' , '-17' , '-7' ) ; +test( macro , '-27' , '-17' , '-10' ) ; +test( macro , '27' , '22' , '5' ) ; +test( macro , '-27' , '22' , '17' ) ; +test( macro , '27' , '-22' , '-17' ) ; +test( macro , '-27' , '-22' , '-5' ) ; +test( macro , '27' , '24' , '3' ) ; +test( macro , '-27' , '24' , '21' ) ; +test( macro , '27' , '-24' , '-21' ) ; +test( macro , '-27' , '-24' , '-3' ) ; +test( macro , '27' , '27' , '0' ) ; +test( macro , '-27' , '27' , '0' ) ; +test( macro , '27' , '-27' , '0' ) ; +test( macro , '-27' , '-27' , '0' ) ; +test( macro , '27' , '29' , '27' ) ; +test( macro , '-27' , '29' , '2' ) ; +test( macro , '27' , '-29' , '-2' ) ; +test( macro , '-27' , '-29' , '-27' ) ; +test( macro , '27' , '1234' , '27' ) ; +test( macro , '-27' , '1234' , '1207' ) ; +test( macro , '27' , '-1234' , '-1207' ) ; +test( macro , '-27' , '-1234' , '-27' ) ; +test( macro , '27' , '5678' , '27' ) ; +test( macro , '-27' , '5678' , '5651' ) ; +test( macro , '27' , '-5678' , '-5651' ) ; +test( macro , '-27' , '-5678' , '-27' ) ; +test( macro , '27' , '1073741824' , '27' ) ; +test( macro , '-27' , '1073741824' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '-27' ) ; +test( macro , '27' , '51676101935731' , '27' ) ; +test( macro , '-27' , '51676101935731' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '-27' ) ; +test( macro , '27' , '717897987691852588770249' , '27' ) ; +test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '-27' ) ; +test( macro , '29' , '1' , '0' ) ; +test( macro , '-29' , '1' , '0' ) ; +test( macro , '29' , '-1' , '0' ) ; +test( macro , '-29' , '-1' , '0' ) ; +test( macro , '29' , '3' , '2' ) ; +test( macro , '-29' , '3' , '1' ) ; +test( macro , '29' , '-3' , '-1' ) ; +test( macro , '-29' , '-3' , '-2' ) ; +test( macro , '29' , '7' , '1' ) ; +test( macro , '-29' , '7' , '6' ) ; +test( macro , '29' , '-7' , '-6' ) ; +test( macro , '-29' , '-7' , '-1' ) ; +test( macro , '29' , '9' , '2' ) ; +test( macro , '-29' , '9' , '7' ) ; +test( macro , '29' , '-9' , '-7' ) ; +test( macro , '-29' , '-9' , '-2' ) ; +test( macro , '29' , '11' , '7' ) ; +test( macro , '-29' , '11' , '4' ) ; +test( macro , '29' , '-11' , '-4' ) ; +test( macro , '-29' , '-11' , '-7' ) ; +test( macro , '29' , '17' , '12' ) ; +test( macro , '-29' , '17' , '5' ) ; +test( macro , '29' , '-17' , '-5' ) ; +test( macro , '-29' , '-17' , '-12' ) ; +test( macro , '29' , '22' , '7' ) ; +test( macro , '-29' , '22' , '15' ) ; +test( macro , '29' , '-22' , '-15' ) ; +test( macro , '-29' , '-22' , '-7' ) ; +test( macro , '29' , '24' , '5' ) ; +test( macro , '-29' , '24' , '19' ) ; +test( macro , '29' , '-24' , '-19' ) ; +test( macro , '-29' , '-24' , '-5' ) ; +test( macro , '29' , '27' , '2' ) ; +test( macro , '-29' , '27' , '25' ) ; +test( macro , '29' , '-27' , '-25' ) ; +test( macro , '-29' , '-27' , '-2' ) ; +test( macro , '29' , '29' , '0' ) ; +test( macro , '-29' , '29' , '0' ) ; +test( macro , '29' , '-29' , '0' ) ; +test( macro , '-29' , '-29' , '0' ) ; +test( macro , '29' , '1234' , '29' ) ; +test( macro , '-29' , '1234' , '1205' ) ; +test( macro , '29' , '-1234' , '-1205' ) ; +test( macro , '-29' , '-1234' , '-29' ) ; +test( macro , '29' , '5678' , '29' ) ; +test( macro , '-29' , '5678' , '5649' ) ; +test( macro , '29' , '-5678' , '-5649' ) ; +test( macro , '-29' , '-5678' , '-29' ) ; +test( macro , '29' , '1073741824' , '29' ) ; +test( macro , '-29' , '1073741824' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '-29' ) ; +test( macro , '29' , '51676101935731' , '29' ) ; +test( macro , '-29' , '51676101935731' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '-29' ) ; +test( macro , '29' , '717897987691852588770249' , '29' ) ; +test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '-29' ) ; +test( macro , '1234' , '1' , '0' ) ; +test( macro , '-1234' , '1' , '0' ) ; +test( macro , '1234' , '-1' , '0' ) ; +test( macro , '-1234' , '-1' , '0' ) ; +test( macro , '1234' , '3' , '1' ) ; +test( macro , '-1234' , '3' , '2' ) ; +test( macro , '1234' , '-3' , '-2' ) ; +test( macro , '-1234' , '-3' , '-1' ) ; +test( macro , '1234' , '7' , '2' ) ; +test( macro , '-1234' , '7' , '5' ) ; +test( macro , '1234' , '-7' , '-5' ) ; +test( macro , '-1234' , '-7' , '-2' ) ; +test( macro , '1234' , '9' , '1' ) ; +test( macro , '-1234' , '9' , '8' ) ; +test( macro , '1234' , '-9' , '-8' ) ; +test( macro , '-1234' , '-9' , '-1' ) ; +test( macro , '1234' , '11' , '2' ) ; +test( macro , '-1234' , '11' , '9' ) ; +test( macro , '1234' , '-11' , '-9' ) ; +test( macro , '-1234' , '-11' , '-2' ) ; +test( macro , '1234' , '17' , '10' ) ; +test( macro , '-1234' , '17' , '7' ) ; +test( macro , '1234' , '-17' , '-7' ) ; +test( macro , '-1234' , '-17' , '-10' ) ; +test( macro , '1234' , '22' , '2' ) ; +test( macro , '-1234' , '22' , '20' ) ; +test( macro , '1234' , '-22' , '-20' ) ; +test( macro , '-1234' , '-22' , '-2' ) ; +test( macro , '1234' , '24' , '10' ) ; +test( macro , '-1234' , '24' , '14' ) ; +test( macro , '1234' , '-24' , '-14' ) ; +test( macro , '-1234' , '-24' , '-10' ) ; +test( macro , '1234' , '27' , '19' ) ; +test( macro , '-1234' , '27' , '8' ) ; +test( macro , '1234' , '-27' , '-8' ) ; +test( macro , '-1234' , '-27' , '-19' ) ; +test( macro , '1234' , '29' , '16' ) ; +test( macro , '-1234' , '29' , '13' ) ; +test( macro , '1234' , '-29' , '-13' ) ; +test( macro , '-1234' , '-29' , '-16' ) ; +test( macro , '1234' , '1234' , '0' ) ; +test( macro , '-1234' , '1234' , '0' ) ; +test( macro , '1234' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1234' , '0' ) ; +test( macro , '1234' , '5678' , '1234' ) ; +test( macro , '-1234' , '5678' , '4444' ) ; +test( macro , '1234' , '-5678' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '-1234' ) ; +test( macro , '1234' , '1073741824' , '1234' ) ; +test( macro , '-1234' , '1073741824' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '-1234' ) ; +test( macro , '1234' , '51676101935731' , '1234' ) ; +test( macro , '-1234' , '51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '-1234' ) ; +test( macro , '1234' , '717897987691852588770249' , '1234' ) ; +test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '-1234' ) ; +test( macro , '5678' , '1' , '0' ) ; +test( macro , '-5678' , '1' , '0' ) ; +test( macro , '5678' , '-1' , '0' ) ; +test( macro , '-5678' , '-1' , '0' ) ; +test( macro , '5678' , '3' , '2' ) ; +test( macro , '-5678' , '3' , '1' ) ; +test( macro , '5678' , '-3' , '-1' ) ; +test( macro , '-5678' , '-3' , '-2' ) ; +test( macro , '5678' , '7' , '1' ) ; +test( macro , '-5678' , '7' , '6' ) ; +test( macro , '5678' , '-7' , '-6' ) ; +test( macro , '-5678' , '-7' , '-1' ) ; +test( macro , '5678' , '9' , '8' ) ; +test( macro , '-5678' , '9' , '1' ) ; +test( macro , '5678' , '-9' , '-1' ) ; +test( macro , '-5678' , '-9' , '-8' ) ; +test( macro , '5678' , '11' , '2' ) ; +test( macro , '-5678' , '11' , '9' ) ; +test( macro , '5678' , '-11' , '-9' ) ; +test( macro , '-5678' , '-11' , '-2' ) ; +test( macro , '5678' , '17' , '0' ) ; +test( macro , '-5678' , '17' , '0' ) ; +test( macro , '5678' , '-17' , '0' ) ; +test( macro , '-5678' , '-17' , '0' ) ; +test( macro , '5678' , '22' , '2' ) ; +test( macro , '-5678' , '22' , '20' ) ; +test( macro , '5678' , '-22' , '-20' ) ; +test( macro , '-5678' , '-22' , '-2' ) ; +test( macro , '5678' , '24' , '14' ) ; +test( macro , '-5678' , '24' , '10' ) ; +test( macro , '5678' , '-24' , '-10' ) ; +test( macro , '-5678' , '-24' , '-14' ) ; +test( macro , '5678' , '27' , '8' ) ; +test( macro , '-5678' , '27' , '19' ) ; +test( macro , '5678' , '-27' , '-19' ) ; +test( macro , '-5678' , '-27' , '-8' ) ; +test( macro , '5678' , '29' , '23' ) ; +test( macro , '-5678' , '29' , '6' ) ; +test( macro , '5678' , '-29' , '-6' ) ; +test( macro , '-5678' , '-29' , '-23' ) ; +test( macro , '5678' , '1234' , '742' ) ; +test( macro , '-5678' , '1234' , '492' ) ; +test( macro , '5678' , '-1234' , '-492' ) ; +test( macro , '-5678' , '-1234' , '-742' ) ; +test( macro , '5678' , '5678' , '0' ) ; +test( macro , '-5678' , '5678' , '0' ) ; +test( macro , '5678' , '-5678' , '0' ) ; +test( macro , '-5678' , '-5678' , '0' ) ; +test( macro , '5678' , '1073741824' , '5678' ) ; +test( macro , '-5678' , '1073741824' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '-5678' ) ; +test( macro , '5678' , '51676101935731' , '5678' ) ; +test( macro , '-5678' , '51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '-5678' ) ; +test( macro , '5678' , '717897987691852588770249' , '5678' ) ; +test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '-5678' ) ; test( macro , '1073741824' , '1' , '0' ) ; test( macro , '-1073741824' , '1' , '0' ) ; test( macro , '1073741824' , '-1' , '0' ) ; test( macro , '-1073741824' , '-1' , '0' ) ; +test( macro , '1073741824' , '3' , '1' ) ; +test( macro , '-1073741824' , '3' , '2' ) ; +test( macro , '1073741824' , '-3' , '-2' ) ; +test( macro , '-1073741824' , '-3' , '-1' ) ; +test( macro , '1073741824' , '7' , '1' ) ; +test( macro , '-1073741824' , '7' , '6' ) ; +test( macro , '1073741824' , '-7' , '-6' ) ; +test( macro , '-1073741824' , '-7' , '-1' ) ; +test( macro , '1073741824' , '9' , '1' ) ; +test( macro , '-1073741824' , '9' , '8' ) ; +test( macro , '1073741824' , '-9' , '-8' ) ; +test( macro , '-1073741824' , '-9' , '-1' ) ; +test( macro , '1073741824' , '11' , '1' ) ; +test( macro , '-1073741824' , '11' , '10' ) ; +test( macro , '1073741824' , '-11' , '-10' ) ; +test( macro , '-1073741824' , '-11' , '-1' ) ; test( macro , '1073741824' , '17' , '13' ) ; test( macro , '-1073741824' , '17' , '4' ) ; test( macro , '1073741824' , '-17' , '-4' ) ; test( macro , '-1073741824' , '-17' , '-13' ) ; -test( macro , '1073741824' , '51676101935731' , '1073741824' ) ; -test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; -test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '-51676101935731' , '-1073741824' ) ; +test( macro , '1073741824' , '22' , '12' ) ; +test( macro , '-1073741824' , '22' , '10' ) ; +test( macro , '1073741824' , '-22' , '-10' ) ; +test( macro , '-1073741824' , '-22' , '-12' ) ; +test( macro , '1073741824' , '24' , '16' ) ; +test( macro , '-1073741824' , '24' , '8' ) ; +test( macro , '1073741824' , '-24' , '-8' ) ; +test( macro , '-1073741824' , '-24' , '-16' ) ; +test( macro , '1073741824' , '27' , '19' ) ; +test( macro , '-1073741824' , '27' , '8' ) ; +test( macro , '1073741824' , '-27' , '-8' ) ; +test( macro , '-1073741824' , '-27' , '-19' ) ; +test( macro , '1073741824' , '29' , '4' ) ; +test( macro , '-1073741824' , '29' , '25' ) ; +test( macro , '1073741824' , '-29' , '-25' ) ; +test( macro , '-1073741824' , '-29' , '-4' ) ; +test( macro , '1073741824' , '1234' , '170' ) ; +test( macro , '-1073741824' , '1234' , '1064' ) ; +test( macro , '1073741824' , '-1234' , '-1064' ) ; +test( macro , '-1073741824' , '-1234' , '-170' ) ; +test( macro , '1073741824' , '5678' , '3634' ) ; +test( macro , '-1073741824' , '5678' , '2044' ) ; +test( macro , '1073741824' , '-5678' , '-2044' ) ; +test( macro , '-1073741824' , '-5678' , '-3634' ) ; test( macro , '1073741824' , '1073741824' , '0' ) ; test( macro , '-1073741824' , '1073741824' , '0' ) ; test( macro , '1073741824' , '-1073741824' , '0' ) ; test( macro , '-1073741824' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '1073741824' ) ; +test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '-1073741824' ) ; test( macro , '1073741824' , '717897987691852588770249' , '1073741824' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-1073741824' ) ; +test( macro , '51676101935731' , '1' , '0' ) ; +test( macro , '-51676101935731' , '1' , '0' ) ; +test( macro , '51676101935731' , '-1' , '0' ) ; +test( macro , '-51676101935731' , '-1' , '0' ) ; +test( macro , '51676101935731' , '3' , '1' ) ; +test( macro , '-51676101935731' , '3' , '2' ) ; +test( macro , '51676101935731' , '-3' , '-2' ) ; +test( macro , '-51676101935731' , '-3' , '-1' ) ; +test( macro , '51676101935731' , '7' , '0' ) ; +test( macro , '-51676101935731' , '7' , '0' ) ; +test( macro , '51676101935731' , '-7' , '0' ) ; +test( macro , '-51676101935731' , '-7' , '0' ) ; +test( macro , '51676101935731' , '9' , '1' ) ; +test( macro , '-51676101935731' , '9' , '8' ) ; +test( macro , '51676101935731' , '-9' , '-8' ) ; +test( macro , '-51676101935731' , '-9' , '-1' ) ; +test( macro , '51676101935731' , '11' , '9' ) ; +test( macro , '-51676101935731' , '11' , '2' ) ; +test( macro , '51676101935731' , '-11' , '-2' ) ; +test( macro , '-51676101935731' , '-11' , '-9' ) ; +test( macro , '51676101935731' , '17' , '14' ) ; +test( macro , '-51676101935731' , '17' , '3' ) ; +test( macro , '51676101935731' , '-17' , '-3' ) ; +test( macro , '-51676101935731' , '-17' , '-14' ) ; +test( macro , '51676101935731' , '22' , '9' ) ; +test( macro , '-51676101935731' , '22' , '13' ) ; +test( macro , '51676101935731' , '-22' , '-13' ) ; +test( macro , '-51676101935731' , '-22' , '-9' ) ; +test( macro , '51676101935731' , '24' , '19' ) ; +test( macro , '-51676101935731' , '24' , '5' ) ; +test( macro , '51676101935731' , '-24' , '-5' ) ; +test( macro , '-51676101935731' , '-24' , '-19' ) ; +test( macro , '51676101935731' , '27' , '10' ) ; +test( macro , '-51676101935731' , '27' , '17' ) ; +test( macro , '51676101935731' , '-27' , '-17' ) ; +test( macro , '-51676101935731' , '-27' , '-10' ) ; +test( macro , '51676101935731' , '29' , '28' ) ; +test( macro , '-51676101935731' , '29' , '1' ) ; +test( macro , '51676101935731' , '-29' , '-1' ) ; +test( macro , '-51676101935731' , '-29' , '-28' ) ; +test( macro , '51676101935731' , '1234' , '835' ) ; +test( macro , '-51676101935731' , '1234' , '399' ) ; +test( macro , '51676101935731' , '-1234' , '-399' ) ; +test( macro , '-51676101935731' , '-1234' , '-835' ) ; +test( macro , '51676101935731' , '5678' , '3023' ) ; +test( macro , '-51676101935731' , '5678' , '2655' ) ; +test( macro , '51676101935731' , '-5678' , '-2655' ) ; +test( macro , '-51676101935731' , '-5678' , '-3023' ) ; +test( macro , '51676101935731' , '1073741824' , '129172083' ) ; +test( macro , '-51676101935731' , '1073741824' , '944569741' ) ; +test( macro , '51676101935731' , '-1073741824' , '-944569741' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-129172083' ) ; +test( macro , '51676101935731' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '51676101935731' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '-51676101935731' ) ; test( macro , '717897987691852588770249' , '1' , '0' ) ; test( macro , '-717897987691852588770249' , '1' , '0' ) ; test( macro , '717897987691852588770249' , '-1' , '0' ) ; test( macro , '-717897987691852588770249' , '-1' , '0' ) ; +test( macro , '717897987691852588770249' , '3' , '0' ) ; +test( macro , '-717897987691852588770249' , '3' , '0' ) ; +test( macro , '717897987691852588770249' , '-3' , '0' ) ; +test( macro , '-717897987691852588770249' , '-3' , '0' ) ; +test( macro , '717897987691852588770249' , '7' , '2' ) ; +test( macro , '-717897987691852588770249' , '7' , '5' ) ; +test( macro , '717897987691852588770249' , '-7' , '-5' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-2' ) ; +test( macro , '717897987691852588770249' , '9' , '0' ) ; +test( macro , '-717897987691852588770249' , '9' , '0' ) ; +test( macro , '717897987691852588770249' , '-9' , '0' ) ; +test( macro , '-717897987691852588770249' , '-9' , '0' ) ; +test( macro , '717897987691852588770249' , '11' , '1' ) ; +test( macro , '-717897987691852588770249' , '11' , '10' ) ; +test( macro , '717897987691852588770249' , '-11' , '-10' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-1' ) ; test( macro , '717897987691852588770249' , '17' , '9' ) ; test( macro , '-717897987691852588770249' , '17' , '8' ) ; test( macro , '717897987691852588770249' , '-17' , '-8' ) ; test( macro , '-717897987691852588770249' , '-17' , '-9' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '51258661506607' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '417440429124' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-417440429124' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-51258661506607' ) ; +test( macro , '717897987691852588770249' , '22' , '1' ) ; +test( macro , '-717897987691852588770249' , '22' , '21' ) ; +test( macro , '717897987691852588770249' , '-22' , '-21' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-1' ) ; +test( macro , '717897987691852588770249' , '24' , '9' ) ; +test( macro , '-717897987691852588770249' , '24' , '15' ) ; +test( macro , '717897987691852588770249' , '-24' , '-15' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-9' ) ; +test( macro , '717897987691852588770249' , '27' , '0' ) ; +test( macro , '-717897987691852588770249' , '27' , '0' ) ; +test( macro , '717897987691852588770249' , '-27' , '0' ) ; +test( macro , '-717897987691852588770249' , '-27' , '0' ) ; +test( macro , '717897987691852588770249' , '29' , '22' ) ; +test( macro , '-717897987691852588770249' , '29' , '7' ) ; +test( macro , '717897987691852588770249' , '-29' , '-7' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-22' ) ; +test( macro , '717897987691852588770249' , '1234' , '755' ) ; +test( macro , '-717897987691852588770249' , '1234' , '479' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-479' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-755' ) ; +test( macro , '717897987691852588770249' , '5678' , '3477' ) ; +test( macro , '-717897987691852588770249' , '5678' , '2201' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-2201' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-3477' ) ; test( macro , '717897987691852588770249' , '1073741824' , '278782921' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '794958903' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-794958903' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-278782921' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '417440429124' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-51258661506607' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '0' ) ; diff --git a/test/src/integer/arithmetic/imodn.js b/test/src/integer/arithmetic/imodn.js new file mode 100644 index 0000000..d4a6843 --- /dev/null +++ b/test/src/integer/arithmetic/imodn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , imodn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = imodn( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `imodn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '0' ) ; +test( macro , '-1' , 1 , '0' ) ; +test( macro , '1' , -1 , '0' ) ; +test( macro , '-1' , -1 , '0' ) ; +test( macro , '1' , 3 , '1' ) ; +test( macro , '-1' , 3 , '2' ) ; +test( macro , '1' , -3 , '-2' ) ; +test( macro , '-1' , -3 , '-1' ) ; +test( macro , '1' , 7 , '1' ) ; +test( macro , '-1' , 7 , '6' ) ; +test( macro , '1' , -7 , '-6' ) ; +test( macro , '-1' , -7 , '-1' ) ; +test( macro , '1' , 9 , '1' ) ; +test( macro , '-1' , 9 , '8' ) ; +test( macro , '1' , -9 , '-8' ) ; +test( macro , '-1' , -9 , '-1' ) ; +test( macro , '1' , 11 , '1' ) ; +test( macro , '-1' , 11 , '10' ) ; +test( macro , '1' , -11 , '-10' ) ; +test( macro , '-1' , -11 , '-1' ) ; +test( macro , '1' , 17 , '1' ) ; +test( macro , '-1' , 17 , '16' ) ; +test( macro , '1' , -17 , '-16' ) ; +test( macro , '-1' , -17 , '-1' ) ; +test( macro , '1' , 22 , '1' ) ; +test( macro , '-1' , 22 , '21' ) ; +test( macro , '1' , -22 , '-21' ) ; +test( macro , '-1' , -22 , '-1' ) ; +test( macro , '1' , 24 , '1' ) ; +test( macro , '-1' , 24 , '23' ) ; +test( macro , '1' , -24 , '-23' ) ; +test( macro , '-1' , -24 , '-1' ) ; +test( macro , '1' , 27 , '1' ) ; +test( macro , '-1' , 27 , '26' ) ; +test( macro , '1' , -27 , '-26' ) ; +test( macro , '-1' , -27 , '-1' ) ; +test( macro , '1' , 29 , '1' ) ; +test( macro , '-1' , 29 , '28' ) ; +test( macro , '1' , -29 , '-28' ) ; +test( macro , '-1' , -29 , '-1' ) ; +test( macro , '1' , 1234 , '1' ) ; +test( macro , '-1' , 1234 , '1233' ) ; +test( macro , '1' , -1234 , '-1233' ) ; +test( macro , '-1' , -1234 , '-1' ) ; +test( macro , '1' , 5678 , '1' ) ; +test( macro , '-1' , 5678 , '5677' ) ; +test( macro , '1' , -5678 , '-5677' ) ; +test( macro , '-1' , -5678 , '-1' ) ; +test( macro , '1' , 1073741824 , '1' ) ; +test( macro , '-1' , 1073741824 , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '-1' ) ; +test( macro , '1' , 51676101935731 , '1' ) ; +test( macro , '-1' , 51676101935731 , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '-1' ) ; +test( macro , '3' , 1 , '0' ) ; +test( macro , '-3' , 1 , '0' ) ; +test( macro , '3' , -1 , '0' ) ; +test( macro , '-3' , -1 , '0' ) ; +test( macro , '3' , 3 , '0' ) ; +test( macro , '-3' , 3 , '0' ) ; +test( macro , '3' , -3 , '0' ) ; +test( macro , '-3' , -3 , '0' ) ; +test( macro , '3' , 7 , '3' ) ; +test( macro , '-3' , 7 , '4' ) ; +test( macro , '3' , -7 , '-4' ) ; +test( macro , '-3' , -7 , '-3' ) ; +test( macro , '3' , 9 , '3' ) ; +test( macro , '-3' , 9 , '6' ) ; +test( macro , '3' , -9 , '-6' ) ; +test( macro , '-3' , -9 , '-3' ) ; +test( macro , '3' , 11 , '3' ) ; +test( macro , '-3' , 11 , '8' ) ; +test( macro , '3' , -11 , '-8' ) ; +test( macro , '-3' , -11 , '-3' ) ; +test( macro , '3' , 17 , '3' ) ; +test( macro , '-3' , 17 , '14' ) ; +test( macro , '3' , -17 , '-14' ) ; +test( macro , '-3' , -17 , '-3' ) ; +test( macro , '3' , 22 , '3' ) ; +test( macro , '-3' , 22 , '19' ) ; +test( macro , '3' , -22 , '-19' ) ; +test( macro , '-3' , -22 , '-3' ) ; +test( macro , '3' , 24 , '3' ) ; +test( macro , '-3' , 24 , '21' ) ; +test( macro , '3' , -24 , '-21' ) ; +test( macro , '-3' , -24 , '-3' ) ; +test( macro , '3' , 27 , '3' ) ; +test( macro , '-3' , 27 , '24' ) ; +test( macro , '3' , -27 , '-24' ) ; +test( macro , '-3' , -27 , '-3' ) ; +test( macro , '3' , 29 , '3' ) ; +test( macro , '-3' , 29 , '26' ) ; +test( macro , '3' , -29 , '-26' ) ; +test( macro , '-3' , -29 , '-3' ) ; +test( macro , '3' , 1234 , '3' ) ; +test( macro , '-3' , 1234 , '1231' ) ; +test( macro , '3' , -1234 , '-1231' ) ; +test( macro , '-3' , -1234 , '-3' ) ; +test( macro , '3' , 5678 , '3' ) ; +test( macro , '-3' , 5678 , '5675' ) ; +test( macro , '3' , -5678 , '-5675' ) ; +test( macro , '-3' , -5678 , '-3' ) ; +test( macro , '3' , 1073741824 , '3' ) ; +test( macro , '-3' , 1073741824 , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '-3' ) ; +test( macro , '3' , 51676101935731 , '3' ) ; +test( macro , '-3' , 51676101935731 , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '-3' ) ; +test( macro , '7' , 1 , '0' ) ; +test( macro , '-7' , 1 , '0' ) ; +test( macro , '7' , -1 , '0' ) ; +test( macro , '-7' , -1 , '0' ) ; +test( macro , '7' , 3 , '1' ) ; +test( macro , '-7' , 3 , '2' ) ; +test( macro , '7' , -3 , '-2' ) ; +test( macro , '-7' , -3 , '-1' ) ; +test( macro , '7' , 7 , '0' ) ; +test( macro , '-7' , 7 , '0' ) ; +test( macro , '7' , -7 , '0' ) ; +test( macro , '-7' , -7 , '0' ) ; +test( macro , '7' , 9 , '7' ) ; +test( macro , '-7' , 9 , '2' ) ; +test( macro , '7' , -9 , '-2' ) ; +test( macro , '-7' , -9 , '-7' ) ; +test( macro , '7' , 11 , '7' ) ; +test( macro , '-7' , 11 , '4' ) ; +test( macro , '7' , -11 , '-4' ) ; +test( macro , '-7' , -11 , '-7' ) ; +test( macro , '7' , 17 , '7' ) ; +test( macro , '-7' , 17 , '10' ) ; +test( macro , '7' , -17 , '-10' ) ; +test( macro , '-7' , -17 , '-7' ) ; +test( macro , '7' , 22 , '7' ) ; +test( macro , '-7' , 22 , '15' ) ; +test( macro , '7' , -22 , '-15' ) ; +test( macro , '-7' , -22 , '-7' ) ; +test( macro , '7' , 24 , '7' ) ; +test( macro , '-7' , 24 , '17' ) ; +test( macro , '7' , -24 , '-17' ) ; +test( macro , '-7' , -24 , '-7' ) ; +test( macro , '7' , 27 , '7' ) ; +test( macro , '-7' , 27 , '20' ) ; +test( macro , '7' , -27 , '-20' ) ; +test( macro , '-7' , -27 , '-7' ) ; +test( macro , '7' , 29 , '7' ) ; +test( macro , '-7' , 29 , '22' ) ; +test( macro , '7' , -29 , '-22' ) ; +test( macro , '-7' , -29 , '-7' ) ; +test( macro , '7' , 1234 , '7' ) ; +test( macro , '-7' , 1234 , '1227' ) ; +test( macro , '7' , -1234 , '-1227' ) ; +test( macro , '-7' , -1234 , '-7' ) ; +test( macro , '7' , 5678 , '7' ) ; +test( macro , '-7' , 5678 , '5671' ) ; +test( macro , '7' , -5678 , '-5671' ) ; +test( macro , '-7' , -5678 , '-7' ) ; +test( macro , '7' , 1073741824 , '7' ) ; +test( macro , '-7' , 1073741824 , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '-7' ) ; +test( macro , '7' , 51676101935731 , '7' ) ; +test( macro , '-7' , 51676101935731 , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '-7' ) ; +test( macro , '9' , 1 , '0' ) ; +test( macro , '-9' , 1 , '0' ) ; +test( macro , '9' , -1 , '0' ) ; +test( macro , '-9' , -1 , '0' ) ; +test( macro , '9' , 3 , '0' ) ; +test( macro , '-9' , 3 , '0' ) ; +test( macro , '9' , -3 , '0' ) ; +test( macro , '-9' , -3 , '0' ) ; +test( macro , '9' , 7 , '2' ) ; +test( macro , '-9' , 7 , '5' ) ; +test( macro , '9' , -7 , '-5' ) ; +test( macro , '-9' , -7 , '-2' ) ; +test( macro , '9' , 9 , '0' ) ; +test( macro , '-9' , 9 , '0' ) ; +test( macro , '9' , -9 , '0' ) ; +test( macro , '-9' , -9 , '0' ) ; +test( macro , '9' , 11 , '9' ) ; +test( macro , '-9' , 11 , '2' ) ; +test( macro , '9' , -11 , '-2' ) ; +test( macro , '-9' , -11 , '-9' ) ; +test( macro , '9' , 17 , '9' ) ; +test( macro , '-9' , 17 , '8' ) ; +test( macro , '9' , -17 , '-8' ) ; +test( macro , '-9' , -17 , '-9' ) ; +test( macro , '9' , 22 , '9' ) ; +test( macro , '-9' , 22 , '13' ) ; +test( macro , '9' , -22 , '-13' ) ; +test( macro , '-9' , -22 , '-9' ) ; +test( macro , '9' , 24 , '9' ) ; +test( macro , '-9' , 24 , '15' ) ; +test( macro , '9' , -24 , '-15' ) ; +test( macro , '-9' , -24 , '-9' ) ; +test( macro , '9' , 27 , '9' ) ; +test( macro , '-9' , 27 , '18' ) ; +test( macro , '9' , -27 , '-18' ) ; +test( macro , '-9' , -27 , '-9' ) ; +test( macro , '9' , 29 , '9' ) ; +test( macro , '-9' , 29 , '20' ) ; +test( macro , '9' , -29 , '-20' ) ; +test( macro , '-9' , -29 , '-9' ) ; +test( macro , '9' , 1234 , '9' ) ; +test( macro , '-9' , 1234 , '1225' ) ; +test( macro , '9' , -1234 , '-1225' ) ; +test( macro , '-9' , -1234 , '-9' ) ; +test( macro , '9' , 5678 , '9' ) ; +test( macro , '-9' , 5678 , '5669' ) ; +test( macro , '9' , -5678 , '-5669' ) ; +test( macro , '-9' , -5678 , '-9' ) ; +test( macro , '9' , 1073741824 , '9' ) ; +test( macro , '-9' , 1073741824 , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '-9' ) ; +test( macro , '9' , 51676101935731 , '9' ) ; +test( macro , '-9' , 51676101935731 , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '-9' ) ; +test( macro , '11' , 1 , '0' ) ; +test( macro , '-11' , 1 , '0' ) ; +test( macro , '11' , -1 , '0' ) ; +test( macro , '-11' , -1 , '0' ) ; +test( macro , '11' , 3 , '2' ) ; +test( macro , '-11' , 3 , '1' ) ; +test( macro , '11' , -3 , '-1' ) ; +test( macro , '-11' , -3 , '-2' ) ; +test( macro , '11' , 7 , '4' ) ; +test( macro , '-11' , 7 , '3' ) ; +test( macro , '11' , -7 , '-3' ) ; +test( macro , '-11' , -7 , '-4' ) ; +test( macro , '11' , 9 , '2' ) ; +test( macro , '-11' , 9 , '7' ) ; +test( macro , '11' , -9 , '-7' ) ; +test( macro , '-11' , -9 , '-2' ) ; +test( macro , '11' , 11 , '0' ) ; +test( macro , '-11' , 11 , '0' ) ; +test( macro , '11' , -11 , '0' ) ; +test( macro , '-11' , -11 , '0' ) ; +test( macro , '11' , 17 , '11' ) ; +test( macro , '-11' , 17 , '6' ) ; +test( macro , '11' , -17 , '-6' ) ; +test( macro , '-11' , -17 , '-11' ) ; +test( macro , '11' , 22 , '11' ) ; +test( macro , '-11' , 22 , '11' ) ; +test( macro , '11' , -22 , '-11' ) ; +test( macro , '-11' , -22 , '-11' ) ; +test( macro , '11' , 24 , '11' ) ; +test( macro , '-11' , 24 , '13' ) ; +test( macro , '11' , -24 , '-13' ) ; +test( macro , '-11' , -24 , '-11' ) ; +test( macro , '11' , 27 , '11' ) ; +test( macro , '-11' , 27 , '16' ) ; +test( macro , '11' , -27 , '-16' ) ; +test( macro , '-11' , -27 , '-11' ) ; +test( macro , '11' , 29 , '11' ) ; +test( macro , '-11' , 29 , '18' ) ; +test( macro , '11' , -29 , '-18' ) ; +test( macro , '-11' , -29 , '-11' ) ; +test( macro , '11' , 1234 , '11' ) ; +test( macro , '-11' , 1234 , '1223' ) ; +test( macro , '11' , -1234 , '-1223' ) ; +test( macro , '-11' , -1234 , '-11' ) ; +test( macro , '11' , 5678 , '11' ) ; +test( macro , '-11' , 5678 , '5667' ) ; +test( macro , '11' , -5678 , '-5667' ) ; +test( macro , '-11' , -5678 , '-11' ) ; +test( macro , '11' , 1073741824 , '11' ) ; +test( macro , '-11' , 1073741824 , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '-11' ) ; +test( macro , '11' , 51676101935731 , '11' ) ; +test( macro , '-11' , 51676101935731 , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '-11' ) ; +test( macro , '17' , 1 , '0' ) ; +test( macro , '-17' , 1 , '0' ) ; +test( macro , '17' , -1 , '0' ) ; +test( macro , '-17' , -1 , '0' ) ; +test( macro , '17' , 3 , '2' ) ; +test( macro , '-17' , 3 , '1' ) ; +test( macro , '17' , -3 , '-1' ) ; +test( macro , '-17' , -3 , '-2' ) ; +test( macro , '17' , 7 , '3' ) ; +test( macro , '-17' , 7 , '4' ) ; +test( macro , '17' , -7 , '-4' ) ; +test( macro , '-17' , -7 , '-3' ) ; +test( macro , '17' , 9 , '8' ) ; +test( macro , '-17' , 9 , '1' ) ; +test( macro , '17' , -9 , '-1' ) ; +test( macro , '-17' , -9 , '-8' ) ; +test( macro , '17' , 11 , '6' ) ; +test( macro , '-17' , 11 , '5' ) ; +test( macro , '17' , -11 , '-5' ) ; +test( macro , '-17' , -11 , '-6' ) ; +test( macro , '17' , 17 , '0' ) ; +test( macro , '-17' , 17 , '0' ) ; +test( macro , '17' , -17 , '0' ) ; +test( macro , '-17' , -17 , '0' ) ; +test( macro , '17' , 22 , '17' ) ; +test( macro , '-17' , 22 , '5' ) ; +test( macro , '17' , -22 , '-5' ) ; +test( macro , '-17' , -22 , '-17' ) ; +test( macro , '17' , 24 , '17' ) ; +test( macro , '-17' , 24 , '7' ) ; +test( macro , '17' , -24 , '-7' ) ; +test( macro , '-17' , -24 , '-17' ) ; +test( macro , '17' , 27 , '17' ) ; +test( macro , '-17' , 27 , '10' ) ; +test( macro , '17' , -27 , '-10' ) ; +test( macro , '-17' , -27 , '-17' ) ; +test( macro , '17' , 29 , '17' ) ; +test( macro , '-17' , 29 , '12' ) ; +test( macro , '17' , -29 , '-12' ) ; +test( macro , '-17' , -29 , '-17' ) ; +test( macro , '17' , 1234 , '17' ) ; +test( macro , '-17' , 1234 , '1217' ) ; +test( macro , '17' , -1234 , '-1217' ) ; +test( macro , '-17' , -1234 , '-17' ) ; +test( macro , '17' , 5678 , '17' ) ; +test( macro , '-17' , 5678 , '5661' ) ; +test( macro , '17' , -5678 , '-5661' ) ; +test( macro , '-17' , -5678 , '-17' ) ; +test( macro , '17' , 1073741824 , '17' ) ; +test( macro , '-17' , 1073741824 , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '-17' ) ; +test( macro , '17' , 51676101935731 , '17' ) ; +test( macro , '-17' , 51676101935731 , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '-17' ) ; +test( macro , '22' , 1 , '0' ) ; +test( macro , '-22' , 1 , '0' ) ; +test( macro , '22' , -1 , '0' ) ; +test( macro , '-22' , -1 , '0' ) ; +test( macro , '22' , 3 , '1' ) ; +test( macro , '-22' , 3 , '2' ) ; +test( macro , '22' , -3 , '-2' ) ; +test( macro , '-22' , -3 , '-1' ) ; +test( macro , '22' , 7 , '1' ) ; +test( macro , '-22' , 7 , '6' ) ; +test( macro , '22' , -7 , '-6' ) ; +test( macro , '-22' , -7 , '-1' ) ; +test( macro , '22' , 9 , '4' ) ; +test( macro , '-22' , 9 , '5' ) ; +test( macro , '22' , -9 , '-5' ) ; +test( macro , '-22' , -9 , '-4' ) ; +test( macro , '22' , 11 , '0' ) ; +test( macro , '-22' , 11 , '0' ) ; +test( macro , '22' , -11 , '0' ) ; +test( macro , '-22' , -11 , '0' ) ; +test( macro , '22' , 17 , '5' ) ; +test( macro , '-22' , 17 , '12' ) ; +test( macro , '22' , -17 , '-12' ) ; +test( macro , '-22' , -17 , '-5' ) ; +test( macro , '22' , 22 , '0' ) ; +test( macro , '-22' , 22 , '0' ) ; +test( macro , '22' , -22 , '0' ) ; +test( macro , '-22' , -22 , '0' ) ; +test( macro , '22' , 24 , '22' ) ; +test( macro , '-22' , 24 , '2' ) ; +test( macro , '22' , -24 , '-2' ) ; +test( macro , '-22' , -24 , '-22' ) ; +test( macro , '22' , 27 , '22' ) ; +test( macro , '-22' , 27 , '5' ) ; +test( macro , '22' , -27 , '-5' ) ; +test( macro , '-22' , -27 , '-22' ) ; +test( macro , '22' , 29 , '22' ) ; +test( macro , '-22' , 29 , '7' ) ; +test( macro , '22' , -29 , '-7' ) ; +test( macro , '-22' , -29 , '-22' ) ; +test( macro , '22' , 1234 , '22' ) ; +test( macro , '-22' , 1234 , '1212' ) ; +test( macro , '22' , -1234 , '-1212' ) ; +test( macro , '-22' , -1234 , '-22' ) ; +test( macro , '22' , 5678 , '22' ) ; +test( macro , '-22' , 5678 , '5656' ) ; +test( macro , '22' , -5678 , '-5656' ) ; +test( macro , '-22' , -5678 , '-22' ) ; +test( macro , '22' , 1073741824 , '22' ) ; +test( macro , '-22' , 1073741824 , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '-22' ) ; +test( macro , '22' , 51676101935731 , '22' ) ; +test( macro , '-22' , 51676101935731 , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '-22' ) ; +test( macro , '24' , 1 , '0' ) ; +test( macro , '-24' , 1 , '0' ) ; +test( macro , '24' , -1 , '0' ) ; +test( macro , '-24' , -1 , '0' ) ; +test( macro , '24' , 3 , '0' ) ; +test( macro , '-24' , 3 , '0' ) ; +test( macro , '24' , -3 , '0' ) ; +test( macro , '-24' , -3 , '0' ) ; +test( macro , '24' , 7 , '3' ) ; +test( macro , '-24' , 7 , '4' ) ; +test( macro , '24' , -7 , '-4' ) ; +test( macro , '-24' , -7 , '-3' ) ; +test( macro , '24' , 9 , '6' ) ; +test( macro , '-24' , 9 , '3' ) ; +test( macro , '24' , -9 , '-3' ) ; +test( macro , '-24' , -9 , '-6' ) ; +test( macro , '24' , 11 , '2' ) ; +test( macro , '-24' , 11 , '9' ) ; +test( macro , '24' , -11 , '-9' ) ; +test( macro , '-24' , -11 , '-2' ) ; +test( macro , '24' , 17 , '7' ) ; +test( macro , '-24' , 17 , '10' ) ; +test( macro , '24' , -17 , '-10' ) ; +test( macro , '-24' , -17 , '-7' ) ; +test( macro , '24' , 22 , '2' ) ; +test( macro , '-24' , 22 , '20' ) ; +test( macro , '24' , -22 , '-20' ) ; +test( macro , '-24' , -22 , '-2' ) ; +test( macro , '24' , 24 , '0' ) ; +test( macro , '-24' , 24 , '0' ) ; +test( macro , '24' , -24 , '0' ) ; +test( macro , '-24' , -24 , '0' ) ; +test( macro , '24' , 27 , '24' ) ; +test( macro , '-24' , 27 , '3' ) ; +test( macro , '24' , -27 , '-3' ) ; +test( macro , '-24' , -27 , '-24' ) ; +test( macro , '24' , 29 , '24' ) ; +test( macro , '-24' , 29 , '5' ) ; +test( macro , '24' , -29 , '-5' ) ; +test( macro , '-24' , -29 , '-24' ) ; +test( macro , '24' , 1234 , '24' ) ; +test( macro , '-24' , 1234 , '1210' ) ; +test( macro , '24' , -1234 , '-1210' ) ; +test( macro , '-24' , -1234 , '-24' ) ; +test( macro , '24' , 5678 , '24' ) ; +test( macro , '-24' , 5678 , '5654' ) ; +test( macro , '24' , -5678 , '-5654' ) ; +test( macro , '-24' , -5678 , '-24' ) ; +test( macro , '24' , 1073741824 , '24' ) ; +test( macro , '-24' , 1073741824 , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '-24' ) ; +test( macro , '24' , 51676101935731 , '24' ) ; +test( macro , '-24' , 51676101935731 , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '-24' ) ; +test( macro , '27' , 1 , '0' ) ; +test( macro , '-27' , 1 , '0' ) ; +test( macro , '27' , -1 , '0' ) ; +test( macro , '-27' , -1 , '0' ) ; +test( macro , '27' , 3 , '0' ) ; +test( macro , '-27' , 3 , '0' ) ; +test( macro , '27' , -3 , '0' ) ; +test( macro , '-27' , -3 , '0' ) ; +test( macro , '27' , 7 , '6' ) ; +test( macro , '-27' , 7 , '1' ) ; +test( macro , '27' , -7 , '-1' ) ; +test( macro , '-27' , -7 , '-6' ) ; +test( macro , '27' , 9 , '0' ) ; +test( macro , '-27' , 9 , '0' ) ; +test( macro , '27' , -9 , '0' ) ; +test( macro , '-27' , -9 , '0' ) ; +test( macro , '27' , 11 , '5' ) ; +test( macro , '-27' , 11 , '6' ) ; +test( macro , '27' , -11 , '-6' ) ; +test( macro , '-27' , -11 , '-5' ) ; +test( macro , '27' , 17 , '10' ) ; +test( macro , '-27' , 17 , '7' ) ; +test( macro , '27' , -17 , '-7' ) ; +test( macro , '-27' , -17 , '-10' ) ; +test( macro , '27' , 22 , '5' ) ; +test( macro , '-27' , 22 , '17' ) ; +test( macro , '27' , -22 , '-17' ) ; +test( macro , '-27' , -22 , '-5' ) ; +test( macro , '27' , 24 , '3' ) ; +test( macro , '-27' , 24 , '21' ) ; +test( macro , '27' , -24 , '-21' ) ; +test( macro , '-27' , -24 , '-3' ) ; +test( macro , '27' , 27 , '0' ) ; +test( macro , '-27' , 27 , '0' ) ; +test( macro , '27' , -27 , '0' ) ; +test( macro , '-27' , -27 , '0' ) ; +test( macro , '27' , 29 , '27' ) ; +test( macro , '-27' , 29 , '2' ) ; +test( macro , '27' , -29 , '-2' ) ; +test( macro , '-27' , -29 , '-27' ) ; +test( macro , '27' , 1234 , '27' ) ; +test( macro , '-27' , 1234 , '1207' ) ; +test( macro , '27' , -1234 , '-1207' ) ; +test( macro , '-27' , -1234 , '-27' ) ; +test( macro , '27' , 5678 , '27' ) ; +test( macro , '-27' , 5678 , '5651' ) ; +test( macro , '27' , -5678 , '-5651' ) ; +test( macro , '-27' , -5678 , '-27' ) ; +test( macro , '27' , 1073741824 , '27' ) ; +test( macro , '-27' , 1073741824 , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '-27' ) ; +test( macro , '27' , 51676101935731 , '27' ) ; +test( macro , '-27' , 51676101935731 , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '-27' ) ; +test( macro , '29' , 1 , '0' ) ; +test( macro , '-29' , 1 , '0' ) ; +test( macro , '29' , -1 , '0' ) ; +test( macro , '-29' , -1 , '0' ) ; +test( macro , '29' , 3 , '2' ) ; +test( macro , '-29' , 3 , '1' ) ; +test( macro , '29' , -3 , '-1' ) ; +test( macro , '-29' , -3 , '-2' ) ; +test( macro , '29' , 7 , '1' ) ; +test( macro , '-29' , 7 , '6' ) ; +test( macro , '29' , -7 , '-6' ) ; +test( macro , '-29' , -7 , '-1' ) ; +test( macro , '29' , 9 , '2' ) ; +test( macro , '-29' , 9 , '7' ) ; +test( macro , '29' , -9 , '-7' ) ; +test( macro , '-29' , -9 , '-2' ) ; +test( macro , '29' , 11 , '7' ) ; +test( macro , '-29' , 11 , '4' ) ; +test( macro , '29' , -11 , '-4' ) ; +test( macro , '-29' , -11 , '-7' ) ; +test( macro , '29' , 17 , '12' ) ; +test( macro , '-29' , 17 , '5' ) ; +test( macro , '29' , -17 , '-5' ) ; +test( macro , '-29' , -17 , '-12' ) ; +test( macro , '29' , 22 , '7' ) ; +test( macro , '-29' , 22 , '15' ) ; +test( macro , '29' , -22 , '-15' ) ; +test( macro , '-29' , -22 , '-7' ) ; +test( macro , '29' , 24 , '5' ) ; +test( macro , '-29' , 24 , '19' ) ; +test( macro , '29' , -24 , '-19' ) ; +test( macro , '-29' , -24 , '-5' ) ; +test( macro , '29' , 27 , '2' ) ; +test( macro , '-29' , 27 , '25' ) ; +test( macro , '29' , -27 , '-25' ) ; +test( macro , '-29' , -27 , '-2' ) ; +test( macro , '29' , 29 , '0' ) ; +test( macro , '-29' , 29 , '0' ) ; +test( macro , '29' , -29 , '0' ) ; +test( macro , '-29' , -29 , '0' ) ; +test( macro , '29' , 1234 , '29' ) ; +test( macro , '-29' , 1234 , '1205' ) ; +test( macro , '29' , -1234 , '-1205' ) ; +test( macro , '-29' , -1234 , '-29' ) ; +test( macro , '29' , 5678 , '29' ) ; +test( macro , '-29' , 5678 , '5649' ) ; +test( macro , '29' , -5678 , '-5649' ) ; +test( macro , '-29' , -5678 , '-29' ) ; +test( macro , '29' , 1073741824 , '29' ) ; +test( macro , '-29' , 1073741824 , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '-29' ) ; +test( macro , '29' , 51676101935731 , '29' ) ; +test( macro , '-29' , 51676101935731 , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '-29' ) ; +test( macro , '1234' , 1 , '0' ) ; +test( macro , '-1234' , 1 , '0' ) ; +test( macro , '1234' , -1 , '0' ) ; +test( macro , '-1234' , -1 , '0' ) ; +test( macro , '1234' , 3 , '1' ) ; +test( macro , '-1234' , 3 , '2' ) ; +test( macro , '1234' , -3 , '-2' ) ; +test( macro , '-1234' , -3 , '-1' ) ; +test( macro , '1234' , 7 , '2' ) ; +test( macro , '-1234' , 7 , '5' ) ; +test( macro , '1234' , -7 , '-5' ) ; +test( macro , '-1234' , -7 , '-2' ) ; +test( macro , '1234' , 9 , '1' ) ; +test( macro , '-1234' , 9 , '8' ) ; +test( macro , '1234' , -9 , '-8' ) ; +test( macro , '-1234' , -9 , '-1' ) ; +test( macro , '1234' , 11 , '2' ) ; +test( macro , '-1234' , 11 , '9' ) ; +test( macro , '1234' , -11 , '-9' ) ; +test( macro , '-1234' , -11 , '-2' ) ; +test( macro , '1234' , 17 , '10' ) ; +test( macro , '-1234' , 17 , '7' ) ; +test( macro , '1234' , -17 , '-7' ) ; +test( macro , '-1234' , -17 , '-10' ) ; +test( macro , '1234' , 22 , '2' ) ; +test( macro , '-1234' , 22 , '20' ) ; +test( macro , '1234' , -22 , '-20' ) ; +test( macro , '-1234' , -22 , '-2' ) ; +test( macro , '1234' , 24 , '10' ) ; +test( macro , '-1234' , 24 , '14' ) ; +test( macro , '1234' , -24 , '-14' ) ; +test( macro , '-1234' , -24 , '-10' ) ; +test( macro , '1234' , 27 , '19' ) ; +test( macro , '-1234' , 27 , '8' ) ; +test( macro , '1234' , -27 , '-8' ) ; +test( macro , '-1234' , -27 , '-19' ) ; +test( macro , '1234' , 29 , '16' ) ; +test( macro , '-1234' , 29 , '13' ) ; +test( macro , '1234' , -29 , '-13' ) ; +test( macro , '-1234' , -29 , '-16' ) ; +test( macro , '1234' , 1234 , '0' ) ; +test( macro , '-1234' , 1234 , '0' ) ; +test( macro , '1234' , -1234 , '0' ) ; +test( macro , '-1234' , -1234 , '0' ) ; +test( macro , '1234' , 5678 , '1234' ) ; +test( macro , '-1234' , 5678 , '4444' ) ; +test( macro , '1234' , -5678 , '-4444' ) ; +test( macro , '-1234' , -5678 , '-1234' ) ; +test( macro , '1234' , 1073741824 , '1234' ) ; +test( macro , '-1234' , 1073741824 , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '-1234' ) ; +test( macro , '1234' , 51676101935731 , '1234' ) ; +test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '-1234' ) ; +test( macro , '5678' , 1 , '0' ) ; +test( macro , '-5678' , 1 , '0' ) ; +test( macro , '5678' , -1 , '0' ) ; +test( macro , '-5678' , -1 , '0' ) ; +test( macro , '5678' , 3 , '2' ) ; +test( macro , '-5678' , 3 , '1' ) ; +test( macro , '5678' , -3 , '-1' ) ; +test( macro , '-5678' , -3 , '-2' ) ; +test( macro , '5678' , 7 , '1' ) ; +test( macro , '-5678' , 7 , '6' ) ; +test( macro , '5678' , -7 , '-6' ) ; +test( macro , '-5678' , -7 , '-1' ) ; +test( macro , '5678' , 9 , '8' ) ; +test( macro , '-5678' , 9 , '1' ) ; +test( macro , '5678' , -9 , '-1' ) ; +test( macro , '-5678' , -9 , '-8' ) ; +test( macro , '5678' , 11 , '2' ) ; +test( macro , '-5678' , 11 , '9' ) ; +test( macro , '5678' , -11 , '-9' ) ; +test( macro , '-5678' , -11 , '-2' ) ; +test( macro , '5678' , 17 , '0' ) ; +test( macro , '-5678' , 17 , '0' ) ; +test( macro , '5678' , -17 , '0' ) ; +test( macro , '-5678' , -17 , '0' ) ; +test( macro , '5678' , 22 , '2' ) ; +test( macro , '-5678' , 22 , '20' ) ; +test( macro , '5678' , -22 , '-20' ) ; +test( macro , '-5678' , -22 , '-2' ) ; +test( macro , '5678' , 24 , '14' ) ; +test( macro , '-5678' , 24 , '10' ) ; +test( macro , '5678' , -24 , '-10' ) ; +test( macro , '-5678' , -24 , '-14' ) ; +test( macro , '5678' , 27 , '8' ) ; +test( macro , '-5678' , 27 , '19' ) ; +test( macro , '5678' , -27 , '-19' ) ; +test( macro , '-5678' , -27 , '-8' ) ; +test( macro , '5678' , 29 , '23' ) ; +test( macro , '-5678' , 29 , '6' ) ; +test( macro , '5678' , -29 , '-6' ) ; +test( macro , '-5678' , -29 , '-23' ) ; +test( macro , '5678' , 1234 , '742' ) ; +test( macro , '-5678' , 1234 , '492' ) ; +test( macro , '5678' , -1234 , '-492' ) ; +test( macro , '-5678' , -1234 , '-742' ) ; +test( macro , '5678' , 5678 , '0' ) ; +test( macro , '-5678' , 5678 , '0' ) ; +test( macro , '5678' , -5678 , '0' ) ; +test( macro , '-5678' , -5678 , '0' ) ; +test( macro , '5678' , 1073741824 , '5678' ) ; +test( macro , '-5678' , 1073741824 , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '-5678' ) ; +test( macro , '5678' , 51676101935731 , '5678' ) ; +test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '-5678' ) ; +test( macro , '1073741824' , 1 , '0' ) ; +test( macro , '-1073741824' , 1 , '0' ) ; +test( macro , '1073741824' , -1 , '0' ) ; +test( macro , '-1073741824' , -1 , '0' ) ; +test( macro , '1073741824' , 3 , '1' ) ; +test( macro , '-1073741824' , 3 , '2' ) ; +test( macro , '1073741824' , -3 , '-2' ) ; +test( macro , '-1073741824' , -3 , '-1' ) ; +test( macro , '1073741824' , 7 , '1' ) ; +test( macro , '-1073741824' , 7 , '6' ) ; +test( macro , '1073741824' , -7 , '-6' ) ; +test( macro , '-1073741824' , -7 , '-1' ) ; +test( macro , '1073741824' , 9 , '1' ) ; +test( macro , '-1073741824' , 9 , '8' ) ; +test( macro , '1073741824' , -9 , '-8' ) ; +test( macro , '-1073741824' , -9 , '-1' ) ; +test( macro , '1073741824' , 11 , '1' ) ; +test( macro , '-1073741824' , 11 , '10' ) ; +test( macro , '1073741824' , -11 , '-10' ) ; +test( macro , '-1073741824' , -11 , '-1' ) ; +test( macro , '1073741824' , 17 , '13' ) ; +test( macro , '-1073741824' , 17 , '4' ) ; +test( macro , '1073741824' , -17 , '-4' ) ; +test( macro , '-1073741824' , -17 , '-13' ) ; +test( macro , '1073741824' , 22 , '12' ) ; +test( macro , '-1073741824' , 22 , '10' ) ; +test( macro , '1073741824' , -22 , '-10' ) ; +test( macro , '-1073741824' , -22 , '-12' ) ; +test( macro , '1073741824' , 24 , '16' ) ; +test( macro , '-1073741824' , 24 , '8' ) ; +test( macro , '1073741824' , -24 , '-8' ) ; +test( macro , '-1073741824' , -24 , '-16' ) ; +test( macro , '1073741824' , 27 , '19' ) ; +test( macro , '-1073741824' , 27 , '8' ) ; +test( macro , '1073741824' , -27 , '-8' ) ; +test( macro , '-1073741824' , -27 , '-19' ) ; +test( macro , '1073741824' , 29 , '4' ) ; +test( macro , '-1073741824' , 29 , '25' ) ; +test( macro , '1073741824' , -29 , '-25' ) ; +test( macro , '-1073741824' , -29 , '-4' ) ; +test( macro , '1073741824' , 1234 , '170' ) ; +test( macro , '-1073741824' , 1234 , '1064' ) ; +test( macro , '1073741824' , -1234 , '-1064' ) ; +test( macro , '-1073741824' , -1234 , '-170' ) ; +test( macro , '1073741824' , 5678 , '3634' ) ; +test( macro , '-1073741824' , 5678 , '2044' ) ; +test( macro , '1073741824' , -5678 , '-2044' ) ; +test( macro , '-1073741824' , -5678 , '-3634' ) ; +test( macro , '1073741824' , 1073741824 , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '0' ) ; +test( macro , '1073741824' , -1073741824 , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '1073741824' ) ; +test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '-1073741824' ) ; +test( macro , '51676101935731' , 1 , '0' ) ; +test( macro , '-51676101935731' , 1 , '0' ) ; +test( macro , '51676101935731' , -1 , '0' ) ; +test( macro , '-51676101935731' , -1 , '0' ) ; +test( macro , '51676101935731' , 3 , '1' ) ; +test( macro , '-51676101935731' , 3 , '2' ) ; +test( macro , '51676101935731' , -3 , '-2' ) ; +test( macro , '-51676101935731' , -3 , '-1' ) ; +test( macro , '51676101935731' , 7 , '0' ) ; +test( macro , '-51676101935731' , 7 , '0' ) ; +test( macro , '51676101935731' , -7 , '0' ) ; +test( macro , '-51676101935731' , -7 , '0' ) ; +test( macro , '51676101935731' , 9 , '1' ) ; +test( macro , '-51676101935731' , 9 , '8' ) ; +test( macro , '51676101935731' , -9 , '-8' ) ; +test( macro , '-51676101935731' , -9 , '-1' ) ; +test( macro , '51676101935731' , 11 , '9' ) ; +test( macro , '-51676101935731' , 11 , '2' ) ; +test( macro , '51676101935731' , -11 , '-2' ) ; +test( macro , '-51676101935731' , -11 , '-9' ) ; +test( macro , '51676101935731' , 17 , '14' ) ; +test( macro , '-51676101935731' , 17 , '3' ) ; +test( macro , '51676101935731' , -17 , '-3' ) ; +test( macro , '-51676101935731' , -17 , '-14' ) ; +test( macro , '51676101935731' , 22 , '9' ) ; +test( macro , '-51676101935731' , 22 , '13' ) ; +test( macro , '51676101935731' , -22 , '-13' ) ; +test( macro , '-51676101935731' , -22 , '-9' ) ; +test( macro , '51676101935731' , 24 , '19' ) ; +test( macro , '-51676101935731' , 24 , '5' ) ; +test( macro , '51676101935731' , -24 , '-5' ) ; +test( macro , '-51676101935731' , -24 , '-19' ) ; +test( macro , '51676101935731' , 27 , '10' ) ; +test( macro , '-51676101935731' , 27 , '17' ) ; +test( macro , '51676101935731' , -27 , '-17' ) ; +test( macro , '-51676101935731' , -27 , '-10' ) ; +test( macro , '51676101935731' , 29 , '28' ) ; +test( macro , '-51676101935731' , 29 , '1' ) ; +test( macro , '51676101935731' , -29 , '-1' ) ; +test( macro , '-51676101935731' , -29 , '-28' ) ; +test( macro , '51676101935731' , 1234 , '835' ) ; +test( macro , '-51676101935731' , 1234 , '399' ) ; +test( macro , '51676101935731' , -1234 , '-399' ) ; +test( macro , '-51676101935731' , -1234 , '-835' ) ; +test( macro , '51676101935731' , 5678 , '3023' ) ; +test( macro , '-51676101935731' , 5678 , '2655' ) ; +test( macro , '51676101935731' , -5678 , '-2655' ) ; +test( macro , '-51676101935731' , -5678 , '-3023' ) ; +test( macro , '51676101935731' , 1073741824 , '129172083' ) ; +test( macro , '-51676101935731' , 1073741824 , '944569741' ) ; +test( macro , '51676101935731' , -1073741824 , '-944569741' ) ; +test( macro , '-51676101935731' , -1073741824 , '-129172083' ) ; +test( macro , '51676101935731' , 51676101935731 , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '0' ) ; +test( macro , '-717897987691852588770249' , 1 , '0' ) ; +test( macro , '717897987691852588770249' , -1 , '0' ) ; +test( macro , '-717897987691852588770249' , -1 , '0' ) ; +test( macro , '717897987691852588770249' , 3 , '0' ) ; +test( macro , '-717897987691852588770249' , 3 , '0' ) ; +test( macro , '717897987691852588770249' , -3 , '0' ) ; +test( macro , '-717897987691852588770249' , -3 , '0' ) ; +test( macro , '717897987691852588770249' , 7 , '2' ) ; +test( macro , '-717897987691852588770249' , 7 , '5' ) ; +test( macro , '717897987691852588770249' , -7 , '-5' ) ; +test( macro , '-717897987691852588770249' , -7 , '-2' ) ; +test( macro , '717897987691852588770249' , 9 , '0' ) ; +test( macro , '-717897987691852588770249' , 9 , '0' ) ; +test( macro , '717897987691852588770249' , -9 , '0' ) ; +test( macro , '-717897987691852588770249' , -9 , '0' ) ; +test( macro , '717897987691852588770249' , 11 , '1' ) ; +test( macro , '-717897987691852588770249' , 11 , '10' ) ; +test( macro , '717897987691852588770249' , -11 , '-10' ) ; +test( macro , '-717897987691852588770249' , -11 , '-1' ) ; +test( macro , '717897987691852588770249' , 17 , '9' ) ; +test( macro , '-717897987691852588770249' , 17 , '8' ) ; +test( macro , '717897987691852588770249' , -17 , '-8' ) ; +test( macro , '-717897987691852588770249' , -17 , '-9' ) ; +test( macro , '717897987691852588770249' , 22 , '1' ) ; +test( macro , '-717897987691852588770249' , 22 , '21' ) ; +test( macro , '717897987691852588770249' , -22 , '-21' ) ; +test( macro , '-717897987691852588770249' , -22 , '-1' ) ; +test( macro , '717897987691852588770249' , 24 , '9' ) ; +test( macro , '-717897987691852588770249' , 24 , '15' ) ; +test( macro , '717897987691852588770249' , -24 , '-15' ) ; +test( macro , '-717897987691852588770249' , -24 , '-9' ) ; +test( macro , '717897987691852588770249' , 27 , '0' ) ; +test( macro , '-717897987691852588770249' , 27 , '0' ) ; +test( macro , '717897987691852588770249' , -27 , '0' ) ; +test( macro , '-717897987691852588770249' , -27 , '0' ) ; +test( macro , '717897987691852588770249' , 29 , '22' ) ; +test( macro , '-717897987691852588770249' , 29 , '7' ) ; +test( macro , '717897987691852588770249' , -29 , '-7' ) ; +test( macro , '-717897987691852588770249' , -29 , '-22' ) ; +test( macro , '717897987691852588770249' , 1234 , '755' ) ; +test( macro , '-717897987691852588770249' , 1234 , '479' ) ; +test( macro , '717897987691852588770249' , -1234 , '-479' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-755' ) ; +test( macro , '717897987691852588770249' , 5678 , '3477' ) ; +test( macro , '-717897987691852588770249' , 5678 , '2201' ) ; +test( macro , '717897987691852588770249' , -5678 , '-2201' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-3477' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '278782921' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '794958903' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-794958903' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-278782921' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '417440429124' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-51258661506607' ) ; diff --git a/test/src/integer/arithmetic/imul.js b/test/src/integer/arithmetic/imul.js index 99a2312..fb0303b 100644 --- a/test/src/integer/arithmetic/imul.js +++ b/test/src/integer/arithmetic/imul.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} *= ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `imul(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; test( macro , '-1' , '-1' , '1' ) ; +test( macro , '1' , '3' , '3' ) ; +test( macro , '-1' , '3' , '-3' ) ; +test( macro , '1' , '-3' , '-3' ) ; +test( macro , '-1' , '-3' , '3' ) ; +test( macro , '1' , '7' , '7' ) ; +test( macro , '-1' , '7' , '-7' ) ; +test( macro , '1' , '-7' , '-7' ) ; +test( macro , '-1' , '-7' , '7' ) ; +test( macro , '1' , '9' , '9' ) ; +test( macro , '-1' , '9' , '-9' ) ; +test( macro , '1' , '-9' , '-9' ) ; +test( macro , '-1' , '-9' , '9' ) ; +test( macro , '1' , '11' , '11' ) ; +test( macro , '-1' , '11' , '-11' ) ; +test( macro , '1' , '-11' , '-11' ) ; +test( macro , '-1' , '-11' , '11' ) ; test( macro , '1' , '17' , '17' ) ; test( macro , '-1' , '17' , '-17' ) ; test( macro , '1' , '-17' , '-17' ) ; test( macro , '-1' , '-17' , '17' ) ; -test( macro , '1' , '51676101935731' , '51676101935731' ) ; -test( macro , '-1' , '51676101935731' , '-51676101935731' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935731' ) ; -test( macro , '-1' , '-51676101935731' , '51676101935731' ) ; +test( macro , '1' , '22' , '22' ) ; +test( macro , '-1' , '22' , '-22' ) ; +test( macro , '1' , '-22' , '-22' ) ; +test( macro , '-1' , '-22' , '22' ) ; +test( macro , '1' , '24' , '24' ) ; +test( macro , '-1' , '24' , '-24' ) ; +test( macro , '1' , '-24' , '-24' ) ; +test( macro , '-1' , '-24' , '24' ) ; +test( macro , '1' , '27' , '27' ) ; +test( macro , '-1' , '27' , '-27' ) ; +test( macro , '1' , '-27' , '-27' ) ; +test( macro , '-1' , '-27' , '27' ) ; +test( macro , '1' , '29' , '29' ) ; +test( macro , '-1' , '29' , '-29' ) ; +test( macro , '1' , '-29' , '-29' ) ; +test( macro , '-1' , '-29' , '29' ) ; +test( macro , '1' , '1234' , '1234' ) ; +test( macro , '-1' , '1234' , '-1234' ) ; +test( macro , '1' , '-1234' , '-1234' ) ; +test( macro , '-1' , '-1234' , '1234' ) ; +test( macro , '1' , '5678' , '5678' ) ; +test( macro , '-1' , '5678' , '-5678' ) ; +test( macro , '1' , '-5678' , '-5678' ) ; +test( macro , '-1' , '-5678' , '5678' ) ; test( macro , '1' , '1073741824' , '1073741824' ) ; test( macro , '-1' , '1073741824' , '-1073741824' ) ; test( macro , '1' , '-1073741824' , '-1073741824' ) ; test( macro , '-1' , '-1073741824' , '1073741824' ) ; +test( macro , '1' , '51676101935731' , '51676101935731' ) ; +test( macro , '-1' , '51676101935731' , '-51676101935731' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935731' ) ; +test( macro , '-1' , '-51676101935731' , '51676101935731' ) ; test( macro , '1' , '717897987691852588770249' , '717897987691852588770249' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '-1' , '-3' ) ; +test( macro , '-3' , '-1' , '3' ) ; +test( macro , '3' , '3' , '9' ) ; +test( macro , '-3' , '3' , '-9' ) ; +test( macro , '3' , '-3' , '-9' ) ; +test( macro , '-3' , '-3' , '9' ) ; +test( macro , '3' , '7' , '21' ) ; +test( macro , '-3' , '7' , '-21' ) ; +test( macro , '3' , '-7' , '-21' ) ; +test( macro , '-3' , '-7' , '21' ) ; +test( macro , '3' , '9' , '27' ) ; +test( macro , '-3' , '9' , '-27' ) ; +test( macro , '3' , '-9' , '-27' ) ; +test( macro , '-3' , '-9' , '27' ) ; +test( macro , '3' , '11' , '33' ) ; +test( macro , '-3' , '11' , '-33' ) ; +test( macro , '3' , '-11' , '-33' ) ; +test( macro , '-3' , '-11' , '33' ) ; +test( macro , '3' , '17' , '51' ) ; +test( macro , '-3' , '17' , '-51' ) ; +test( macro , '3' , '-17' , '-51' ) ; +test( macro , '-3' , '-17' , '51' ) ; +test( macro , '3' , '22' , '66' ) ; +test( macro , '-3' , '22' , '-66' ) ; +test( macro , '3' , '-22' , '-66' ) ; +test( macro , '-3' , '-22' , '66' ) ; +test( macro , '3' , '24' , '72' ) ; +test( macro , '-3' , '24' , '-72' ) ; +test( macro , '3' , '-24' , '-72' ) ; +test( macro , '-3' , '-24' , '72' ) ; +test( macro , '3' , '27' , '81' ) ; +test( macro , '-3' , '27' , '-81' ) ; +test( macro , '3' , '-27' , '-81' ) ; +test( macro , '-3' , '-27' , '81' ) ; +test( macro , '3' , '29' , '87' ) ; +test( macro , '-3' , '29' , '-87' ) ; +test( macro , '3' , '-29' , '-87' ) ; +test( macro , '-3' , '-29' , '87' ) ; +test( macro , '3' , '1234' , '3702' ) ; +test( macro , '-3' , '1234' , '-3702' ) ; +test( macro , '3' , '-1234' , '-3702' ) ; +test( macro , '-3' , '-1234' , '3702' ) ; +test( macro , '3' , '5678' , '17034' ) ; +test( macro , '-3' , '5678' , '-17034' ) ; +test( macro , '3' , '-5678' , '-17034' ) ; +test( macro , '-3' , '-5678' , '17034' ) ; +test( macro , '3' , '1073741824' , '3221225472' ) ; +test( macro , '-3' , '1073741824' , '-3221225472' ) ; +test( macro , '3' , '-1073741824' , '-3221225472' ) ; +test( macro , '-3' , '-1073741824' , '3221225472' ) ; +test( macro , '3' , '51676101935731' , '155028305807193' ) ; +test( macro , '-3' , '51676101935731' , '-155028305807193' ) ; +test( macro , '3' , '-51676101935731' , '-155028305807193' ) ; +test( macro , '-3' , '-51676101935731' , '155028305807193' ) ; +test( macro , '3' , '717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '-3' , '717897987691852588770249' , '-2153693963075557766310747' ) ; +test( macro , '3' , '-717897987691852588770249' , '-2153693963075557766310747' ) ; +test( macro , '-3' , '-717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '-1' , '-7' ) ; +test( macro , '-7' , '-1' , '7' ) ; +test( macro , '7' , '3' , '21' ) ; +test( macro , '-7' , '3' , '-21' ) ; +test( macro , '7' , '-3' , '-21' ) ; +test( macro , '-7' , '-3' , '21' ) ; +test( macro , '7' , '7' , '49' ) ; +test( macro , '-7' , '7' , '-49' ) ; +test( macro , '7' , '-7' , '-49' ) ; +test( macro , '-7' , '-7' , '49' ) ; +test( macro , '7' , '9' , '63' ) ; +test( macro , '-7' , '9' , '-63' ) ; +test( macro , '7' , '-9' , '-63' ) ; +test( macro , '-7' , '-9' , '63' ) ; +test( macro , '7' , '11' , '77' ) ; +test( macro , '-7' , '11' , '-77' ) ; +test( macro , '7' , '-11' , '-77' ) ; +test( macro , '-7' , '-11' , '77' ) ; +test( macro , '7' , '17' , '119' ) ; +test( macro , '-7' , '17' , '-119' ) ; +test( macro , '7' , '-17' , '-119' ) ; +test( macro , '-7' , '-17' , '119' ) ; +test( macro , '7' , '22' , '154' ) ; +test( macro , '-7' , '22' , '-154' ) ; +test( macro , '7' , '-22' , '-154' ) ; +test( macro , '-7' , '-22' , '154' ) ; +test( macro , '7' , '24' , '168' ) ; +test( macro , '-7' , '24' , '-168' ) ; +test( macro , '7' , '-24' , '-168' ) ; +test( macro , '-7' , '-24' , '168' ) ; +test( macro , '7' , '27' , '189' ) ; +test( macro , '-7' , '27' , '-189' ) ; +test( macro , '7' , '-27' , '-189' ) ; +test( macro , '-7' , '-27' , '189' ) ; +test( macro , '7' , '29' , '203' ) ; +test( macro , '-7' , '29' , '-203' ) ; +test( macro , '7' , '-29' , '-203' ) ; +test( macro , '-7' , '-29' , '203' ) ; +test( macro , '7' , '1234' , '8638' ) ; +test( macro , '-7' , '1234' , '-8638' ) ; +test( macro , '7' , '-1234' , '-8638' ) ; +test( macro , '-7' , '-1234' , '8638' ) ; +test( macro , '7' , '5678' , '39746' ) ; +test( macro , '-7' , '5678' , '-39746' ) ; +test( macro , '7' , '-5678' , '-39746' ) ; +test( macro , '-7' , '-5678' , '39746' ) ; +test( macro , '7' , '1073741824' , '7516192768' ) ; +test( macro , '-7' , '1073741824' , '-7516192768' ) ; +test( macro , '7' , '-1073741824' , '-7516192768' ) ; +test( macro , '-7' , '-1073741824' , '7516192768' ) ; +test( macro , '7' , '51676101935731' , '361732713550117' ) ; +test( macro , '-7' , '51676101935731' , '-361732713550117' ) ; +test( macro , '7' , '-51676101935731' , '-361732713550117' ) ; +test( macro , '-7' , '-51676101935731' , '361732713550117' ) ; +test( macro , '7' , '717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '-7' , '717897987691852588770249' , '-5025285913842968121391743' ) ; +test( macro , '7' , '-717897987691852588770249' , '-5025285913842968121391743' ) ; +test( macro , '-7' , '-717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '-1' , '-9' ) ; +test( macro , '-9' , '-1' , '9' ) ; +test( macro , '9' , '3' , '27' ) ; +test( macro , '-9' , '3' , '-27' ) ; +test( macro , '9' , '-3' , '-27' ) ; +test( macro , '-9' , '-3' , '27' ) ; +test( macro , '9' , '7' , '63' ) ; +test( macro , '-9' , '7' , '-63' ) ; +test( macro , '9' , '-7' , '-63' ) ; +test( macro , '-9' , '-7' , '63' ) ; +test( macro , '9' , '9' , '81' ) ; +test( macro , '-9' , '9' , '-81' ) ; +test( macro , '9' , '-9' , '-81' ) ; +test( macro , '-9' , '-9' , '81' ) ; +test( macro , '9' , '11' , '99' ) ; +test( macro , '-9' , '11' , '-99' ) ; +test( macro , '9' , '-11' , '-99' ) ; +test( macro , '-9' , '-11' , '99' ) ; +test( macro , '9' , '17' , '153' ) ; +test( macro , '-9' , '17' , '-153' ) ; +test( macro , '9' , '-17' , '-153' ) ; +test( macro , '-9' , '-17' , '153' ) ; +test( macro , '9' , '22' , '198' ) ; +test( macro , '-9' , '22' , '-198' ) ; +test( macro , '9' , '-22' , '-198' ) ; +test( macro , '-9' , '-22' , '198' ) ; +test( macro , '9' , '24' , '216' ) ; +test( macro , '-9' , '24' , '-216' ) ; +test( macro , '9' , '-24' , '-216' ) ; +test( macro , '-9' , '-24' , '216' ) ; +test( macro , '9' , '27' , '243' ) ; +test( macro , '-9' , '27' , '-243' ) ; +test( macro , '9' , '-27' , '-243' ) ; +test( macro , '-9' , '-27' , '243' ) ; +test( macro , '9' , '29' , '261' ) ; +test( macro , '-9' , '29' , '-261' ) ; +test( macro , '9' , '-29' , '-261' ) ; +test( macro , '-9' , '-29' , '261' ) ; +test( macro , '9' , '1234' , '11106' ) ; +test( macro , '-9' , '1234' , '-11106' ) ; +test( macro , '9' , '-1234' , '-11106' ) ; +test( macro , '-9' , '-1234' , '11106' ) ; +test( macro , '9' , '5678' , '51102' ) ; +test( macro , '-9' , '5678' , '-51102' ) ; +test( macro , '9' , '-5678' , '-51102' ) ; +test( macro , '-9' , '-5678' , '51102' ) ; +test( macro , '9' , '1073741824' , '9663676416' ) ; +test( macro , '-9' , '1073741824' , '-9663676416' ) ; +test( macro , '9' , '-1073741824' , '-9663676416' ) ; +test( macro , '-9' , '-1073741824' , '9663676416' ) ; +test( macro , '9' , '51676101935731' , '465084917421579' ) ; +test( macro , '-9' , '51676101935731' , '-465084917421579' ) ; +test( macro , '9' , '-51676101935731' , '-465084917421579' ) ; +test( macro , '-9' , '-51676101935731' , '465084917421579' ) ; +test( macro , '9' , '717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '-9' , '717897987691852588770249' , '-6461081889226673298932241' ) ; +test( macro , '9' , '-717897987691852588770249' , '-6461081889226673298932241' ) ; +test( macro , '-9' , '-717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '-1' , '-11' ) ; +test( macro , '-11' , '-1' , '11' ) ; +test( macro , '11' , '3' , '33' ) ; +test( macro , '-11' , '3' , '-33' ) ; +test( macro , '11' , '-3' , '-33' ) ; +test( macro , '-11' , '-3' , '33' ) ; +test( macro , '11' , '7' , '77' ) ; +test( macro , '-11' , '7' , '-77' ) ; +test( macro , '11' , '-7' , '-77' ) ; +test( macro , '-11' , '-7' , '77' ) ; +test( macro , '11' , '9' , '99' ) ; +test( macro , '-11' , '9' , '-99' ) ; +test( macro , '11' , '-9' , '-99' ) ; +test( macro , '-11' , '-9' , '99' ) ; +test( macro , '11' , '11' , '121' ) ; +test( macro , '-11' , '11' , '-121' ) ; +test( macro , '11' , '-11' , '-121' ) ; +test( macro , '-11' , '-11' , '121' ) ; +test( macro , '11' , '17' , '187' ) ; +test( macro , '-11' , '17' , '-187' ) ; +test( macro , '11' , '-17' , '-187' ) ; +test( macro , '-11' , '-17' , '187' ) ; +test( macro , '11' , '22' , '242' ) ; +test( macro , '-11' , '22' , '-242' ) ; +test( macro , '11' , '-22' , '-242' ) ; +test( macro , '-11' , '-22' , '242' ) ; +test( macro , '11' , '24' , '264' ) ; +test( macro , '-11' , '24' , '-264' ) ; +test( macro , '11' , '-24' , '-264' ) ; +test( macro , '-11' , '-24' , '264' ) ; +test( macro , '11' , '27' , '297' ) ; +test( macro , '-11' , '27' , '-297' ) ; +test( macro , '11' , '-27' , '-297' ) ; +test( macro , '-11' , '-27' , '297' ) ; +test( macro , '11' , '29' , '319' ) ; +test( macro , '-11' , '29' , '-319' ) ; +test( macro , '11' , '-29' , '-319' ) ; +test( macro , '-11' , '-29' , '319' ) ; +test( macro , '11' , '1234' , '13574' ) ; +test( macro , '-11' , '1234' , '-13574' ) ; +test( macro , '11' , '-1234' , '-13574' ) ; +test( macro , '-11' , '-1234' , '13574' ) ; +test( macro , '11' , '5678' , '62458' ) ; +test( macro , '-11' , '5678' , '-62458' ) ; +test( macro , '11' , '-5678' , '-62458' ) ; +test( macro , '-11' , '-5678' , '62458' ) ; +test( macro , '11' , '1073741824' , '11811160064' ) ; +test( macro , '-11' , '1073741824' , '-11811160064' ) ; +test( macro , '11' , '-1073741824' , '-11811160064' ) ; +test( macro , '-11' , '-1073741824' , '11811160064' ) ; +test( macro , '11' , '51676101935731' , '568437121293041' ) ; +test( macro , '-11' , '51676101935731' , '-568437121293041' ) ; +test( macro , '11' , '-51676101935731' , '-568437121293041' ) ; +test( macro , '-11' , '-51676101935731' , '568437121293041' ) ; +test( macro , '11' , '717897987691852588770249' , '7896877864610378476472739' ) ; +test( macro , '-11' , '717897987691852588770249' , '-7896877864610378476472739' ) ; +test( macro , '11' , '-717897987691852588770249' , '-7896877864610378476472739' ) ; +test( macro , '-11' , '-717897987691852588770249' , '7896877864610378476472739' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; test( macro , '-17' , '-1' , '17' ) ; +test( macro , '17' , '3' , '51' ) ; +test( macro , '-17' , '3' , '-51' ) ; +test( macro , '17' , '-3' , '-51' ) ; +test( macro , '-17' , '-3' , '51' ) ; +test( macro , '17' , '7' , '119' ) ; +test( macro , '-17' , '7' , '-119' ) ; +test( macro , '17' , '-7' , '-119' ) ; +test( macro , '-17' , '-7' , '119' ) ; +test( macro , '17' , '9' , '153' ) ; +test( macro , '-17' , '9' , '-153' ) ; +test( macro , '17' , '-9' , '-153' ) ; +test( macro , '-17' , '-9' , '153' ) ; +test( macro , '17' , '11' , '187' ) ; +test( macro , '-17' , '11' , '-187' ) ; +test( macro , '17' , '-11' , '-187' ) ; +test( macro , '-17' , '-11' , '187' ) ; test( macro , '17' , '17' , '289' ) ; test( macro , '-17' , '17' , '-289' ) ; test( macro , '17' , '-17' , '-289' ) ; test( macro , '-17' , '-17' , '289' ) ; -test( macro , '17' , '51676101935731' , '878493732907427' ) ; -test( macro , '-17' , '51676101935731' , '-878493732907427' ) ; -test( macro , '17' , '-51676101935731' , '-878493732907427' ) ; -test( macro , '-17' , '-51676101935731' , '878493732907427' ) ; +test( macro , '17' , '22' , '374' ) ; +test( macro , '-17' , '22' , '-374' ) ; +test( macro , '17' , '-22' , '-374' ) ; +test( macro , '-17' , '-22' , '374' ) ; +test( macro , '17' , '24' , '408' ) ; +test( macro , '-17' , '24' , '-408' ) ; +test( macro , '17' , '-24' , '-408' ) ; +test( macro , '-17' , '-24' , '408' ) ; +test( macro , '17' , '27' , '459' ) ; +test( macro , '-17' , '27' , '-459' ) ; +test( macro , '17' , '-27' , '-459' ) ; +test( macro , '-17' , '-27' , '459' ) ; +test( macro , '17' , '29' , '493' ) ; +test( macro , '-17' , '29' , '-493' ) ; +test( macro , '17' , '-29' , '-493' ) ; +test( macro , '-17' , '-29' , '493' ) ; +test( macro , '17' , '1234' , '20978' ) ; +test( macro , '-17' , '1234' , '-20978' ) ; +test( macro , '17' , '-1234' , '-20978' ) ; +test( macro , '-17' , '-1234' , '20978' ) ; +test( macro , '17' , '5678' , '96526' ) ; +test( macro , '-17' , '5678' , '-96526' ) ; +test( macro , '17' , '-5678' , '-96526' ) ; +test( macro , '-17' , '-5678' , '96526' ) ; test( macro , '17' , '1073741824' , '18253611008' ) ; test( macro , '-17' , '1073741824' , '-18253611008' ) ; test( macro , '17' , '-1073741824' , '-18253611008' ) ; test( macro , '-17' , '-1073741824' , '18253611008' ) ; +test( macro , '17' , '51676101935731' , '878493732907427' ) ; +test( macro , '-17' , '51676101935731' , '-878493732907427' ) ; +test( macro , '17' , '-51676101935731' , '-878493732907427' ) ; +test( macro , '-17' , '-51676101935731' , '878493732907427' ) ; test( macro , '17' , '717897987691852588770249' , '12204265790761494009094233' ) ; test( macro , '-17' , '717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '17' , '-717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '-17' , '-717897987691852588770249' , '12204265790761494009094233' ) ; -test( macro , '51676101935731' , '1' , '51676101935731' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; -test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; -test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; -test( macro , '51676101935731' , '17' , '878493732907427' ) ; -test( macro , '-51676101935731' , '17' , '-878493732907427' ) ; -test( macro , '51676101935731' , '-17' , '-878493732907427' ) ; -test( macro , '-51676101935731' , '-17' , '878493732907427' ) ; -test( macro , '51676101935731' , '51676101935731' , '2670419511272061205254504361' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-2670419511272061205254504361' ) ; -test( macro , '51676101935731' , '-51676101935731' , '-2670419511272061205254504361' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '2670419511272061205254504361' ) ; -test( macro , '51676101935731' , '1073741824' , '55486791949681734713344' ) ; -test( macro , '-51676101935731' , '1073741824' , '-55486791949681734713344' ) ; -test( macro , '51676101935731' , '-1073741824' , '-55486791949681734713344' ) ; -test( macro , '-51676101935731' , '-1073741824' , '55486791949681734713344' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333175287767861722867019' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '-1' , '-22' ) ; +test( macro , '-22' , '-1' , '22' ) ; +test( macro , '22' , '3' , '66' ) ; +test( macro , '-22' , '3' , '-66' ) ; +test( macro , '22' , '-3' , '-66' ) ; +test( macro , '-22' , '-3' , '66' ) ; +test( macro , '22' , '7' , '154' ) ; +test( macro , '-22' , '7' , '-154' ) ; +test( macro , '22' , '-7' , '-154' ) ; +test( macro , '-22' , '-7' , '154' ) ; +test( macro , '22' , '9' , '198' ) ; +test( macro , '-22' , '9' , '-198' ) ; +test( macro , '22' , '-9' , '-198' ) ; +test( macro , '-22' , '-9' , '198' ) ; +test( macro , '22' , '11' , '242' ) ; +test( macro , '-22' , '11' , '-242' ) ; +test( macro , '22' , '-11' , '-242' ) ; +test( macro , '-22' , '-11' , '242' ) ; +test( macro , '22' , '17' , '374' ) ; +test( macro , '-22' , '17' , '-374' ) ; +test( macro , '22' , '-17' , '-374' ) ; +test( macro , '-22' , '-17' , '374' ) ; +test( macro , '22' , '22' , '484' ) ; +test( macro , '-22' , '22' , '-484' ) ; +test( macro , '22' , '-22' , '-484' ) ; +test( macro , '-22' , '-22' , '484' ) ; +test( macro , '22' , '24' , '528' ) ; +test( macro , '-22' , '24' , '-528' ) ; +test( macro , '22' , '-24' , '-528' ) ; +test( macro , '-22' , '-24' , '528' ) ; +test( macro , '22' , '27' , '594' ) ; +test( macro , '-22' , '27' , '-594' ) ; +test( macro , '22' , '-27' , '-594' ) ; +test( macro , '-22' , '-27' , '594' ) ; +test( macro , '22' , '29' , '638' ) ; +test( macro , '-22' , '29' , '-638' ) ; +test( macro , '22' , '-29' , '-638' ) ; +test( macro , '-22' , '-29' , '638' ) ; +test( macro , '22' , '1234' , '27148' ) ; +test( macro , '-22' , '1234' , '-27148' ) ; +test( macro , '22' , '-1234' , '-27148' ) ; +test( macro , '-22' , '-1234' , '27148' ) ; +test( macro , '22' , '5678' , '124916' ) ; +test( macro , '-22' , '5678' , '-124916' ) ; +test( macro , '22' , '-5678' , '-124916' ) ; +test( macro , '-22' , '-5678' , '124916' ) ; +test( macro , '22' , '1073741824' , '23622320128' ) ; +test( macro , '-22' , '1073741824' , '-23622320128' ) ; +test( macro , '22' , '-1073741824' , '-23622320128' ) ; +test( macro , '-22' , '-1073741824' , '23622320128' ) ; +test( macro , '22' , '51676101935731' , '1136874242586082' ) ; +test( macro , '-22' , '51676101935731' , '-1136874242586082' ) ; +test( macro , '22' , '-51676101935731' , '-1136874242586082' ) ; +test( macro , '-22' , '-51676101935731' , '1136874242586082' ) ; +test( macro , '22' , '717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '-22' , '717897987691852588770249' , '-15793755729220756952945478' ) ; +test( macro , '22' , '-717897987691852588770249' , '-15793755729220756952945478' ) ; +test( macro , '-22' , '-717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '-1' , '-24' ) ; +test( macro , '-24' , '-1' , '24' ) ; +test( macro , '24' , '3' , '72' ) ; +test( macro , '-24' , '3' , '-72' ) ; +test( macro , '24' , '-3' , '-72' ) ; +test( macro , '-24' , '-3' , '72' ) ; +test( macro , '24' , '7' , '168' ) ; +test( macro , '-24' , '7' , '-168' ) ; +test( macro , '24' , '-7' , '-168' ) ; +test( macro , '-24' , '-7' , '168' ) ; +test( macro , '24' , '9' , '216' ) ; +test( macro , '-24' , '9' , '-216' ) ; +test( macro , '24' , '-9' , '-216' ) ; +test( macro , '-24' , '-9' , '216' ) ; +test( macro , '24' , '11' , '264' ) ; +test( macro , '-24' , '11' , '-264' ) ; +test( macro , '24' , '-11' , '-264' ) ; +test( macro , '-24' , '-11' , '264' ) ; +test( macro , '24' , '17' , '408' ) ; +test( macro , '-24' , '17' , '-408' ) ; +test( macro , '24' , '-17' , '-408' ) ; +test( macro , '-24' , '-17' , '408' ) ; +test( macro , '24' , '22' , '528' ) ; +test( macro , '-24' , '22' , '-528' ) ; +test( macro , '24' , '-22' , '-528' ) ; +test( macro , '-24' , '-22' , '528' ) ; +test( macro , '24' , '24' , '576' ) ; +test( macro , '-24' , '24' , '-576' ) ; +test( macro , '24' , '-24' , '-576' ) ; +test( macro , '-24' , '-24' , '576' ) ; +test( macro , '24' , '27' , '648' ) ; +test( macro , '-24' , '27' , '-648' ) ; +test( macro , '24' , '-27' , '-648' ) ; +test( macro , '-24' , '-27' , '648' ) ; +test( macro , '24' , '29' , '696' ) ; +test( macro , '-24' , '29' , '-696' ) ; +test( macro , '24' , '-29' , '-696' ) ; +test( macro , '-24' , '-29' , '696' ) ; +test( macro , '24' , '1234' , '29616' ) ; +test( macro , '-24' , '1234' , '-29616' ) ; +test( macro , '24' , '-1234' , '-29616' ) ; +test( macro , '-24' , '-1234' , '29616' ) ; +test( macro , '24' , '5678' , '136272' ) ; +test( macro , '-24' , '5678' , '-136272' ) ; +test( macro , '24' , '-5678' , '-136272' ) ; +test( macro , '-24' , '-5678' , '136272' ) ; +test( macro , '24' , '1073741824' , '25769803776' ) ; +test( macro , '-24' , '1073741824' , '-25769803776' ) ; +test( macro , '24' , '-1073741824' , '-25769803776' ) ; +test( macro , '-24' , '-1073741824' , '25769803776' ) ; +test( macro , '24' , '51676101935731' , '1240226446457544' ) ; +test( macro , '-24' , '51676101935731' , '-1240226446457544' ) ; +test( macro , '24' , '-51676101935731' , '-1240226446457544' ) ; +test( macro , '-24' , '-51676101935731' , '1240226446457544' ) ; +test( macro , '24' , '717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '-24' , '717897987691852588770249' , '-17229551704604462130485976' ) ; +test( macro , '24' , '-717897987691852588770249' , '-17229551704604462130485976' ) ; +test( macro , '-24' , '-717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '-1' , '-27' ) ; +test( macro , '-27' , '-1' , '27' ) ; +test( macro , '27' , '3' , '81' ) ; +test( macro , '-27' , '3' , '-81' ) ; +test( macro , '27' , '-3' , '-81' ) ; +test( macro , '-27' , '-3' , '81' ) ; +test( macro , '27' , '7' , '189' ) ; +test( macro , '-27' , '7' , '-189' ) ; +test( macro , '27' , '-7' , '-189' ) ; +test( macro , '-27' , '-7' , '189' ) ; +test( macro , '27' , '9' , '243' ) ; +test( macro , '-27' , '9' , '-243' ) ; +test( macro , '27' , '-9' , '-243' ) ; +test( macro , '-27' , '-9' , '243' ) ; +test( macro , '27' , '11' , '297' ) ; +test( macro , '-27' , '11' , '-297' ) ; +test( macro , '27' , '-11' , '-297' ) ; +test( macro , '-27' , '-11' , '297' ) ; +test( macro , '27' , '17' , '459' ) ; +test( macro , '-27' , '17' , '-459' ) ; +test( macro , '27' , '-17' , '-459' ) ; +test( macro , '-27' , '-17' , '459' ) ; +test( macro , '27' , '22' , '594' ) ; +test( macro , '-27' , '22' , '-594' ) ; +test( macro , '27' , '-22' , '-594' ) ; +test( macro , '-27' , '-22' , '594' ) ; +test( macro , '27' , '24' , '648' ) ; +test( macro , '-27' , '24' , '-648' ) ; +test( macro , '27' , '-24' , '-648' ) ; +test( macro , '-27' , '-24' , '648' ) ; +test( macro , '27' , '27' , '729' ) ; +test( macro , '-27' , '27' , '-729' ) ; +test( macro , '27' , '-27' , '-729' ) ; +test( macro , '-27' , '-27' , '729' ) ; +test( macro , '27' , '29' , '783' ) ; +test( macro , '-27' , '29' , '-783' ) ; +test( macro , '27' , '-29' , '-783' ) ; +test( macro , '-27' , '-29' , '783' ) ; +test( macro , '27' , '1234' , '33318' ) ; +test( macro , '-27' , '1234' , '-33318' ) ; +test( macro , '27' , '-1234' , '-33318' ) ; +test( macro , '-27' , '-1234' , '33318' ) ; +test( macro , '27' , '5678' , '153306' ) ; +test( macro , '-27' , '5678' , '-153306' ) ; +test( macro , '27' , '-5678' , '-153306' ) ; +test( macro , '-27' , '-5678' , '153306' ) ; +test( macro , '27' , '1073741824' , '28991029248' ) ; +test( macro , '-27' , '1073741824' , '-28991029248' ) ; +test( macro , '27' , '-1073741824' , '-28991029248' ) ; +test( macro , '-27' , '-1073741824' , '28991029248' ) ; +test( macro , '27' , '51676101935731' , '1395254752264737' ) ; +test( macro , '-27' , '51676101935731' , '-1395254752264737' ) ; +test( macro , '27' , '-51676101935731' , '-1395254752264737' ) ; +test( macro , '-27' , '-51676101935731' , '1395254752264737' ) ; +test( macro , '27' , '717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '-27' , '717897987691852588770249' , '-19383245667680019896796723' ) ; +test( macro , '27' , '-717897987691852588770249' , '-19383245667680019896796723' ) ; +test( macro , '-27' , '-717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '-1' , '-29' ) ; +test( macro , '-29' , '-1' , '29' ) ; +test( macro , '29' , '3' , '87' ) ; +test( macro , '-29' , '3' , '-87' ) ; +test( macro , '29' , '-3' , '-87' ) ; +test( macro , '-29' , '-3' , '87' ) ; +test( macro , '29' , '7' , '203' ) ; +test( macro , '-29' , '7' , '-203' ) ; +test( macro , '29' , '-7' , '-203' ) ; +test( macro , '-29' , '-7' , '203' ) ; +test( macro , '29' , '9' , '261' ) ; +test( macro , '-29' , '9' , '-261' ) ; +test( macro , '29' , '-9' , '-261' ) ; +test( macro , '-29' , '-9' , '261' ) ; +test( macro , '29' , '11' , '319' ) ; +test( macro , '-29' , '11' , '-319' ) ; +test( macro , '29' , '-11' , '-319' ) ; +test( macro , '-29' , '-11' , '319' ) ; +test( macro , '29' , '17' , '493' ) ; +test( macro , '-29' , '17' , '-493' ) ; +test( macro , '29' , '-17' , '-493' ) ; +test( macro , '-29' , '-17' , '493' ) ; +test( macro , '29' , '22' , '638' ) ; +test( macro , '-29' , '22' , '-638' ) ; +test( macro , '29' , '-22' , '-638' ) ; +test( macro , '-29' , '-22' , '638' ) ; +test( macro , '29' , '24' , '696' ) ; +test( macro , '-29' , '24' , '-696' ) ; +test( macro , '29' , '-24' , '-696' ) ; +test( macro , '-29' , '-24' , '696' ) ; +test( macro , '29' , '27' , '783' ) ; +test( macro , '-29' , '27' , '-783' ) ; +test( macro , '29' , '-27' , '-783' ) ; +test( macro , '-29' , '-27' , '783' ) ; +test( macro , '29' , '29' , '841' ) ; +test( macro , '-29' , '29' , '-841' ) ; +test( macro , '29' , '-29' , '-841' ) ; +test( macro , '-29' , '-29' , '841' ) ; +test( macro , '29' , '1234' , '35786' ) ; +test( macro , '-29' , '1234' , '-35786' ) ; +test( macro , '29' , '-1234' , '-35786' ) ; +test( macro , '-29' , '-1234' , '35786' ) ; +test( macro , '29' , '5678' , '164662' ) ; +test( macro , '-29' , '5678' , '-164662' ) ; +test( macro , '29' , '-5678' , '-164662' ) ; +test( macro , '-29' , '-5678' , '164662' ) ; +test( macro , '29' , '1073741824' , '31138512896' ) ; +test( macro , '-29' , '1073741824' , '-31138512896' ) ; +test( macro , '29' , '-1073741824' , '-31138512896' ) ; +test( macro , '-29' , '-1073741824' , '31138512896' ) ; +test( macro , '29' , '51676101935731' , '1498606956136199' ) ; +test( macro , '-29' , '51676101935731' , '-1498606956136199' ) ; +test( macro , '29' , '-51676101935731' , '-1498606956136199' ) ; +test( macro , '-29' , '-51676101935731' , '1498606956136199' ) ; +test( macro , '29' , '717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '-29' , '717897987691852588770249' , '-20819041643063725074337221' ) ; +test( macro , '29' , '-717897987691852588770249' , '-20819041643063725074337221' ) ; +test( macro , '-29' , '-717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '-1' , '-1234' ) ; +test( macro , '-1234' , '-1' , '1234' ) ; +test( macro , '1234' , '3' , '3702' ) ; +test( macro , '-1234' , '3' , '-3702' ) ; +test( macro , '1234' , '-3' , '-3702' ) ; +test( macro , '-1234' , '-3' , '3702' ) ; +test( macro , '1234' , '7' , '8638' ) ; +test( macro , '-1234' , '7' , '-8638' ) ; +test( macro , '1234' , '-7' , '-8638' ) ; +test( macro , '-1234' , '-7' , '8638' ) ; +test( macro , '1234' , '9' , '11106' ) ; +test( macro , '-1234' , '9' , '-11106' ) ; +test( macro , '1234' , '-9' , '-11106' ) ; +test( macro , '-1234' , '-9' , '11106' ) ; +test( macro , '1234' , '11' , '13574' ) ; +test( macro , '-1234' , '11' , '-13574' ) ; +test( macro , '1234' , '-11' , '-13574' ) ; +test( macro , '-1234' , '-11' , '13574' ) ; +test( macro , '1234' , '17' , '20978' ) ; +test( macro , '-1234' , '17' , '-20978' ) ; +test( macro , '1234' , '-17' , '-20978' ) ; +test( macro , '-1234' , '-17' , '20978' ) ; +test( macro , '1234' , '22' , '27148' ) ; +test( macro , '-1234' , '22' , '-27148' ) ; +test( macro , '1234' , '-22' , '-27148' ) ; +test( macro , '-1234' , '-22' , '27148' ) ; +test( macro , '1234' , '24' , '29616' ) ; +test( macro , '-1234' , '24' , '-29616' ) ; +test( macro , '1234' , '-24' , '-29616' ) ; +test( macro , '-1234' , '-24' , '29616' ) ; +test( macro , '1234' , '27' , '33318' ) ; +test( macro , '-1234' , '27' , '-33318' ) ; +test( macro , '1234' , '-27' , '-33318' ) ; +test( macro , '-1234' , '-27' , '33318' ) ; +test( macro , '1234' , '29' , '35786' ) ; +test( macro , '-1234' , '29' , '-35786' ) ; +test( macro , '1234' , '-29' , '-35786' ) ; +test( macro , '-1234' , '-29' , '35786' ) ; +test( macro , '1234' , '1234' , '1522756' ) ; +test( macro , '-1234' , '1234' , '-1522756' ) ; +test( macro , '1234' , '-1234' , '-1522756' ) ; +test( macro , '-1234' , '-1234' , '1522756' ) ; +test( macro , '1234' , '5678' , '7006652' ) ; +test( macro , '-1234' , '5678' , '-7006652' ) ; +test( macro , '1234' , '-5678' , '-7006652' ) ; +test( macro , '-1234' , '-5678' , '7006652' ) ; +test( macro , '1234' , '1073741824' , '1324997410816' ) ; +test( macro , '-1234' , '1073741824' , '-1324997410816' ) ; +test( macro , '1234' , '-1073741824' , '-1324997410816' ) ; +test( macro , '-1234' , '-1073741824' , '1324997410816' ) ; +test( macro , '1234' , '51676101935731' , '63768309788692054' ) ; +test( macro , '-1234' , '51676101935731' , '-63768309788692054' ) ; +test( macro , '1234' , '-51676101935731' , '-63768309788692054' ) ; +test( macro , '-1234' , '-51676101935731' , '63768309788692054' ) ; +test( macro , '1234' , '717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-885886116811746094542487266' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-885886116811746094542487266' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '-1' , '-5678' ) ; +test( macro , '-5678' , '-1' , '5678' ) ; +test( macro , '5678' , '3' , '17034' ) ; +test( macro , '-5678' , '3' , '-17034' ) ; +test( macro , '5678' , '-3' , '-17034' ) ; +test( macro , '-5678' , '-3' , '17034' ) ; +test( macro , '5678' , '7' , '39746' ) ; +test( macro , '-5678' , '7' , '-39746' ) ; +test( macro , '5678' , '-7' , '-39746' ) ; +test( macro , '-5678' , '-7' , '39746' ) ; +test( macro , '5678' , '9' , '51102' ) ; +test( macro , '-5678' , '9' , '-51102' ) ; +test( macro , '5678' , '-9' , '-51102' ) ; +test( macro , '-5678' , '-9' , '51102' ) ; +test( macro , '5678' , '11' , '62458' ) ; +test( macro , '-5678' , '11' , '-62458' ) ; +test( macro , '5678' , '-11' , '-62458' ) ; +test( macro , '-5678' , '-11' , '62458' ) ; +test( macro , '5678' , '17' , '96526' ) ; +test( macro , '-5678' , '17' , '-96526' ) ; +test( macro , '5678' , '-17' , '-96526' ) ; +test( macro , '-5678' , '-17' , '96526' ) ; +test( macro , '5678' , '22' , '124916' ) ; +test( macro , '-5678' , '22' , '-124916' ) ; +test( macro , '5678' , '-22' , '-124916' ) ; +test( macro , '-5678' , '-22' , '124916' ) ; +test( macro , '5678' , '24' , '136272' ) ; +test( macro , '-5678' , '24' , '-136272' ) ; +test( macro , '5678' , '-24' , '-136272' ) ; +test( macro , '-5678' , '-24' , '136272' ) ; +test( macro , '5678' , '27' , '153306' ) ; +test( macro , '-5678' , '27' , '-153306' ) ; +test( macro , '5678' , '-27' , '-153306' ) ; +test( macro , '-5678' , '-27' , '153306' ) ; +test( macro , '5678' , '29' , '164662' ) ; +test( macro , '-5678' , '29' , '-164662' ) ; +test( macro , '5678' , '-29' , '-164662' ) ; +test( macro , '-5678' , '-29' , '164662' ) ; +test( macro , '5678' , '1234' , '7006652' ) ; +test( macro , '-5678' , '1234' , '-7006652' ) ; +test( macro , '5678' , '-1234' , '-7006652' ) ; +test( macro , '-5678' , '-1234' , '7006652' ) ; +test( macro , '5678' , '5678' , '32239684' ) ; +test( macro , '-5678' , '5678' , '-32239684' ) ; +test( macro , '5678' , '-5678' , '-32239684' ) ; +test( macro , '-5678' , '-5678' , '32239684' ) ; +test( macro , '5678' , '1073741824' , '6096706076672' ) ; +test( macro , '-5678' , '1073741824' , '-6096706076672' ) ; +test( macro , '5678' , '-1073741824' , '-6096706076672' ) ; +test( macro , '-5678' , '-1073741824' , '6096706076672' ) ; +test( macro , '5678' , '51676101935731' , '293416906791080618' ) ; +test( macro , '-5678' , '51676101935731' , '-293416906791080618' ) ; +test( macro , '5678' , '-51676101935731' , '-293416906791080618' ) ; +test( macro , '-5678' , '-51676101935731' , '293416906791080618' ) ; +test( macro , '5678' , '717897987691852588770249' , '4076224774114338999037473822' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-4076224774114338999037473822' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-4076224774114338999037473822' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '4076224774114338999037473822' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; test( macro , '-1073741824' , '-1' , '1073741824' ) ; +test( macro , '1073741824' , '3' , '3221225472' ) ; +test( macro , '-1073741824' , '3' , '-3221225472' ) ; +test( macro , '1073741824' , '-3' , '-3221225472' ) ; +test( macro , '-1073741824' , '-3' , '3221225472' ) ; +test( macro , '1073741824' , '7' , '7516192768' ) ; +test( macro , '-1073741824' , '7' , '-7516192768' ) ; +test( macro , '1073741824' , '-7' , '-7516192768' ) ; +test( macro , '-1073741824' , '-7' , '7516192768' ) ; +test( macro , '1073741824' , '9' , '9663676416' ) ; +test( macro , '-1073741824' , '9' , '-9663676416' ) ; +test( macro , '1073741824' , '-9' , '-9663676416' ) ; +test( macro , '-1073741824' , '-9' , '9663676416' ) ; +test( macro , '1073741824' , '11' , '11811160064' ) ; +test( macro , '-1073741824' , '11' , '-11811160064' ) ; +test( macro , '1073741824' , '-11' , '-11811160064' ) ; +test( macro , '-1073741824' , '-11' , '11811160064' ) ; test( macro , '1073741824' , '17' , '18253611008' ) ; test( macro , '-1073741824' , '17' , '-18253611008' ) ; test( macro , '1073741824' , '-17' , '-18253611008' ) ; test( macro , '-1073741824' , '-17' , '18253611008' ) ; -test( macro , '1073741824' , '51676101935731' , '55486791949681734713344' ) ; -test( macro , '-1073741824' , '51676101935731' , '-55486791949681734713344' ) ; -test( macro , '1073741824' , '-51676101935731' , '-55486791949681734713344' ) ; -test( macro , '-1073741824' , '-51676101935731' , '55486791949681734713344' ) ; +test( macro , '1073741824' , '22' , '23622320128' ) ; +test( macro , '-1073741824' , '22' , '-23622320128' ) ; +test( macro , '1073741824' , '-22' , '-23622320128' ) ; +test( macro , '-1073741824' , '-22' , '23622320128' ) ; +test( macro , '1073741824' , '24' , '25769803776' ) ; +test( macro , '-1073741824' , '24' , '-25769803776' ) ; +test( macro , '1073741824' , '-24' , '-25769803776' ) ; +test( macro , '-1073741824' , '-24' , '25769803776' ) ; +test( macro , '1073741824' , '27' , '28991029248' ) ; +test( macro , '-1073741824' , '27' , '-28991029248' ) ; +test( macro , '1073741824' , '-27' , '-28991029248' ) ; +test( macro , '-1073741824' , '-27' , '28991029248' ) ; +test( macro , '1073741824' , '29' , '31138512896' ) ; +test( macro , '-1073741824' , '29' , '-31138512896' ) ; +test( macro , '1073741824' , '-29' , '-31138512896' ) ; +test( macro , '-1073741824' , '-29' , '31138512896' ) ; +test( macro , '1073741824' , '1234' , '1324997410816' ) ; +test( macro , '-1073741824' , '1234' , '-1324997410816' ) ; +test( macro , '1073741824' , '-1234' , '-1324997410816' ) ; +test( macro , '-1073741824' , '-1234' , '1324997410816' ) ; +test( macro , '1073741824' , '5678' , '6096706076672' ) ; +test( macro , '-1073741824' , '5678' , '-6096706076672' ) ; +test( macro , '1073741824' , '-5678' , '-6096706076672' ) ; +test( macro , '-1073741824' , '-5678' , '6096706076672' ) ; test( macro , '1073741824' , '1073741824' , '1152921504606846976' ) ; test( macro , '-1073741824' , '1073741824' , '-1152921504606846976' ) ; test( macro , '1073741824' , '-1073741824' , '-1152921504606846976' ) ; test( macro , '-1073741824' , '-1073741824' , '1152921504606846976' ) ; +test( macro , '1073741824' , '51676101935731' , '55486791949681734713344' ) ; +test( macro , '-1073741824' , '51676101935731' , '-55486791949681734713344' ) ; +test( macro , '1073741824' , '-51676101935731' , '-55486791949681734713344' ) ; +test( macro , '-1073741824' , '-51676101935731' , '55486791949681734713344' ) ; test( macro , '1073741824' , '717897987691852588770249' , '770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '770837094750179348605289078194176' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; +test( macro , '51676101935731' , '3' , '155028305807193' ) ; +test( macro , '-51676101935731' , '3' , '-155028305807193' ) ; +test( macro , '51676101935731' , '-3' , '-155028305807193' ) ; +test( macro , '-51676101935731' , '-3' , '155028305807193' ) ; +test( macro , '51676101935731' , '7' , '361732713550117' ) ; +test( macro , '-51676101935731' , '7' , '-361732713550117' ) ; +test( macro , '51676101935731' , '-7' , '-361732713550117' ) ; +test( macro , '-51676101935731' , '-7' , '361732713550117' ) ; +test( macro , '51676101935731' , '9' , '465084917421579' ) ; +test( macro , '-51676101935731' , '9' , '-465084917421579' ) ; +test( macro , '51676101935731' , '-9' , '-465084917421579' ) ; +test( macro , '-51676101935731' , '-9' , '465084917421579' ) ; +test( macro , '51676101935731' , '11' , '568437121293041' ) ; +test( macro , '-51676101935731' , '11' , '-568437121293041' ) ; +test( macro , '51676101935731' , '-11' , '-568437121293041' ) ; +test( macro , '-51676101935731' , '-11' , '568437121293041' ) ; +test( macro , '51676101935731' , '17' , '878493732907427' ) ; +test( macro , '-51676101935731' , '17' , '-878493732907427' ) ; +test( macro , '51676101935731' , '-17' , '-878493732907427' ) ; +test( macro , '-51676101935731' , '-17' , '878493732907427' ) ; +test( macro , '51676101935731' , '22' , '1136874242586082' ) ; +test( macro , '-51676101935731' , '22' , '-1136874242586082' ) ; +test( macro , '51676101935731' , '-22' , '-1136874242586082' ) ; +test( macro , '-51676101935731' , '-22' , '1136874242586082' ) ; +test( macro , '51676101935731' , '24' , '1240226446457544' ) ; +test( macro , '-51676101935731' , '24' , '-1240226446457544' ) ; +test( macro , '51676101935731' , '-24' , '-1240226446457544' ) ; +test( macro , '-51676101935731' , '-24' , '1240226446457544' ) ; +test( macro , '51676101935731' , '27' , '1395254752264737' ) ; +test( macro , '-51676101935731' , '27' , '-1395254752264737' ) ; +test( macro , '51676101935731' , '-27' , '-1395254752264737' ) ; +test( macro , '-51676101935731' , '-27' , '1395254752264737' ) ; +test( macro , '51676101935731' , '29' , '1498606956136199' ) ; +test( macro , '-51676101935731' , '29' , '-1498606956136199' ) ; +test( macro , '51676101935731' , '-29' , '-1498606956136199' ) ; +test( macro , '-51676101935731' , '-29' , '1498606956136199' ) ; +test( macro , '51676101935731' , '1234' , '63768309788692054' ) ; +test( macro , '-51676101935731' , '1234' , '-63768309788692054' ) ; +test( macro , '51676101935731' , '-1234' , '-63768309788692054' ) ; +test( macro , '-51676101935731' , '-1234' , '63768309788692054' ) ; +test( macro , '51676101935731' , '5678' , '293416906791080618' ) ; +test( macro , '-51676101935731' , '5678' , '-293416906791080618' ) ; +test( macro , '51676101935731' , '-5678' , '-293416906791080618' ) ; +test( macro , '-51676101935731' , '-5678' , '293416906791080618' ) ; +test( macro , '51676101935731' , '1073741824' , '55486791949681734713344' ) ; +test( macro , '-51676101935731' , '1073741824' , '-55486791949681734713344' ) ; +test( macro , '51676101935731' , '-1073741824' , '-55486791949681734713344' ) ; +test( macro , '-51676101935731' , '-1073741824' , '55486791949681734713344' ) ; +test( macro , '51676101935731' , '51676101935731' , '2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-2670419511272061205254504361' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '2670419511272061205254504361' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , '3' , '-2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , '-3' , '-2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , '-3' , '2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , '7' , '5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , '7' , '-5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , '-7' , '-5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , '-7' , '5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , '9' , '6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , '9' , '-6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , '-9' , '-6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , '-9' , '6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , '11' , '7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , '11' , '-7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , '-11' , '-7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , '-11' , '7896877864610378476472739' ) ; test( macro , '717897987691852588770249' , '17' , '12204265790761494009094233' ) ; test( macro , '-717897987691852588770249' , '17' , '-12204265790761494009094233' ) ; test( macro , '717897987691852588770249' , '-17' , '-12204265790761494009094233' ) ; test( macro , '-717897987691852588770249' , '-17' , '12204265790761494009094233' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '37098169591420333175287767861722867019' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-37098169591420333175287767861722867019' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-37098169591420333175287767861722867019' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '22' , '15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , '22' , '-15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , '-22' , '-15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , '-22' , '15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , '24' , '17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , '24' , '-17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , '-24' , '-17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , '-24' , '17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , '27' , '19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , '27' , '-19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , '-27' , '-19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , '-27' , '19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , '29' , '20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , '29' , '-20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , '-29' , '-20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , '-29' , '20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , '1234' , '885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , '5678' , '4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '4076224774114338999037473822' ) ; test( macro , '717897987691852588770249' , '1073741824' , '770837094750179348605289078194176' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-770837094750179348605289078194176' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-770837094750179348605289078194176' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '37098169591420333175287767861722867019' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '515377520732011331036461129765621272702107522001' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-515377520732011331036461129765621272702107522001' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-515377520732011331036461129765621272702107522001' ) ; diff --git a/test/src/integer/arithmetic/imuln.js b/test/src/integer/arithmetic/imuln.js new file mode 100644 index 0000000..b88cab9 --- /dev/null +++ b/test/src/integer/arithmetic/imuln.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , imuln } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = imuln( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `imuln(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , -1 , '-1' ) ; +test( macro , '-1' , -1 , '1' ) ; +test( macro , '1' , 3 , '3' ) ; +test( macro , '-1' , 3 , '-3' ) ; +test( macro , '1' , -3 , '-3' ) ; +test( macro , '-1' , -3 , '3' ) ; +test( macro , '1' , 7 , '7' ) ; +test( macro , '-1' , 7 , '-7' ) ; +test( macro , '1' , -7 , '-7' ) ; +test( macro , '-1' , -7 , '7' ) ; +test( macro , '1' , 9 , '9' ) ; +test( macro , '-1' , 9 , '-9' ) ; +test( macro , '1' , -9 , '-9' ) ; +test( macro , '-1' , -9 , '9' ) ; +test( macro , '1' , 11 , '11' ) ; +test( macro , '-1' , 11 , '-11' ) ; +test( macro , '1' , -11 , '-11' ) ; +test( macro , '-1' , -11 , '11' ) ; +test( macro , '1' , 17 , '17' ) ; +test( macro , '-1' , 17 , '-17' ) ; +test( macro , '1' , -17 , '-17' ) ; +test( macro , '-1' , -17 , '17' ) ; +test( macro , '1' , 22 , '22' ) ; +test( macro , '-1' , 22 , '-22' ) ; +test( macro , '1' , -22 , '-22' ) ; +test( macro , '-1' , -22 , '22' ) ; +test( macro , '1' , 24 , '24' ) ; +test( macro , '-1' , 24 , '-24' ) ; +test( macro , '1' , -24 , '-24' ) ; +test( macro , '-1' , -24 , '24' ) ; +test( macro , '1' , 27 , '27' ) ; +test( macro , '-1' , 27 , '-27' ) ; +test( macro , '1' , -27 , '-27' ) ; +test( macro , '-1' , -27 , '27' ) ; +test( macro , '1' , 29 , '29' ) ; +test( macro , '-1' , 29 , '-29' ) ; +test( macro , '1' , -29 , '-29' ) ; +test( macro , '-1' , -29 , '29' ) ; +test( macro , '1' , 1234 , '1234' ) ; +test( macro , '-1' , 1234 , '-1234' ) ; +test( macro , '1' , -1234 , '-1234' ) ; +test( macro , '-1' , -1234 , '1234' ) ; +test( macro , '1' , 5678 , '5678' ) ; +test( macro , '-1' , 5678 , '-5678' ) ; +test( macro , '1' , -5678 , '-5678' ) ; +test( macro , '-1' , -5678 , '5678' ) ; +test( macro , '1' , 1073741824 , '1073741824' ) ; +test( macro , '-1' , 1073741824 , '-1073741824' ) ; +test( macro , '1' , -1073741824 , '-1073741824' ) ; +test( macro , '-1' , -1073741824 , '1073741824' ) ; +test( macro , '1' , 51676101935731 , '51676101935731' ) ; +test( macro , '-1' , 51676101935731 , '-51676101935731' ) ; +test( macro , '1' , -51676101935731 , '-51676101935731' ) ; +test( macro , '-1' , -51676101935731 , '51676101935731' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , -1 , '-3' ) ; +test( macro , '-3' , -1 , '3' ) ; +test( macro , '3' , 3 , '9' ) ; +test( macro , '-3' , 3 , '-9' ) ; +test( macro , '3' , -3 , '-9' ) ; +test( macro , '-3' , -3 , '9' ) ; +test( macro , '3' , 7 , '21' ) ; +test( macro , '-3' , 7 , '-21' ) ; +test( macro , '3' , -7 , '-21' ) ; +test( macro , '-3' , -7 , '21' ) ; +test( macro , '3' , 9 , '27' ) ; +test( macro , '-3' , 9 , '-27' ) ; +test( macro , '3' , -9 , '-27' ) ; +test( macro , '-3' , -9 , '27' ) ; +test( macro , '3' , 11 , '33' ) ; +test( macro , '-3' , 11 , '-33' ) ; +test( macro , '3' , -11 , '-33' ) ; +test( macro , '-3' , -11 , '33' ) ; +test( macro , '3' , 17 , '51' ) ; +test( macro , '-3' , 17 , '-51' ) ; +test( macro , '3' , -17 , '-51' ) ; +test( macro , '-3' , -17 , '51' ) ; +test( macro , '3' , 22 , '66' ) ; +test( macro , '-3' , 22 , '-66' ) ; +test( macro , '3' , -22 , '-66' ) ; +test( macro , '-3' , -22 , '66' ) ; +test( macro , '3' , 24 , '72' ) ; +test( macro , '-3' , 24 , '-72' ) ; +test( macro , '3' , -24 , '-72' ) ; +test( macro , '-3' , -24 , '72' ) ; +test( macro , '3' , 27 , '81' ) ; +test( macro , '-3' , 27 , '-81' ) ; +test( macro , '3' , -27 , '-81' ) ; +test( macro , '-3' , -27 , '81' ) ; +test( macro , '3' , 29 , '87' ) ; +test( macro , '-3' , 29 , '-87' ) ; +test( macro , '3' , -29 , '-87' ) ; +test( macro , '-3' , -29 , '87' ) ; +test( macro , '3' , 1234 , '3702' ) ; +test( macro , '-3' , 1234 , '-3702' ) ; +test( macro , '3' , -1234 , '-3702' ) ; +test( macro , '-3' , -1234 , '3702' ) ; +test( macro , '3' , 5678 , '17034' ) ; +test( macro , '-3' , 5678 , '-17034' ) ; +test( macro , '3' , -5678 , '-17034' ) ; +test( macro , '-3' , -5678 , '17034' ) ; +test( macro , '3' , 1073741824 , '3221225472' ) ; +test( macro , '-3' , 1073741824 , '-3221225472' ) ; +test( macro , '3' , -1073741824 , '-3221225472' ) ; +test( macro , '-3' , -1073741824 , '3221225472' ) ; +test( macro , '3' , 51676101935731 , '155028305807193' ) ; +test( macro , '-3' , 51676101935731 , '-155028305807193' ) ; +test( macro , '3' , -51676101935731 , '-155028305807193' ) ; +test( macro , '-3' , -51676101935731 , '155028305807193' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , -1 , '-7' ) ; +test( macro , '-7' , -1 , '7' ) ; +test( macro , '7' , 3 , '21' ) ; +test( macro , '-7' , 3 , '-21' ) ; +test( macro , '7' , -3 , '-21' ) ; +test( macro , '-7' , -3 , '21' ) ; +test( macro , '7' , 7 , '49' ) ; +test( macro , '-7' , 7 , '-49' ) ; +test( macro , '7' , -7 , '-49' ) ; +test( macro , '-7' , -7 , '49' ) ; +test( macro , '7' , 9 , '63' ) ; +test( macro , '-7' , 9 , '-63' ) ; +test( macro , '7' , -9 , '-63' ) ; +test( macro , '-7' , -9 , '63' ) ; +test( macro , '7' , 11 , '77' ) ; +test( macro , '-7' , 11 , '-77' ) ; +test( macro , '7' , -11 , '-77' ) ; +test( macro , '-7' , -11 , '77' ) ; +test( macro , '7' , 17 , '119' ) ; +test( macro , '-7' , 17 , '-119' ) ; +test( macro , '7' , -17 , '-119' ) ; +test( macro , '-7' , -17 , '119' ) ; +test( macro , '7' , 22 , '154' ) ; +test( macro , '-7' , 22 , '-154' ) ; +test( macro , '7' , -22 , '-154' ) ; +test( macro , '-7' , -22 , '154' ) ; +test( macro , '7' , 24 , '168' ) ; +test( macro , '-7' , 24 , '-168' ) ; +test( macro , '7' , -24 , '-168' ) ; +test( macro , '-7' , -24 , '168' ) ; +test( macro , '7' , 27 , '189' ) ; +test( macro , '-7' , 27 , '-189' ) ; +test( macro , '7' , -27 , '-189' ) ; +test( macro , '-7' , -27 , '189' ) ; +test( macro , '7' , 29 , '203' ) ; +test( macro , '-7' , 29 , '-203' ) ; +test( macro , '7' , -29 , '-203' ) ; +test( macro , '-7' , -29 , '203' ) ; +test( macro , '7' , 1234 , '8638' ) ; +test( macro , '-7' , 1234 , '-8638' ) ; +test( macro , '7' , -1234 , '-8638' ) ; +test( macro , '-7' , -1234 , '8638' ) ; +test( macro , '7' , 5678 , '39746' ) ; +test( macro , '-7' , 5678 , '-39746' ) ; +test( macro , '7' , -5678 , '-39746' ) ; +test( macro , '-7' , -5678 , '39746' ) ; +test( macro , '7' , 1073741824 , '7516192768' ) ; +test( macro , '-7' , 1073741824 , '-7516192768' ) ; +test( macro , '7' , -1073741824 , '-7516192768' ) ; +test( macro , '-7' , -1073741824 , '7516192768' ) ; +test( macro , '7' , 51676101935731 , '361732713550117' ) ; +test( macro , '-7' , 51676101935731 , '-361732713550117' ) ; +test( macro , '7' , -51676101935731 , '-361732713550117' ) ; +test( macro , '-7' , -51676101935731 , '361732713550117' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , -1 , '-9' ) ; +test( macro , '-9' , -1 , '9' ) ; +test( macro , '9' , 3 , '27' ) ; +test( macro , '-9' , 3 , '-27' ) ; +test( macro , '9' , -3 , '-27' ) ; +test( macro , '-9' , -3 , '27' ) ; +test( macro , '9' , 7 , '63' ) ; +test( macro , '-9' , 7 , '-63' ) ; +test( macro , '9' , -7 , '-63' ) ; +test( macro , '-9' , -7 , '63' ) ; +test( macro , '9' , 9 , '81' ) ; +test( macro , '-9' , 9 , '-81' ) ; +test( macro , '9' , -9 , '-81' ) ; +test( macro , '-9' , -9 , '81' ) ; +test( macro , '9' , 11 , '99' ) ; +test( macro , '-9' , 11 , '-99' ) ; +test( macro , '9' , -11 , '-99' ) ; +test( macro , '-9' , -11 , '99' ) ; +test( macro , '9' , 17 , '153' ) ; +test( macro , '-9' , 17 , '-153' ) ; +test( macro , '9' , -17 , '-153' ) ; +test( macro , '-9' , -17 , '153' ) ; +test( macro , '9' , 22 , '198' ) ; +test( macro , '-9' , 22 , '-198' ) ; +test( macro , '9' , -22 , '-198' ) ; +test( macro , '-9' , -22 , '198' ) ; +test( macro , '9' , 24 , '216' ) ; +test( macro , '-9' , 24 , '-216' ) ; +test( macro , '9' , -24 , '-216' ) ; +test( macro , '-9' , -24 , '216' ) ; +test( macro , '9' , 27 , '243' ) ; +test( macro , '-9' , 27 , '-243' ) ; +test( macro , '9' , -27 , '-243' ) ; +test( macro , '-9' , -27 , '243' ) ; +test( macro , '9' , 29 , '261' ) ; +test( macro , '-9' , 29 , '-261' ) ; +test( macro , '9' , -29 , '-261' ) ; +test( macro , '-9' , -29 , '261' ) ; +test( macro , '9' , 1234 , '11106' ) ; +test( macro , '-9' , 1234 , '-11106' ) ; +test( macro , '9' , -1234 , '-11106' ) ; +test( macro , '-9' , -1234 , '11106' ) ; +test( macro , '9' , 5678 , '51102' ) ; +test( macro , '-9' , 5678 , '-51102' ) ; +test( macro , '9' , -5678 , '-51102' ) ; +test( macro , '-9' , -5678 , '51102' ) ; +test( macro , '9' , 1073741824 , '9663676416' ) ; +test( macro , '-9' , 1073741824 , '-9663676416' ) ; +test( macro , '9' , -1073741824 , '-9663676416' ) ; +test( macro , '-9' , -1073741824 , '9663676416' ) ; +test( macro , '9' , 51676101935731 , '465084917421579' ) ; +test( macro , '-9' , 51676101935731 , '-465084917421579' ) ; +test( macro , '9' , -51676101935731 , '-465084917421579' ) ; +test( macro , '-9' , -51676101935731 , '465084917421579' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , -1 , '-11' ) ; +test( macro , '-11' , -1 , '11' ) ; +test( macro , '11' , 3 , '33' ) ; +test( macro , '-11' , 3 , '-33' ) ; +test( macro , '11' , -3 , '-33' ) ; +test( macro , '-11' , -3 , '33' ) ; +test( macro , '11' , 7 , '77' ) ; +test( macro , '-11' , 7 , '-77' ) ; +test( macro , '11' , -7 , '-77' ) ; +test( macro , '-11' , -7 , '77' ) ; +test( macro , '11' , 9 , '99' ) ; +test( macro , '-11' , 9 , '-99' ) ; +test( macro , '11' , -9 , '-99' ) ; +test( macro , '-11' , -9 , '99' ) ; +test( macro , '11' , 11 , '121' ) ; +test( macro , '-11' , 11 , '-121' ) ; +test( macro , '11' , -11 , '-121' ) ; +test( macro , '-11' , -11 , '121' ) ; +test( macro , '11' , 17 , '187' ) ; +test( macro , '-11' , 17 , '-187' ) ; +test( macro , '11' , -17 , '-187' ) ; +test( macro , '-11' , -17 , '187' ) ; +test( macro , '11' , 22 , '242' ) ; +test( macro , '-11' , 22 , '-242' ) ; +test( macro , '11' , -22 , '-242' ) ; +test( macro , '-11' , -22 , '242' ) ; +test( macro , '11' , 24 , '264' ) ; +test( macro , '-11' , 24 , '-264' ) ; +test( macro , '11' , -24 , '-264' ) ; +test( macro , '-11' , -24 , '264' ) ; +test( macro , '11' , 27 , '297' ) ; +test( macro , '-11' , 27 , '-297' ) ; +test( macro , '11' , -27 , '-297' ) ; +test( macro , '-11' , -27 , '297' ) ; +test( macro , '11' , 29 , '319' ) ; +test( macro , '-11' , 29 , '-319' ) ; +test( macro , '11' , -29 , '-319' ) ; +test( macro , '-11' , -29 , '319' ) ; +test( macro , '11' , 1234 , '13574' ) ; +test( macro , '-11' , 1234 , '-13574' ) ; +test( macro , '11' , -1234 , '-13574' ) ; +test( macro , '-11' , -1234 , '13574' ) ; +test( macro , '11' , 5678 , '62458' ) ; +test( macro , '-11' , 5678 , '-62458' ) ; +test( macro , '11' , -5678 , '-62458' ) ; +test( macro , '-11' , -5678 , '62458' ) ; +test( macro , '11' , 1073741824 , '11811160064' ) ; +test( macro , '-11' , 1073741824 , '-11811160064' ) ; +test( macro , '11' , -1073741824 , '-11811160064' ) ; +test( macro , '-11' , -1073741824 , '11811160064' ) ; +test( macro , '11' , 51676101935731 , '568437121293041' ) ; +test( macro , '-11' , 51676101935731 , '-568437121293041' ) ; +test( macro , '11' , -51676101935731 , '-568437121293041' ) ; +test( macro , '-11' , -51676101935731 , '568437121293041' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , -1 , '-17' ) ; +test( macro , '-17' , -1 , '17' ) ; +test( macro , '17' , 3 , '51' ) ; +test( macro , '-17' , 3 , '-51' ) ; +test( macro , '17' , -3 , '-51' ) ; +test( macro , '-17' , -3 , '51' ) ; +test( macro , '17' , 7 , '119' ) ; +test( macro , '-17' , 7 , '-119' ) ; +test( macro , '17' , -7 , '-119' ) ; +test( macro , '-17' , -7 , '119' ) ; +test( macro , '17' , 9 , '153' ) ; +test( macro , '-17' , 9 , '-153' ) ; +test( macro , '17' , -9 , '-153' ) ; +test( macro , '-17' , -9 , '153' ) ; +test( macro , '17' , 11 , '187' ) ; +test( macro , '-17' , 11 , '-187' ) ; +test( macro , '17' , -11 , '-187' ) ; +test( macro , '-17' , -11 , '187' ) ; +test( macro , '17' , 17 , '289' ) ; +test( macro , '-17' , 17 , '-289' ) ; +test( macro , '17' , -17 , '-289' ) ; +test( macro , '-17' , -17 , '289' ) ; +test( macro , '17' , 22 , '374' ) ; +test( macro , '-17' , 22 , '-374' ) ; +test( macro , '17' , -22 , '-374' ) ; +test( macro , '-17' , -22 , '374' ) ; +test( macro , '17' , 24 , '408' ) ; +test( macro , '-17' , 24 , '-408' ) ; +test( macro , '17' , -24 , '-408' ) ; +test( macro , '-17' , -24 , '408' ) ; +test( macro , '17' , 27 , '459' ) ; +test( macro , '-17' , 27 , '-459' ) ; +test( macro , '17' , -27 , '-459' ) ; +test( macro , '-17' , -27 , '459' ) ; +test( macro , '17' , 29 , '493' ) ; +test( macro , '-17' , 29 , '-493' ) ; +test( macro , '17' , -29 , '-493' ) ; +test( macro , '-17' , -29 , '493' ) ; +test( macro , '17' , 1234 , '20978' ) ; +test( macro , '-17' , 1234 , '-20978' ) ; +test( macro , '17' , -1234 , '-20978' ) ; +test( macro , '-17' , -1234 , '20978' ) ; +test( macro , '17' , 5678 , '96526' ) ; +test( macro , '-17' , 5678 , '-96526' ) ; +test( macro , '17' , -5678 , '-96526' ) ; +test( macro , '-17' , -5678 , '96526' ) ; +test( macro , '17' , 1073741824 , '18253611008' ) ; +test( macro , '-17' , 1073741824 , '-18253611008' ) ; +test( macro , '17' , -1073741824 , '-18253611008' ) ; +test( macro , '-17' , -1073741824 , '18253611008' ) ; +test( macro , '17' , 51676101935731 , '878493732907427' ) ; +test( macro , '-17' , 51676101935731 , '-878493732907427' ) ; +test( macro , '17' , -51676101935731 , '-878493732907427' ) ; +test( macro , '-17' , -51676101935731 , '878493732907427' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , -1 , '-22' ) ; +test( macro , '-22' , -1 , '22' ) ; +test( macro , '22' , 3 , '66' ) ; +test( macro , '-22' , 3 , '-66' ) ; +test( macro , '22' , -3 , '-66' ) ; +test( macro , '-22' , -3 , '66' ) ; +test( macro , '22' , 7 , '154' ) ; +test( macro , '-22' , 7 , '-154' ) ; +test( macro , '22' , -7 , '-154' ) ; +test( macro , '-22' , -7 , '154' ) ; +test( macro , '22' , 9 , '198' ) ; +test( macro , '-22' , 9 , '-198' ) ; +test( macro , '22' , -9 , '-198' ) ; +test( macro , '-22' , -9 , '198' ) ; +test( macro , '22' , 11 , '242' ) ; +test( macro , '-22' , 11 , '-242' ) ; +test( macro , '22' , -11 , '-242' ) ; +test( macro , '-22' , -11 , '242' ) ; +test( macro , '22' , 17 , '374' ) ; +test( macro , '-22' , 17 , '-374' ) ; +test( macro , '22' , -17 , '-374' ) ; +test( macro , '-22' , -17 , '374' ) ; +test( macro , '22' , 22 , '484' ) ; +test( macro , '-22' , 22 , '-484' ) ; +test( macro , '22' , -22 , '-484' ) ; +test( macro , '-22' , -22 , '484' ) ; +test( macro , '22' , 24 , '528' ) ; +test( macro , '-22' , 24 , '-528' ) ; +test( macro , '22' , -24 , '-528' ) ; +test( macro , '-22' , -24 , '528' ) ; +test( macro , '22' , 27 , '594' ) ; +test( macro , '-22' , 27 , '-594' ) ; +test( macro , '22' , -27 , '-594' ) ; +test( macro , '-22' , -27 , '594' ) ; +test( macro , '22' , 29 , '638' ) ; +test( macro , '-22' , 29 , '-638' ) ; +test( macro , '22' , -29 , '-638' ) ; +test( macro , '-22' , -29 , '638' ) ; +test( macro , '22' , 1234 , '27148' ) ; +test( macro , '-22' , 1234 , '-27148' ) ; +test( macro , '22' , -1234 , '-27148' ) ; +test( macro , '-22' , -1234 , '27148' ) ; +test( macro , '22' , 5678 , '124916' ) ; +test( macro , '-22' , 5678 , '-124916' ) ; +test( macro , '22' , -5678 , '-124916' ) ; +test( macro , '-22' , -5678 , '124916' ) ; +test( macro , '22' , 1073741824 , '23622320128' ) ; +test( macro , '-22' , 1073741824 , '-23622320128' ) ; +test( macro , '22' , -1073741824 , '-23622320128' ) ; +test( macro , '-22' , -1073741824 , '23622320128' ) ; +test( macro , '22' , 51676101935731 , '1136874242586082' ) ; +test( macro , '-22' , 51676101935731 , '-1136874242586082' ) ; +test( macro , '22' , -51676101935731 , '-1136874242586082' ) ; +test( macro , '-22' , -51676101935731 , '1136874242586082' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , -1 , '-24' ) ; +test( macro , '-24' , -1 , '24' ) ; +test( macro , '24' , 3 , '72' ) ; +test( macro , '-24' , 3 , '-72' ) ; +test( macro , '24' , -3 , '-72' ) ; +test( macro , '-24' , -3 , '72' ) ; +test( macro , '24' , 7 , '168' ) ; +test( macro , '-24' , 7 , '-168' ) ; +test( macro , '24' , -7 , '-168' ) ; +test( macro , '-24' , -7 , '168' ) ; +test( macro , '24' , 9 , '216' ) ; +test( macro , '-24' , 9 , '-216' ) ; +test( macro , '24' , -9 , '-216' ) ; +test( macro , '-24' , -9 , '216' ) ; +test( macro , '24' , 11 , '264' ) ; +test( macro , '-24' , 11 , '-264' ) ; +test( macro , '24' , -11 , '-264' ) ; +test( macro , '-24' , -11 , '264' ) ; +test( macro , '24' , 17 , '408' ) ; +test( macro , '-24' , 17 , '-408' ) ; +test( macro , '24' , -17 , '-408' ) ; +test( macro , '-24' , -17 , '408' ) ; +test( macro , '24' , 22 , '528' ) ; +test( macro , '-24' , 22 , '-528' ) ; +test( macro , '24' , -22 , '-528' ) ; +test( macro , '-24' , -22 , '528' ) ; +test( macro , '24' , 24 , '576' ) ; +test( macro , '-24' , 24 , '-576' ) ; +test( macro , '24' , -24 , '-576' ) ; +test( macro , '-24' , -24 , '576' ) ; +test( macro , '24' , 27 , '648' ) ; +test( macro , '-24' , 27 , '-648' ) ; +test( macro , '24' , -27 , '-648' ) ; +test( macro , '-24' , -27 , '648' ) ; +test( macro , '24' , 29 , '696' ) ; +test( macro , '-24' , 29 , '-696' ) ; +test( macro , '24' , -29 , '-696' ) ; +test( macro , '-24' , -29 , '696' ) ; +test( macro , '24' , 1234 , '29616' ) ; +test( macro , '-24' , 1234 , '-29616' ) ; +test( macro , '24' , -1234 , '-29616' ) ; +test( macro , '-24' , -1234 , '29616' ) ; +test( macro , '24' , 5678 , '136272' ) ; +test( macro , '-24' , 5678 , '-136272' ) ; +test( macro , '24' , -5678 , '-136272' ) ; +test( macro , '-24' , -5678 , '136272' ) ; +test( macro , '24' , 1073741824 , '25769803776' ) ; +test( macro , '-24' , 1073741824 , '-25769803776' ) ; +test( macro , '24' , -1073741824 , '-25769803776' ) ; +test( macro , '-24' , -1073741824 , '25769803776' ) ; +test( macro , '24' , 51676101935731 , '1240226446457544' ) ; +test( macro , '-24' , 51676101935731 , '-1240226446457544' ) ; +test( macro , '24' , -51676101935731 , '-1240226446457544' ) ; +test( macro , '-24' , -51676101935731 , '1240226446457544' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , -1 , '-27' ) ; +test( macro , '-27' , -1 , '27' ) ; +test( macro , '27' , 3 , '81' ) ; +test( macro , '-27' , 3 , '-81' ) ; +test( macro , '27' , -3 , '-81' ) ; +test( macro , '-27' , -3 , '81' ) ; +test( macro , '27' , 7 , '189' ) ; +test( macro , '-27' , 7 , '-189' ) ; +test( macro , '27' , -7 , '-189' ) ; +test( macro , '-27' , -7 , '189' ) ; +test( macro , '27' , 9 , '243' ) ; +test( macro , '-27' , 9 , '-243' ) ; +test( macro , '27' , -9 , '-243' ) ; +test( macro , '-27' , -9 , '243' ) ; +test( macro , '27' , 11 , '297' ) ; +test( macro , '-27' , 11 , '-297' ) ; +test( macro , '27' , -11 , '-297' ) ; +test( macro , '-27' , -11 , '297' ) ; +test( macro , '27' , 17 , '459' ) ; +test( macro , '-27' , 17 , '-459' ) ; +test( macro , '27' , -17 , '-459' ) ; +test( macro , '-27' , -17 , '459' ) ; +test( macro , '27' , 22 , '594' ) ; +test( macro , '-27' , 22 , '-594' ) ; +test( macro , '27' , -22 , '-594' ) ; +test( macro , '-27' , -22 , '594' ) ; +test( macro , '27' , 24 , '648' ) ; +test( macro , '-27' , 24 , '-648' ) ; +test( macro , '27' , -24 , '-648' ) ; +test( macro , '-27' , -24 , '648' ) ; +test( macro , '27' , 27 , '729' ) ; +test( macro , '-27' , 27 , '-729' ) ; +test( macro , '27' , -27 , '-729' ) ; +test( macro , '-27' , -27 , '729' ) ; +test( macro , '27' , 29 , '783' ) ; +test( macro , '-27' , 29 , '-783' ) ; +test( macro , '27' , -29 , '-783' ) ; +test( macro , '-27' , -29 , '783' ) ; +test( macro , '27' , 1234 , '33318' ) ; +test( macro , '-27' , 1234 , '-33318' ) ; +test( macro , '27' , -1234 , '-33318' ) ; +test( macro , '-27' , -1234 , '33318' ) ; +test( macro , '27' , 5678 , '153306' ) ; +test( macro , '-27' , 5678 , '-153306' ) ; +test( macro , '27' , -5678 , '-153306' ) ; +test( macro , '-27' , -5678 , '153306' ) ; +test( macro , '27' , 1073741824 , '28991029248' ) ; +test( macro , '-27' , 1073741824 , '-28991029248' ) ; +test( macro , '27' , -1073741824 , '-28991029248' ) ; +test( macro , '-27' , -1073741824 , '28991029248' ) ; +test( macro , '27' , 51676101935731 , '1395254752264737' ) ; +test( macro , '-27' , 51676101935731 , '-1395254752264737' ) ; +test( macro , '27' , -51676101935731 , '-1395254752264737' ) ; +test( macro , '-27' , -51676101935731 , '1395254752264737' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , -1 , '-29' ) ; +test( macro , '-29' , -1 , '29' ) ; +test( macro , '29' , 3 , '87' ) ; +test( macro , '-29' , 3 , '-87' ) ; +test( macro , '29' , -3 , '-87' ) ; +test( macro , '-29' , -3 , '87' ) ; +test( macro , '29' , 7 , '203' ) ; +test( macro , '-29' , 7 , '-203' ) ; +test( macro , '29' , -7 , '-203' ) ; +test( macro , '-29' , -7 , '203' ) ; +test( macro , '29' , 9 , '261' ) ; +test( macro , '-29' , 9 , '-261' ) ; +test( macro , '29' , -9 , '-261' ) ; +test( macro , '-29' , -9 , '261' ) ; +test( macro , '29' , 11 , '319' ) ; +test( macro , '-29' , 11 , '-319' ) ; +test( macro , '29' , -11 , '-319' ) ; +test( macro , '-29' , -11 , '319' ) ; +test( macro , '29' , 17 , '493' ) ; +test( macro , '-29' , 17 , '-493' ) ; +test( macro , '29' , -17 , '-493' ) ; +test( macro , '-29' , -17 , '493' ) ; +test( macro , '29' , 22 , '638' ) ; +test( macro , '-29' , 22 , '-638' ) ; +test( macro , '29' , -22 , '-638' ) ; +test( macro , '-29' , -22 , '638' ) ; +test( macro , '29' , 24 , '696' ) ; +test( macro , '-29' , 24 , '-696' ) ; +test( macro , '29' , -24 , '-696' ) ; +test( macro , '-29' , -24 , '696' ) ; +test( macro , '29' , 27 , '783' ) ; +test( macro , '-29' , 27 , '-783' ) ; +test( macro , '29' , -27 , '-783' ) ; +test( macro , '-29' , -27 , '783' ) ; +test( macro , '29' , 29 , '841' ) ; +test( macro , '-29' , 29 , '-841' ) ; +test( macro , '29' , -29 , '-841' ) ; +test( macro , '-29' , -29 , '841' ) ; +test( macro , '29' , 1234 , '35786' ) ; +test( macro , '-29' , 1234 , '-35786' ) ; +test( macro , '29' , -1234 , '-35786' ) ; +test( macro , '-29' , -1234 , '35786' ) ; +test( macro , '29' , 5678 , '164662' ) ; +test( macro , '-29' , 5678 , '-164662' ) ; +test( macro , '29' , -5678 , '-164662' ) ; +test( macro , '-29' , -5678 , '164662' ) ; +test( macro , '29' , 1073741824 , '31138512896' ) ; +test( macro , '-29' , 1073741824 , '-31138512896' ) ; +test( macro , '29' , -1073741824 , '-31138512896' ) ; +test( macro , '-29' , -1073741824 , '31138512896' ) ; +test( macro , '29' , 51676101935731 , '1498606956136199' ) ; +test( macro , '-29' , 51676101935731 , '-1498606956136199' ) ; +test( macro , '29' , -51676101935731 , '-1498606956136199' ) ; +test( macro , '-29' , -51676101935731 , '1498606956136199' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , -1 , '-1234' ) ; +test( macro , '-1234' , -1 , '1234' ) ; +test( macro , '1234' , 3 , '3702' ) ; +test( macro , '-1234' , 3 , '-3702' ) ; +test( macro , '1234' , -3 , '-3702' ) ; +test( macro , '-1234' , -3 , '3702' ) ; +test( macro , '1234' , 7 , '8638' ) ; +test( macro , '-1234' , 7 , '-8638' ) ; +test( macro , '1234' , -7 , '-8638' ) ; +test( macro , '-1234' , -7 , '8638' ) ; +test( macro , '1234' , 9 , '11106' ) ; +test( macro , '-1234' , 9 , '-11106' ) ; +test( macro , '1234' , -9 , '-11106' ) ; +test( macro , '-1234' , -9 , '11106' ) ; +test( macro , '1234' , 11 , '13574' ) ; +test( macro , '-1234' , 11 , '-13574' ) ; +test( macro , '1234' , -11 , '-13574' ) ; +test( macro , '-1234' , -11 , '13574' ) ; +test( macro , '1234' , 17 , '20978' ) ; +test( macro , '-1234' , 17 , '-20978' ) ; +test( macro , '1234' , -17 , '-20978' ) ; +test( macro , '-1234' , -17 , '20978' ) ; +test( macro , '1234' , 22 , '27148' ) ; +test( macro , '-1234' , 22 , '-27148' ) ; +test( macro , '1234' , -22 , '-27148' ) ; +test( macro , '-1234' , -22 , '27148' ) ; +test( macro , '1234' , 24 , '29616' ) ; +test( macro , '-1234' , 24 , '-29616' ) ; +test( macro , '1234' , -24 , '-29616' ) ; +test( macro , '-1234' , -24 , '29616' ) ; +test( macro , '1234' , 27 , '33318' ) ; +test( macro , '-1234' , 27 , '-33318' ) ; +test( macro , '1234' , -27 , '-33318' ) ; +test( macro , '-1234' , -27 , '33318' ) ; +test( macro , '1234' , 29 , '35786' ) ; +test( macro , '-1234' , 29 , '-35786' ) ; +test( macro , '1234' , -29 , '-35786' ) ; +test( macro , '-1234' , -29 , '35786' ) ; +test( macro , '1234' , 1234 , '1522756' ) ; +test( macro , '-1234' , 1234 , '-1522756' ) ; +test( macro , '1234' , -1234 , '-1522756' ) ; +test( macro , '-1234' , -1234 , '1522756' ) ; +test( macro , '1234' , 5678 , '7006652' ) ; +test( macro , '-1234' , 5678 , '-7006652' ) ; +test( macro , '1234' , -5678 , '-7006652' ) ; +test( macro , '-1234' , -5678 , '7006652' ) ; +test( macro , '1234' , 1073741824 , '1324997410816' ) ; +test( macro , '-1234' , 1073741824 , '-1324997410816' ) ; +test( macro , '1234' , -1073741824 , '-1324997410816' ) ; +test( macro , '-1234' , -1073741824 , '1324997410816' ) ; +test( macro , '1234' , 51676101935731 , '63768309788692054' ) ; +test( macro , '-1234' , 51676101935731 , '-63768309788692054' ) ; +test( macro , '1234' , -51676101935731 , '-63768309788692054' ) ; +test( macro , '-1234' , -51676101935731 , '63768309788692054' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , -1 , '-5678' ) ; +test( macro , '-5678' , -1 , '5678' ) ; +test( macro , '5678' , 3 , '17034' ) ; +test( macro , '-5678' , 3 , '-17034' ) ; +test( macro , '5678' , -3 , '-17034' ) ; +test( macro , '-5678' , -3 , '17034' ) ; +test( macro , '5678' , 7 , '39746' ) ; +test( macro , '-5678' , 7 , '-39746' ) ; +test( macro , '5678' , -7 , '-39746' ) ; +test( macro , '-5678' , -7 , '39746' ) ; +test( macro , '5678' , 9 , '51102' ) ; +test( macro , '-5678' , 9 , '-51102' ) ; +test( macro , '5678' , -9 , '-51102' ) ; +test( macro , '-5678' , -9 , '51102' ) ; +test( macro , '5678' , 11 , '62458' ) ; +test( macro , '-5678' , 11 , '-62458' ) ; +test( macro , '5678' , -11 , '-62458' ) ; +test( macro , '-5678' , -11 , '62458' ) ; +test( macro , '5678' , 17 , '96526' ) ; +test( macro , '-5678' , 17 , '-96526' ) ; +test( macro , '5678' , -17 , '-96526' ) ; +test( macro , '-5678' , -17 , '96526' ) ; +test( macro , '5678' , 22 , '124916' ) ; +test( macro , '-5678' , 22 , '-124916' ) ; +test( macro , '5678' , -22 , '-124916' ) ; +test( macro , '-5678' , -22 , '124916' ) ; +test( macro , '5678' , 24 , '136272' ) ; +test( macro , '-5678' , 24 , '-136272' ) ; +test( macro , '5678' , -24 , '-136272' ) ; +test( macro , '-5678' , -24 , '136272' ) ; +test( macro , '5678' , 27 , '153306' ) ; +test( macro , '-5678' , 27 , '-153306' ) ; +test( macro , '5678' , -27 , '-153306' ) ; +test( macro , '-5678' , -27 , '153306' ) ; +test( macro , '5678' , 29 , '164662' ) ; +test( macro , '-5678' , 29 , '-164662' ) ; +test( macro , '5678' , -29 , '-164662' ) ; +test( macro , '-5678' , -29 , '164662' ) ; +test( macro , '5678' , 1234 , '7006652' ) ; +test( macro , '-5678' , 1234 , '-7006652' ) ; +test( macro , '5678' , -1234 , '-7006652' ) ; +test( macro , '-5678' , -1234 , '7006652' ) ; +test( macro , '5678' , 5678 , '32239684' ) ; +test( macro , '-5678' , 5678 , '-32239684' ) ; +test( macro , '5678' , -5678 , '-32239684' ) ; +test( macro , '-5678' , -5678 , '32239684' ) ; +test( macro , '5678' , 1073741824 , '6096706076672' ) ; +test( macro , '-5678' , 1073741824 , '-6096706076672' ) ; +test( macro , '5678' , -1073741824 , '-6096706076672' ) ; +test( macro , '-5678' , -1073741824 , '6096706076672' ) ; +test( macro , '5678' , 51676101935731 , '293416906791080618' ) ; +test( macro , '-5678' , 51676101935731 , '-293416906791080618' ) ; +test( macro , '5678' , -51676101935731 , '-293416906791080618' ) ; +test( macro , '-5678' , -51676101935731 , '293416906791080618' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , -1 , '-1073741824' ) ; +test( macro , '-1073741824' , -1 , '1073741824' ) ; +test( macro , '1073741824' , 3 , '3221225472' ) ; +test( macro , '-1073741824' , 3 , '-3221225472' ) ; +test( macro , '1073741824' , -3 , '-3221225472' ) ; +test( macro , '-1073741824' , -3 , '3221225472' ) ; +test( macro , '1073741824' , 7 , '7516192768' ) ; +test( macro , '-1073741824' , 7 , '-7516192768' ) ; +test( macro , '1073741824' , -7 , '-7516192768' ) ; +test( macro , '-1073741824' , -7 , '7516192768' ) ; +test( macro , '1073741824' , 9 , '9663676416' ) ; +test( macro , '-1073741824' , 9 , '-9663676416' ) ; +test( macro , '1073741824' , -9 , '-9663676416' ) ; +test( macro , '-1073741824' , -9 , '9663676416' ) ; +test( macro , '1073741824' , 11 , '11811160064' ) ; +test( macro , '-1073741824' , 11 , '-11811160064' ) ; +test( macro , '1073741824' , -11 , '-11811160064' ) ; +test( macro , '-1073741824' , -11 , '11811160064' ) ; +test( macro , '1073741824' , 17 , '18253611008' ) ; +test( macro , '-1073741824' , 17 , '-18253611008' ) ; +test( macro , '1073741824' , -17 , '-18253611008' ) ; +test( macro , '-1073741824' , -17 , '18253611008' ) ; +test( macro , '1073741824' , 22 , '23622320128' ) ; +test( macro , '-1073741824' , 22 , '-23622320128' ) ; +test( macro , '1073741824' , -22 , '-23622320128' ) ; +test( macro , '-1073741824' , -22 , '23622320128' ) ; +test( macro , '1073741824' , 24 , '25769803776' ) ; +test( macro , '-1073741824' , 24 , '-25769803776' ) ; +test( macro , '1073741824' , -24 , '-25769803776' ) ; +test( macro , '-1073741824' , -24 , '25769803776' ) ; +test( macro , '1073741824' , 27 , '28991029248' ) ; +test( macro , '-1073741824' , 27 , '-28991029248' ) ; +test( macro , '1073741824' , -27 , '-28991029248' ) ; +test( macro , '-1073741824' , -27 , '28991029248' ) ; +test( macro , '1073741824' , 29 , '31138512896' ) ; +test( macro , '-1073741824' , 29 , '-31138512896' ) ; +test( macro , '1073741824' , -29 , '-31138512896' ) ; +test( macro , '-1073741824' , -29 , '31138512896' ) ; +test( macro , '1073741824' , 1234 , '1324997410816' ) ; +test( macro , '-1073741824' , 1234 , '-1324997410816' ) ; +test( macro , '1073741824' , -1234 , '-1324997410816' ) ; +test( macro , '-1073741824' , -1234 , '1324997410816' ) ; +test( macro , '1073741824' , 5678 , '6096706076672' ) ; +test( macro , '-1073741824' , 5678 , '-6096706076672' ) ; +test( macro , '1073741824' , -5678 , '-6096706076672' ) ; +test( macro , '-1073741824' , -5678 , '6096706076672' ) ; +test( macro , '1073741824' , 1073741824 , '1152921504606846976' ) ; +test( macro , '-1073741824' , 1073741824 , '-1152921504606846976' ) ; +test( macro , '1073741824' , -1073741824 , '-1152921504606846976' ) ; +test( macro , '-1073741824' , -1073741824 , '1152921504606846976' ) ; +test( macro , '1073741824' , 51676101935731 , '55486791949681734713344' ) ; +test( macro , '-1073741824' , 51676101935731 , '-55486791949681734713344' ) ; +test( macro , '1073741824' , -51676101935731 , '-55486791949681734713344' ) ; +test( macro , '-1073741824' , -51676101935731 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' ) ; +test( macro , '51676101935731' , 3 , '155028305807193' ) ; +test( macro , '-51676101935731' , 3 , '-155028305807193' ) ; +test( macro , '51676101935731' , -3 , '-155028305807193' ) ; +test( macro , '-51676101935731' , -3 , '155028305807193' ) ; +test( macro , '51676101935731' , 7 , '361732713550117' ) ; +test( macro , '-51676101935731' , 7 , '-361732713550117' ) ; +test( macro , '51676101935731' , -7 , '-361732713550117' ) ; +test( macro , '-51676101935731' , -7 , '361732713550117' ) ; +test( macro , '51676101935731' , 9 , '465084917421579' ) ; +test( macro , '-51676101935731' , 9 , '-465084917421579' ) ; +test( macro , '51676101935731' , -9 , '-465084917421579' ) ; +test( macro , '-51676101935731' , -9 , '465084917421579' ) ; +test( macro , '51676101935731' , 11 , '568437121293041' ) ; +test( macro , '-51676101935731' , 11 , '-568437121293041' ) ; +test( macro , '51676101935731' , -11 , '-568437121293041' ) ; +test( macro , '-51676101935731' , -11 , '568437121293041' ) ; +test( macro , '51676101935731' , 17 , '878493732907427' ) ; +test( macro , '-51676101935731' , 17 , '-878493732907427' ) ; +test( macro , '51676101935731' , -17 , '-878493732907427' ) ; +test( macro , '-51676101935731' , -17 , '878493732907427' ) ; +test( macro , '51676101935731' , 22 , '1136874242586082' ) ; +test( macro , '-51676101935731' , 22 , '-1136874242586082' ) ; +test( macro , '51676101935731' , -22 , '-1136874242586082' ) ; +test( macro , '-51676101935731' , -22 , '1136874242586082' ) ; +test( macro , '51676101935731' , 24 , '1240226446457544' ) ; +test( macro , '-51676101935731' , 24 , '-1240226446457544' ) ; +test( macro , '51676101935731' , -24 , '-1240226446457544' ) ; +test( macro , '-51676101935731' , -24 , '1240226446457544' ) ; +test( macro , '51676101935731' , 27 , '1395254752264737' ) ; +test( macro , '-51676101935731' , 27 , '-1395254752264737' ) ; +test( macro , '51676101935731' , -27 , '-1395254752264737' ) ; +test( macro , '-51676101935731' , -27 , '1395254752264737' ) ; +test( macro , '51676101935731' , 29 , '1498606956136199' ) ; +test( macro , '-51676101935731' , 29 , '-1498606956136199' ) ; +test( macro , '51676101935731' , -29 , '-1498606956136199' ) ; +test( macro , '-51676101935731' , -29 , '1498606956136199' ) ; +test( macro , '51676101935731' , 1234 , '63768309788692054' ) ; +test( macro , '-51676101935731' , 1234 , '-63768309788692054' ) ; +test( macro , '51676101935731' , -1234 , '-63768309788692054' ) ; +test( macro , '-51676101935731' , -1234 , '63768309788692054' ) ; +test( macro , '51676101935731' , 5678 , '293416906791080618' ) ; +test( macro , '-51676101935731' , 5678 , '-293416906791080618' ) ; +test( macro , '51676101935731' , -5678 , '-293416906791080618' ) ; +test( macro , '-51676101935731' , -5678 , '293416906791080618' ) ; +test( macro , '51676101935731' , 1073741824 , '55486791949681734713344' ) ; +test( macro , '-51676101935731' , 1073741824 , '-55486791949681734713344' ) ; +test( macro , '51676101935731' , -1073741824 , '-55486791949681734713344' ) ; +test( macro , '-51676101935731' , -1073741824 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-2670419511272061205254504361' ) ; +test( macro , '51676101935731' , -51676101935731 , '-2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , -51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , 3 , '-2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , -3 , '-2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , -3 , '2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , 7 , '5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , 7 , '-5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , -7 , '-5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , -7 , '5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , 9 , '6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , 9 , '-6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , -9 , '-6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , -9 , '6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , 11 , '7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , 11 , '-7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , -11 , '-7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , -11 , '7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , 17 , '12204265790761494009094233' ) ; +test( macro , '-717897987691852588770249' , 17 , '-12204265790761494009094233' ) ; +test( macro , '717897987691852588770249' , -17 , '-12204265790761494009094233' ) ; +test( macro , '-717897987691852588770249' , -17 , '12204265790761494009094233' ) ; +test( macro , '717897987691852588770249' , 22 , '15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , 22 , '-15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , -22 , '-15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , -22 , '15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , 24 , '17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , 24 , '-17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , -24 , '-17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , -24 , '17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , 27 , '19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , 27 , '-19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , -27 , '-19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , -27 , '19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , 29 , '20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , 29 , '-20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , -29 , '-20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , -29 , '20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , 1234 , '885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , -1234 , '-885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , -1234 , '885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , 5678 , '4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , -5678 , '-4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , -5678 , '4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '770837094750179348605289078194176' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-770837094750179348605289078194176' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '37098169591420333175287767861722867019' ) ; diff --git a/test/src/integer/arithmetic/ipow.js b/test/src/integer/arithmetic/ipow.js index ce67808..2ca8eac 100644 --- a/test/src/integer/arithmetic/ipow.js +++ b/test/src/integer/arithmetic/ipow.js @@ -3,210 +3,300 @@ import { parse , stringify , ipow } from '../../../../src' ; function macro ( t , A , B , C ) { const a = parse( A ) ; - const c = ipow( a , B ) ; + const b = parse( B ) ; + const c = ipow( a , b ) ; t.is( stringify( a ) , C ) ; + t.is( stringify( b ) , B ) ; t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} ^= ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `ipow(${A},${B}) = ${C}` ; -test( macro , '1' , 1 , '1' ) ; -test( macro , '-1' , 1 , '-1' ) ; -test( macro , '1' , 3 , '1' ) ; -test( macro , '-1' , 3 , '-1' ) ; -test( macro , '1' , 7 , '1' ) ; -test( macro , '-1' , 7 , '-1' ) ; -test( macro , '1' , 9 , '1' ) ; -test( macro , '-1' , 9 , '-1' ) ; -test( macro , '1' , 11 , '1' ) ; -test( macro , '-1' , 11 , '-1' ) ; -test( macro , '1' , 17 , '1' ) ; -test( macro , '-1' , 17 , '-1' ) ; -test( macro , '1' , 22 , '1' ) ; -test( macro , '-1' , 22 , '1' ) ; -test( macro , '1' , 24 , '1' ) ; -test( macro , '-1' , 24 , '1' ) ; -test( macro , '1' , 27 , '1' ) ; -test( macro , '-1' , 27 , '-1' ) ; -test( macro , '1' , 29 , '1' ) ; -test( macro , '-1' , 29 , '-1' ) ; -test( macro , '3' , 1 , '3' ) ; -test( macro , '-3' , 1 , '-3' ) ; -test( macro , '3' , 3 , '27' ) ; -test( macro , '-3' , 3 , '-27' ) ; -test( macro , '3' , 7 , '2187' ) ; -test( macro , '-3' , 7 , '-2187' ) ; -test( macro , '3' , 9 , '19683' ) ; -test( macro , '-3' , 9 , '-19683' ) ; -test( macro , '3' , 11 , '177147' ) ; -test( macro , '-3' , 11 , '-177147' ) ; -test( macro , '3' , 17 , '129140163' ) ; -test( macro , '-3' , 17 , '-129140163' ) ; -test( macro , '3' , 22 , '31381059609' ) ; -test( macro , '-3' , 22 , '31381059609' ) ; -test( macro , '3' , 24 , '282429536481' ) ; -test( macro , '-3' , 24 , '282429536481' ) ; -test( macro , '3' , 27 , '7625597484987' ) ; -test( macro , '-3' , 27 , '-7625597484987' ) ; -test( macro , '3' , 29 , '68630377364883' ) ; -test( macro , '-3' , 29 , '-68630377364883' ) ; -test( macro , '7' , 1 , '7' ) ; -test( macro , '-7' , 1 , '-7' ) ; -test( macro , '7' , 3 , '343' ) ; -test( macro , '-7' , 3 , '-343' ) ; -test( macro , '7' , 7 , '823543' ) ; -test( macro , '-7' , 7 , '-823543' ) ; -test( macro , '7' , 9 , '40353607' ) ; -test( macro , '-7' , 9 , '-40353607' ) ; -test( macro , '7' , 11 , '1977326743' ) ; -test( macro , '-7' , 11 , '-1977326743' ) ; -test( macro , '7' , 17 , '232630513987207' ) ; -test( macro , '-7' , 17 , '-232630513987207' ) ; -test( macro , '7' , 22 , '3909821048582988049' ) ; -test( macro , '-7' , 22 , '3909821048582988049' ) ; -test( macro , '7' , 24 , '191581231380566414401' ) ; -test( macro , '-7' , 24 , '191581231380566414401' ) ; -test( macro , '7' , 27 , '65712362363534280139543' ) ; -test( macro , '-7' , 27 , '-65712362363534280139543' ) ; -test( macro , '7' , 29 , '3219905755813179726837607' ) ; -test( macro , '-7' , 29 , '-3219905755813179726837607' ) ; -test( macro , '9' , 1 , '9' ) ; -test( macro , '-9' , 1 , '-9' ) ; -test( macro , '9' , 3 , '729' ) ; -test( macro , '-9' , 3 , '-729' ) ; -test( macro , '9' , 7 , '4782969' ) ; -test( macro , '-9' , 7 , '-4782969' ) ; -test( macro , '9' , 9 , '387420489' ) ; -test( macro , '-9' , 9 , '-387420489' ) ; -test( macro , '9' , 11 , '31381059609' ) ; -test( macro , '-9' , 11 , '-31381059609' ) ; -test( macro , '9' , 17 , '16677181699666569' ) ; -test( macro , '-9' , 17 , '-16677181699666569' ) ; -test( macro , '9' , 22 , '984770902183611232881' ) ; -test( macro , '-9' , 22 , '984770902183611232881' ) ; -test( macro , '9' , 24 , '79766443076872509863361' ) ; -test( macro , '-9' , 24 , '79766443076872509863361' ) ; -test( macro , '9' , 27 , '58149737003040059690390169' ) ; -test( macro , '-9' , 27 , '-58149737003040059690390169' ) ; -test( macro , '9' , 29 , '4710128697246244834921603689' ) ; -test( macro , '-9' , 29 , '-4710128697246244834921603689' ) ; -test( macro , '11' , 1 , '11' ) ; -test( macro , '-11' , 1 , '-11' ) ; -test( macro , '11' , 3 , '1331' ) ; -test( macro , '-11' , 3 , '-1331' ) ; -test( macro , '11' , 7 , '19487171' ) ; -test( macro , '-11' , 7 , '-19487171' ) ; -test( macro , '11' , 9 , '2357947691' ) ; -test( macro , '-11' , 9 , '-2357947691' ) ; -test( macro , '11' , 11 , '285311670611' ) ; -test( macro , '-11' , 11 , '-285311670611' ) ; -test( macro , '11' , 17 , '505447028499293771' ) ; -test( macro , '-11' , 17 , '-505447028499293771' ) ; -test( macro , '11' , 22 , '81402749386839761113321' ) ; -test( macro , '-11' , 22 , '81402749386839761113321' ) ; -test( macro , '11' , 24 , '9849732675807611094711841' ) ; -test( macro , '-11' , 24 , '9849732675807611094711841' ) ; -test( macro , '11' , 27 , '13109994191499930367061460371' ) ; -test( macro , '-11' , 27 , '-13109994191499930367061460371' ) ; -test( macro , '11' , 29 , '1586309297171491574414436704891' ) ; -test( macro , '-11' , 29 , '-1586309297171491574414436704891' ) ; -test( macro , '17' , 1 , '17' ) ; -test( macro , '-17' , 1 , '-17' ) ; -test( macro , '17' , 3 , '4913' ) ; -test( macro , '-17' , 3 , '-4913' ) ; -test( macro , '17' , 7 , '410338673' ) ; -test( macro , '-17' , 7 , '-410338673' ) ; -test( macro , '17' , 9 , '118587876497' ) ; -test( macro , '-17' , 9 , '-118587876497' ) ; -test( macro , '17' , 11 , '34271896307633' ) ; -test( macro , '-17' , 11 , '-34271896307633' ) ; -test( macro , '17' , 17 , '827240261886336764177' ) ; -test( macro , '-17' , 17 , '-827240261886336764177' ) ; -test( macro , '17' , 22 , '1174562876521148458974062689' ) ; -test( macro , '-17' , 22 , '1174562876521148458974062689' ) ; -test( macro , '17' , 24 , '339448671314611904643504117121' ) ; -test( macro , '-17' , 24 , '339448671314611904643504117121' ) ; -test( macro , '17' , 27 , '1667711322168688287513535727415473' ) ; -test( macro , '-17' , 27 , '-1667711322168688287513535727415473' ) ; -test( macro , '17' , 29 , '481968572106750915091411825223071697' ) ; -test( macro , '-17' , 29 , '-481968572106750915091411825223071697' ) ; -test( macro , '22' , 1 , '22' ) ; -test( macro , '-22' , 1 , '-22' ) ; -test( macro , '22' , 3 , '10648' ) ; -test( macro , '-22' , 3 , '-10648' ) ; -test( macro , '22' , 7 , '2494357888' ) ; -test( macro , '-22' , 7 , '-2494357888' ) ; -test( macro , '22' , 9 , '1207269217792' ) ; -test( macro , '-22' , 9 , '-1207269217792' ) ; -test( macro , '22' , 11 , '584318301411328' ) ; -test( macro , '-22' , 11 , '-584318301411328' ) ; -test( macro , '22' , 17 , '66249952919459433152512' ) ; -test( macro , '-22' , 17 , '-66249952919459433152512' ) ; -test( macro , '22' , 22 , '341427877364219557396646723584' ) ; -test( macro , '-22' , 22 , '341427877364219557396646723584' ) ; -test( macro , '22' , 24 , '165251092644282265779977014214656' ) ; -test( macro , '-22' , 24 , '165251092644282265779977014214656' ) ; -test( macro , '22' , 27 , '1759593634476317566025195247357657088' ) ; -test( macro , '-22' , 27 , '-1759593634476317566025195247357657088' ) ; -test( macro , '22' , 29 , '851643319086537701956194499721106030592' ) ; -test( macro , '-22' , 29 , '-851643319086537701956194499721106030592' ) ; -test( macro , '24' , 1 , '24' ) ; -test( macro , '-24' , 1 , '-24' ) ; -test( macro , '24' , 3 , '13824' ) ; -test( macro , '-24' , 3 , '-13824' ) ; -test( macro , '24' , 7 , '4586471424' ) ; -test( macro , '-24' , 7 , '-4586471424' ) ; -test( macro , '24' , 9 , '2641807540224' ) ; -test( macro , '-24' , 9 , '-2641807540224' ) ; -test( macro , '24' , 11 , '1521681143169024' ) ; -test( macro , '-24' , 11 , '-1521681143169024' ) ; -test( macro , '24' , 17 , '290797794982682557415424' ) ; -test( macro , '-24' , 17 , '-290797794982682557415424' ) ; -test( macro , '24' , 22 , '2315513501476187716057433112576' ) ; -test( macro , '-24' , 22 , '2315513501476187716057433112576' ) ; -test( macro , '24' , 24 , '1333735776850284124449081472843776' ) ; -test( macro , '-24' , 24 , '1333735776850284124449081472843776' ) ; -test( macro , '24' , 27 , '18437563379178327736384102280592359424' ) ; -test( macro , '-24' , 27 , '-18437563379178327736384102280592359424' ) ; -test( macro , '24' , 29 , '10620036506406716776157242913621199028224' ) ; -test( macro , '-24' , 29 , '-10620036506406716776157242913621199028224' ) ; -test( macro , '27' , 1 , '27' ) ; -test( macro , '-27' , 1 , '-27' ) ; -test( macro , '27' , 3 , '19683' ) ; -test( macro , '-27' , 3 , '-19683' ) ; -test( macro , '27' , 7 , '10460353203' ) ; -test( macro , '-27' , 7 , '-10460353203' ) ; -test( macro , '27' , 9 , '7625597484987' ) ; -test( macro , '-27' , 9 , '-7625597484987' ) ; -test( macro , '27' , 11 , '5559060566555523' ) ; -test( macro , '-27' , 11 , '-5559060566555523' ) ; -test( macro , '27' , 17 , '2153693963075557766310747' ) ; -test( macro , '-27' , 17 , '-2153693963075557766310747' ) ; -test( macro , '27' , 22 , '30903154382632612361920641803529' ) ; -test( macro , '-27' , 22 , '30903154382632612361920641803529' ) ; -test( macro , '27' , 24 , '22528399544939174411840147874772641' ) ; -test( macro , '-27' , 24 , '22528399544939174411840147874772641' ) ; -test( macro , '27' , 27 , '443426488243037769948249630619149892803' ) ; -test( macro , '-27' , 27 , '-443426488243037769948249630619149892803' ) ; -test( macro , '27' , 29 , '323257909929174534292273980721360271853387' ) ; -test( macro , '-27' , 29 , '-323257909929174534292273980721360271853387' ) ; -test( macro , '29' , 1 , '29' ) ; -test( macro , '-29' , 1 , '-29' ) ; -test( macro , '29' , 3 , '24389' ) ; -test( macro , '-29' , 3 , '-24389' ) ; -test( macro , '29' , 7 , '17249876309' ) ; -test( macro , '-29' , 7 , '-17249876309' ) ; -test( macro , '29' , 9 , '14507145975869' ) ; -test( macro , '-29' , 9 , '-14507145975869' ) ; -test( macro , '29' , 11 , '12200509765705829' ) ; -test( macro , '-29' , 11 , '-12200509765705829' ) ; -test( macro , '29' , 17 , '7257147736730073114838109' ) ; -test( macro , '-29' , 17 , '-7257147736730073114838109' ) ; -test( macro , '29' , 22 , '148852438543083302439338564577241' ) ; -test( macro , '-29' , 22 , '148852438543083302439338564577241' ) ; -test( macro , '29' , 24 , '125184900814733057351483732809459681' ) ; -test( macro , '-29' , 24 , '125184900814733057351483732809459681' ) ; -test( macro , '29' , 27 , '3053134545970524535745336759489912159909' ) ; -test( macro , '-29' , 27 , '-3053134545970524535745336759489912159909' ) ; -test( macro , '29' , 29 , '2567686153161211134561828214731016126483469' ) ; -test( macro , '-29' , 29 , '-2567686153161211134561828214731016126483469' ) ; +test( macro , '1' , '1' , '1' ) ; +test( macro , '-1' , '1' , '-1' ) ; +test( macro , '1' , '3' , '1' ) ; +test( macro , '-1' , '3' , '-1' ) ; +test( macro , '1' , '7' , '1' ) ; +test( macro , '-1' , '7' , '-1' ) ; +test( macro , '1' , '9' , '1' ) ; +test( macro , '-1' , '9' , '-1' ) ; +test( macro , '1' , '11' , '1' ) ; +test( macro , '-1' , '11' , '-1' ) ; +test( macro , '1' , '17' , '1' ) ; +test( macro , '-1' , '17' , '-1' ) ; +test( macro , '1' , '22' , '1' ) ; +test( macro , '-1' , '22' , '1' ) ; +test( macro , '1' , '24' , '1' ) ; +test( macro , '-1' , '24' , '1' ) ; +test( macro , '1' , '27' , '1' ) ; +test( macro , '-1' , '27' , '-1' ) ; +test( macro , '1' , '29' , '1' ) ; +test( macro , '-1' , '29' , '-1' ) ; +test( macro , '1' , '1234' , '1' ) ; +test( macro , '-1' , '1234' , '1' ) ; +test( macro , '1' , '5678' , '1' ) ; +test( macro , '-1' , '5678' , '1' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '3' , '27' ) ; +test( macro , '-3' , '3' , '-27' ) ; +test( macro , '3' , '7' , '2187' ) ; +test( macro , '-3' , '7' , '-2187' ) ; +test( macro , '3' , '9' , '19683' ) ; +test( macro , '-3' , '9' , '-19683' ) ; +test( macro , '3' , '11' , '177147' ) ; +test( macro , '-3' , '11' , '-177147' ) ; +test( macro , '3' , '17' , '129140163' ) ; +test( macro , '-3' , '17' , '-129140163' ) ; +test( macro , '3' , '22' , '31381059609' ) ; +test( macro , '-3' , '22' , '31381059609' ) ; +test( macro , '3' , '24' , '282429536481' ) ; +test( macro , '-3' , '24' , '282429536481' ) ; +test( macro , '3' , '27' , '7625597484987' ) ; +test( macro , '-3' , '27' , '-7625597484987' ) ; +test( macro , '3' , '29' , '68630377364883' ) ; +test( macro , '-3' , '29' , '-68630377364883' ) ; +test( macro , '3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '-3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '-3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '3' , '343' ) ; +test( macro , '-7' , '3' , '-343' ) ; +test( macro , '7' , '7' , '823543' ) ; +test( macro , '-7' , '7' , '-823543' ) ; +test( macro , '7' , '9' , '40353607' ) ; +test( macro , '-7' , '9' , '-40353607' ) ; +test( macro , '7' , '11' , '1977326743' ) ; +test( macro , '-7' , '11' , '-1977326743' ) ; +test( macro , '7' , '17' , '232630513987207' ) ; +test( macro , '-7' , '17' , '-232630513987207' ) ; +test( macro , '7' , '22' , '3909821048582988049' ) ; +test( macro , '-7' , '22' , '3909821048582988049' ) ; +test( macro , '7' , '24' , '191581231380566414401' ) ; +test( macro , '-7' , '24' , '191581231380566414401' ) ; +test( macro , '7' , '27' , '65712362363534280139543' ) ; +test( macro , '-7' , '27' , '-65712362363534280139543' ) ; +test( macro , '7' , '29' , '3219905755813179726837607' ) ; +test( macro , '-7' , '29' , '-3219905755813179726837607' ) ; +test( macro , '7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '-7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '-7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '3' , '729' ) ; +test( macro , '-9' , '3' , '-729' ) ; +test( macro , '9' , '7' , '4782969' ) ; +test( macro , '-9' , '7' , '-4782969' ) ; +test( macro , '9' , '9' , '387420489' ) ; +test( macro , '-9' , '9' , '-387420489' ) ; +test( macro , '9' , '11' , '31381059609' ) ; +test( macro , '-9' , '11' , '-31381059609' ) ; +test( macro , '9' , '17' , '16677181699666569' ) ; +test( macro , '-9' , '17' , '-16677181699666569' ) ; +test( macro , '9' , '22' , '984770902183611232881' ) ; +test( macro , '-9' , '22' , '984770902183611232881' ) ; +test( macro , '9' , '24' , '79766443076872509863361' ) ; +test( macro , '-9' , '24' , '79766443076872509863361' ) ; +test( macro , '9' , '27' , '58149737003040059690390169' ) ; +test( macro , '-9' , '27' , '-58149737003040059690390169' ) ; +test( macro , '9' , '29' , '4710128697246244834921603689' ) ; +test( macro , '-9' , '29' , '-4710128697246244834921603689' ) ; +test( macro , '9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '-9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '-9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '3' , '1331' ) ; +test( macro , '-11' , '3' , '-1331' ) ; +test( macro , '11' , '7' , '19487171' ) ; +test( macro , '-11' , '7' , '-19487171' ) ; +test( macro , '11' , '9' , '2357947691' ) ; +test( macro , '-11' , '9' , '-2357947691' ) ; +test( macro , '11' , '11' , '285311670611' ) ; +test( macro , '-11' , '11' , '-285311670611' ) ; +test( macro , '11' , '17' , '505447028499293771' ) ; +test( macro , '-11' , '17' , '-505447028499293771' ) ; +test( macro , '11' , '22' , '81402749386839761113321' ) ; +test( macro , '-11' , '22' , '81402749386839761113321' ) ; +test( macro , '11' , '24' , '9849732675807611094711841' ) ; +test( macro , '-11' , '24' , '9849732675807611094711841' ) ; +test( macro , '11' , '27' , '13109994191499930367061460371' ) ; +test( macro , '-11' , '27' , '-13109994191499930367061460371' ) ; +test( macro , '11' , '29' , '1586309297171491574414436704891' ) ; +test( macro , '-11' , '29' , '-1586309297171491574414436704891' ) ; +test( macro , '11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '-11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '-11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , '1' , '17' ) ; +test( macro , '-17' , '1' , '-17' ) ; +test( macro , '17' , '3' , '4913' ) ; +test( macro , '-17' , '3' , '-4913' ) ; +test( macro , '17' , '7' , '410338673' ) ; +test( macro , '-17' , '7' , '-410338673' ) ; +test( macro , '17' , '9' , '118587876497' ) ; +test( macro , '-17' , '9' , '-118587876497' ) ; +test( macro , '17' , '11' , '34271896307633' ) ; +test( macro , '-17' , '11' , '-34271896307633' ) ; +test( macro , '17' , '17' , '827240261886336764177' ) ; +test( macro , '-17' , '17' , '-827240261886336764177' ) ; +test( macro , '17' , '22' , '1174562876521148458974062689' ) ; +test( macro , '-17' , '22' , '1174562876521148458974062689' ) ; +test( macro , '17' , '24' , '339448671314611904643504117121' ) ; +test( macro , '-17' , '24' , '339448671314611904643504117121' ) ; +test( macro , '17' , '27' , '1667711322168688287513535727415473' ) ; +test( macro , '-17' , '27' , '-1667711322168688287513535727415473' ) ; +test( macro , '17' , '29' , '481968572106750915091411825223071697' ) ; +test( macro , '-17' , '29' , '-481968572106750915091411825223071697' ) ; +test( macro , '17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '-17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '-17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '3' , '10648' ) ; +test( macro , '-22' , '3' , '-10648' ) ; +test( macro , '22' , '7' , '2494357888' ) ; +test( macro , '-22' , '7' , '-2494357888' ) ; +test( macro , '22' , '9' , '1207269217792' ) ; +test( macro , '-22' , '9' , '-1207269217792' ) ; +test( macro , '22' , '11' , '584318301411328' ) ; +test( macro , '-22' , '11' , '-584318301411328' ) ; +test( macro , '22' , '17' , '66249952919459433152512' ) ; +test( macro , '-22' , '17' , '-66249952919459433152512' ) ; +test( macro , '22' , '22' , '341427877364219557396646723584' ) ; +test( macro , '-22' , '22' , '341427877364219557396646723584' ) ; +test( macro , '22' , '24' , '165251092644282265779977014214656' ) ; +test( macro , '-22' , '24' , '165251092644282265779977014214656' ) ; +test( macro , '22' , '27' , '1759593634476317566025195247357657088' ) ; +test( macro , '-22' , '27' , '-1759593634476317566025195247357657088' ) ; +test( macro , '22' , '29' , '851643319086537701956194499721106030592' ) ; +test( macro , '-22' , '29' , '-851643319086537701956194499721106030592' ) ; +test( macro , '22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '-22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '-22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '3' , '13824' ) ; +test( macro , '-24' , '3' , '-13824' ) ; +test( macro , '24' , '7' , '4586471424' ) ; +test( macro , '-24' , '7' , '-4586471424' ) ; +test( macro , '24' , '9' , '2641807540224' ) ; +test( macro , '-24' , '9' , '-2641807540224' ) ; +test( macro , '24' , '11' , '1521681143169024' ) ; +test( macro , '-24' , '11' , '-1521681143169024' ) ; +test( macro , '24' , '17' , '290797794982682557415424' ) ; +test( macro , '-24' , '17' , '-290797794982682557415424' ) ; +test( macro , '24' , '22' , '2315513501476187716057433112576' ) ; +test( macro , '-24' , '22' , '2315513501476187716057433112576' ) ; +test( macro , '24' , '24' , '1333735776850284124449081472843776' ) ; +test( macro , '-24' , '24' , '1333735776850284124449081472843776' ) ; +test( macro , '24' , '27' , '18437563379178327736384102280592359424' ) ; +test( macro , '-24' , '27' , '-18437563379178327736384102280592359424' ) ; +test( macro , '24' , '29' , '10620036506406716776157242913621199028224' ) ; +test( macro , '-24' , '29' , '-10620036506406716776157242913621199028224' ) ; +test( macro , '24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '-24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '-24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '3' , '19683' ) ; +test( macro , '-27' , '3' , '-19683' ) ; +test( macro , '27' , '7' , '10460353203' ) ; +test( macro , '-27' , '7' , '-10460353203' ) ; +test( macro , '27' , '9' , '7625597484987' ) ; +test( macro , '-27' , '9' , '-7625597484987' ) ; +test( macro , '27' , '11' , '5559060566555523' ) ; +test( macro , '-27' , '11' , '-5559060566555523' ) ; +test( macro , '27' , '17' , '2153693963075557766310747' ) ; +test( macro , '-27' , '17' , '-2153693963075557766310747' ) ; +test( macro , '27' , '22' , '30903154382632612361920641803529' ) ; +test( macro , '-27' , '22' , '30903154382632612361920641803529' ) ; +test( macro , '27' , '24' , '22528399544939174411840147874772641' ) ; +test( macro , '-27' , '24' , '22528399544939174411840147874772641' ) ; +test( macro , '27' , '27' , '443426488243037769948249630619149892803' ) ; +test( macro , '-27' , '27' , '-443426488243037769948249630619149892803' ) ; +test( macro , '27' , '29' , '323257909929174534292273980721360271853387' ) ; +test( macro , '-27' , '29' , '-323257909929174534292273980721360271853387' ) ; +test( macro , '27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '-27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '-27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '3' , '24389' ) ; +test( macro , '-29' , '3' , '-24389' ) ; +test( macro , '29' , '7' , '17249876309' ) ; +test( macro , '-29' , '7' , '-17249876309' ) ; +test( macro , '29' , '9' , '14507145975869' ) ; +test( macro , '-29' , '9' , '-14507145975869' ) ; +test( macro , '29' , '11' , '12200509765705829' ) ; +test( macro , '-29' , '11' , '-12200509765705829' ) ; +test( macro , '29' , '17' , '7257147736730073114838109' ) ; +test( macro , '-29' , '17' , '-7257147736730073114838109' ) ; +test( macro , '29' , '22' , '148852438543083302439338564577241' ) ; +test( macro , '-29' , '22' , '148852438543083302439338564577241' ) ; +test( macro , '29' , '24' , '125184900814733057351483732809459681' ) ; +test( macro , '-29' , '24' , '125184900814733057351483732809459681' ) ; +test( macro , '29' , '27' , '3053134545970524535745336759489912159909' ) ; +test( macro , '-29' , '27' , '-3053134545970524535745336759489912159909' ) ; +test( macro , '29' , '29' , '2567686153161211134561828214731016126483469' ) ; +test( macro , '-29' , '29' , '-2567686153161211134561828214731016126483469' ) ; +test( macro , '29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '-29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '-29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '3' , '1879080904' ) ; +test( macro , '-1234' , '3' , '-1879080904' ) ; +test( macro , '1234' , '7' , '4357186184021382204544' ) ; +test( macro , '-1234' , '7' , '-4357186184021382204544' ) ; +test( macro , '1234' , '9' , '6634931404835663880262603264' ) ; +test( macro , '-1234' , '9' , '-6634931404835663880262603264' ) ; +test( macro , '1234' , '11' , '10103381606301936187653160695875584' ) ; +test( macro , '-1234' , '11' , '-10103381606301936187653160695875584' ) ; +test( macro , '1234' , '17' , '35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '-1234' , '17' , '-35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '1234' , '22' , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '-1234' , '22' , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '1234' , '24' , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '-1234' , '24' , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '1234' , '27' , '292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '-1234' , '27' , '-292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '1234' , '29' , '444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '-1234' , '29' , '-444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '-1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '-1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '3' , '183056925752' ) ; +test( macro , '-5678' , '3' , '-183056925752' ) ; +test( macro , '5678' , '7' , '190268860537460461066531712' ) ; +test( macro , '-5678' , '7' , '-190268860537460461066531712' ) ; +test( macro , '5678' , '9' , '6134207938767795427279285370859008' ) ; +test( macro , '-5678' , '9' , '-6134207938767795427279285370859008' ) ; +test( macro , '5678' , '11' , '197764925536165073952129140102317226473472' ) ; +test( macro , '-5678' , '11' , '-197764925536165073952129140102317226473472' ) ; +test( macro , '5678' , '17' , '6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '-5678' , '17' , '-6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '5678' , '22' , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '-5678' , '22' , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '5678' , '24' , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '-5678' , '24' , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '5678' , '27' , '230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '-5678' , '27' , '-230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '5678' , '29' , '7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '-5678' , '29' , '-7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '-5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '-5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; diff --git a/test/src/integer/arithmetic/ipown.js b/test/src/integer/arithmetic/ipown.js new file mode 100644 index 0000000..8e1e3e7 --- /dev/null +++ b/test/src/integer/arithmetic/ipown.js @@ -0,0 +1,300 @@ +import test from 'ava' ; +import { parse , stringify , ipown } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = ipown( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `ipown(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , 3 , '1' ) ; +test( macro , '-1' , 3 , '-1' ) ; +test( macro , '1' , 7 , '1' ) ; +test( macro , '-1' , 7 , '-1' ) ; +test( macro , '1' , 9 , '1' ) ; +test( macro , '-1' , 9 , '-1' ) ; +test( macro , '1' , 11 , '1' ) ; +test( macro , '-1' , 11 , '-1' ) ; +test( macro , '1' , 17 , '1' ) ; +test( macro , '-1' , 17 , '-1' ) ; +test( macro , '1' , 22 , '1' ) ; +test( macro , '-1' , 22 , '1' ) ; +test( macro , '1' , 24 , '1' ) ; +test( macro , '-1' , 24 , '1' ) ; +test( macro , '1' , 27 , '1' ) ; +test( macro , '-1' , 27 , '-1' ) ; +test( macro , '1' , 29 , '1' ) ; +test( macro , '-1' , 29 , '-1' ) ; +test( macro , '1' , 1234 , '1' ) ; +test( macro , '-1' , 1234 , '1' ) ; +test( macro , '1' , 5678 , '1' ) ; +test( macro , '-1' , 5678 , '1' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , 3 , '27' ) ; +test( macro , '-3' , 3 , '-27' ) ; +test( macro , '3' , 7 , '2187' ) ; +test( macro , '-3' , 7 , '-2187' ) ; +test( macro , '3' , 9 , '19683' ) ; +test( macro , '-3' , 9 , '-19683' ) ; +test( macro , '3' , 11 , '177147' ) ; +test( macro , '-3' , 11 , '-177147' ) ; +test( macro , '3' , 17 , '129140163' ) ; +test( macro , '-3' , 17 , '-129140163' ) ; +test( macro , '3' , 22 , '31381059609' ) ; +test( macro , '-3' , 22 , '31381059609' ) ; +test( macro , '3' , 24 , '282429536481' ) ; +test( macro , '-3' , 24 , '282429536481' ) ; +test( macro , '3' , 27 , '7625597484987' ) ; +test( macro , '-3' , 27 , '-7625597484987' ) ; +test( macro , '3' , 29 , '68630377364883' ) ; +test( macro , '-3' , 29 , '-68630377364883' ) ; +test( macro , '3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '-3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '-3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , 3 , '343' ) ; +test( macro , '-7' , 3 , '-343' ) ; +test( macro , '7' , 7 , '823543' ) ; +test( macro , '-7' , 7 , '-823543' ) ; +test( macro , '7' , 9 , '40353607' ) ; +test( macro , '-7' , 9 , '-40353607' ) ; +test( macro , '7' , 11 , '1977326743' ) ; +test( macro , '-7' , 11 , '-1977326743' ) ; +test( macro , '7' , 17 , '232630513987207' ) ; +test( macro , '-7' , 17 , '-232630513987207' ) ; +test( macro , '7' , 22 , '3909821048582988049' ) ; +test( macro , '-7' , 22 , '3909821048582988049' ) ; +test( macro , '7' , 24 , '191581231380566414401' ) ; +test( macro , '-7' , 24 , '191581231380566414401' ) ; +test( macro , '7' , 27 , '65712362363534280139543' ) ; +test( macro , '-7' , 27 , '-65712362363534280139543' ) ; +test( macro , '7' , 29 , '3219905755813179726837607' ) ; +test( macro , '-7' , 29 , '-3219905755813179726837607' ) ; +test( macro , '7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '-7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '-7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , 3 , '729' ) ; +test( macro , '-9' , 3 , '-729' ) ; +test( macro , '9' , 7 , '4782969' ) ; +test( macro , '-9' , 7 , '-4782969' ) ; +test( macro , '9' , 9 , '387420489' ) ; +test( macro , '-9' , 9 , '-387420489' ) ; +test( macro , '9' , 11 , '31381059609' ) ; +test( macro , '-9' , 11 , '-31381059609' ) ; +test( macro , '9' , 17 , '16677181699666569' ) ; +test( macro , '-9' , 17 , '-16677181699666569' ) ; +test( macro , '9' , 22 , '984770902183611232881' ) ; +test( macro , '-9' , 22 , '984770902183611232881' ) ; +test( macro , '9' , 24 , '79766443076872509863361' ) ; +test( macro , '-9' , 24 , '79766443076872509863361' ) ; +test( macro , '9' , 27 , '58149737003040059690390169' ) ; +test( macro , '-9' , 27 , '-58149737003040059690390169' ) ; +test( macro , '9' , 29 , '4710128697246244834921603689' ) ; +test( macro , '-9' , 29 , '-4710128697246244834921603689' ) ; +test( macro , '9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '-9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '-9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , 3 , '1331' ) ; +test( macro , '-11' , 3 , '-1331' ) ; +test( macro , '11' , 7 , '19487171' ) ; +test( macro , '-11' , 7 , '-19487171' ) ; +test( macro , '11' , 9 , '2357947691' ) ; +test( macro , '-11' , 9 , '-2357947691' ) ; +test( macro , '11' , 11 , '285311670611' ) ; +test( macro , '-11' , 11 , '-285311670611' ) ; +test( macro , '11' , 17 , '505447028499293771' ) ; +test( macro , '-11' , 17 , '-505447028499293771' ) ; +test( macro , '11' , 22 , '81402749386839761113321' ) ; +test( macro , '-11' , 22 , '81402749386839761113321' ) ; +test( macro , '11' , 24 , '9849732675807611094711841' ) ; +test( macro , '-11' , 24 , '9849732675807611094711841' ) ; +test( macro , '11' , 27 , '13109994191499930367061460371' ) ; +test( macro , '-11' , 27 , '-13109994191499930367061460371' ) ; +test( macro , '11' , 29 , '1586309297171491574414436704891' ) ; +test( macro , '-11' , 29 , '-1586309297171491574414436704891' ) ; +test( macro , '11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '-11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '-11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , 3 , '4913' ) ; +test( macro , '-17' , 3 , '-4913' ) ; +test( macro , '17' , 7 , '410338673' ) ; +test( macro , '-17' , 7 , '-410338673' ) ; +test( macro , '17' , 9 , '118587876497' ) ; +test( macro , '-17' , 9 , '-118587876497' ) ; +test( macro , '17' , 11 , '34271896307633' ) ; +test( macro , '-17' , 11 , '-34271896307633' ) ; +test( macro , '17' , 17 , '827240261886336764177' ) ; +test( macro , '-17' , 17 , '-827240261886336764177' ) ; +test( macro , '17' , 22 , '1174562876521148458974062689' ) ; +test( macro , '-17' , 22 , '1174562876521148458974062689' ) ; +test( macro , '17' , 24 , '339448671314611904643504117121' ) ; +test( macro , '-17' , 24 , '339448671314611904643504117121' ) ; +test( macro , '17' , 27 , '1667711322168688287513535727415473' ) ; +test( macro , '-17' , 27 , '-1667711322168688287513535727415473' ) ; +test( macro , '17' , 29 , '481968572106750915091411825223071697' ) ; +test( macro , '-17' , 29 , '-481968572106750915091411825223071697' ) ; +test( macro , '17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '-17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '-17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , 3 , '10648' ) ; +test( macro , '-22' , 3 , '-10648' ) ; +test( macro , '22' , 7 , '2494357888' ) ; +test( macro , '-22' , 7 , '-2494357888' ) ; +test( macro , '22' , 9 , '1207269217792' ) ; +test( macro , '-22' , 9 , '-1207269217792' ) ; +test( macro , '22' , 11 , '584318301411328' ) ; +test( macro , '-22' , 11 , '-584318301411328' ) ; +test( macro , '22' , 17 , '66249952919459433152512' ) ; +test( macro , '-22' , 17 , '-66249952919459433152512' ) ; +test( macro , '22' , 22 , '341427877364219557396646723584' ) ; +test( macro , '-22' , 22 , '341427877364219557396646723584' ) ; +test( macro , '22' , 24 , '165251092644282265779977014214656' ) ; +test( macro , '-22' , 24 , '165251092644282265779977014214656' ) ; +test( macro , '22' , 27 , '1759593634476317566025195247357657088' ) ; +test( macro , '-22' , 27 , '-1759593634476317566025195247357657088' ) ; +test( macro , '22' , 29 , '851643319086537701956194499721106030592' ) ; +test( macro , '-22' , 29 , '-851643319086537701956194499721106030592' ) ; +test( macro , '22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '-22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '-22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , 3 , '13824' ) ; +test( macro , '-24' , 3 , '-13824' ) ; +test( macro , '24' , 7 , '4586471424' ) ; +test( macro , '-24' , 7 , '-4586471424' ) ; +test( macro , '24' , 9 , '2641807540224' ) ; +test( macro , '-24' , 9 , '-2641807540224' ) ; +test( macro , '24' , 11 , '1521681143169024' ) ; +test( macro , '-24' , 11 , '-1521681143169024' ) ; +test( macro , '24' , 17 , '290797794982682557415424' ) ; +test( macro , '-24' , 17 , '-290797794982682557415424' ) ; +test( macro , '24' , 22 , '2315513501476187716057433112576' ) ; +test( macro , '-24' , 22 , '2315513501476187716057433112576' ) ; +test( macro , '24' , 24 , '1333735776850284124449081472843776' ) ; +test( macro , '-24' , 24 , '1333735776850284124449081472843776' ) ; +test( macro , '24' , 27 , '18437563379178327736384102280592359424' ) ; +test( macro , '-24' , 27 , '-18437563379178327736384102280592359424' ) ; +test( macro , '24' , 29 , '10620036506406716776157242913621199028224' ) ; +test( macro , '-24' , 29 , '-10620036506406716776157242913621199028224' ) ; +test( macro , '24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '-24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '-24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , 3 , '19683' ) ; +test( macro , '-27' , 3 , '-19683' ) ; +test( macro , '27' , 7 , '10460353203' ) ; +test( macro , '-27' , 7 , '-10460353203' ) ; +test( macro , '27' , 9 , '7625597484987' ) ; +test( macro , '-27' , 9 , '-7625597484987' ) ; +test( macro , '27' , 11 , '5559060566555523' ) ; +test( macro , '-27' , 11 , '-5559060566555523' ) ; +test( macro , '27' , 17 , '2153693963075557766310747' ) ; +test( macro , '-27' , 17 , '-2153693963075557766310747' ) ; +test( macro , '27' , 22 , '30903154382632612361920641803529' ) ; +test( macro , '-27' , 22 , '30903154382632612361920641803529' ) ; +test( macro , '27' , 24 , '22528399544939174411840147874772641' ) ; +test( macro , '-27' , 24 , '22528399544939174411840147874772641' ) ; +test( macro , '27' , 27 , '443426488243037769948249630619149892803' ) ; +test( macro , '-27' , 27 , '-443426488243037769948249630619149892803' ) ; +test( macro , '27' , 29 , '323257909929174534292273980721360271853387' ) ; +test( macro , '-27' , 29 , '-323257909929174534292273980721360271853387' ) ; +test( macro , '27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '-27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '-27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , 3 , '24389' ) ; +test( macro , '-29' , 3 , '-24389' ) ; +test( macro , '29' , 7 , '17249876309' ) ; +test( macro , '-29' , 7 , '-17249876309' ) ; +test( macro , '29' , 9 , '14507145975869' ) ; +test( macro , '-29' , 9 , '-14507145975869' ) ; +test( macro , '29' , 11 , '12200509765705829' ) ; +test( macro , '-29' , 11 , '-12200509765705829' ) ; +test( macro , '29' , 17 , '7257147736730073114838109' ) ; +test( macro , '-29' , 17 , '-7257147736730073114838109' ) ; +test( macro , '29' , 22 , '148852438543083302439338564577241' ) ; +test( macro , '-29' , 22 , '148852438543083302439338564577241' ) ; +test( macro , '29' , 24 , '125184900814733057351483732809459681' ) ; +test( macro , '-29' , 24 , '125184900814733057351483732809459681' ) ; +test( macro , '29' , 27 , '3053134545970524535745336759489912159909' ) ; +test( macro , '-29' , 27 , '-3053134545970524535745336759489912159909' ) ; +test( macro , '29' , 29 , '2567686153161211134561828214731016126483469' ) ; +test( macro , '-29' , 29 , '-2567686153161211134561828214731016126483469' ) ; +test( macro , '29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '-29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '-29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , 3 , '1879080904' ) ; +test( macro , '-1234' , 3 , '-1879080904' ) ; +test( macro , '1234' , 7 , '4357186184021382204544' ) ; +test( macro , '-1234' , 7 , '-4357186184021382204544' ) ; +test( macro , '1234' , 9 , '6634931404835663880262603264' ) ; +test( macro , '-1234' , 9 , '-6634931404835663880262603264' ) ; +test( macro , '1234' , 11 , '10103381606301936187653160695875584' ) ; +test( macro , '-1234' , 11 , '-10103381606301936187653160695875584' ) ; +test( macro , '1234' , 17 , '35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '-1234' , 17 , '-35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '1234' , 22 , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '-1234' , 22 , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '1234' , 24 , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '-1234' , 24 , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '1234' , 27 , '292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '-1234' , 27 , '-292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '1234' , 29 , '444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '-1234' , 29 , '-444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '-1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '-1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , 3 , '183056925752' ) ; +test( macro , '-5678' , 3 , '-183056925752' ) ; +test( macro , '5678' , 7 , '190268860537460461066531712' ) ; +test( macro , '-5678' , 7 , '-190268860537460461066531712' ) ; +test( macro , '5678' , 9 , '6134207938767795427279285370859008' ) ; +test( macro , '-5678' , 9 , '-6134207938767795427279285370859008' ) ; +test( macro , '5678' , 11 , '197764925536165073952129140102317226473472' ) ; +test( macro , '-5678' , 11 , '-197764925536165073952129140102317226473472' ) ; +test( macro , '5678' , 17 , '6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '-5678' , 17 , '-6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '5678' , 22 , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '-5678' , 22 , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '5678' , 24 , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '-5678' , 24 , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '5678' , 27 , '230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '-5678' , 27 , '-230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '5678' , 29 , '7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '-5678' , 29 , '-7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '-5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '-5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; diff --git a/test/src/integer/arithmetic/isub.js b/test/src/integer/arithmetic/isub.js index 43204bd..f72673f 100644 --- a/test/src/integer/arithmetic/isub.js +++ b/test/src/integer/arithmetic/isub.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} -= ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `isub(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-2' ) ; test( macro , '1' , '-1' , '2' ) ; test( macro , '-1' , '-1' , '0' ) ; +test( macro , '1' , '3' , '-2' ) ; +test( macro , '-1' , '3' , '-4' ) ; +test( macro , '1' , '-3' , '4' ) ; +test( macro , '-1' , '-3' , '2' ) ; +test( macro , '1' , '7' , '-6' ) ; +test( macro , '-1' , '7' , '-8' ) ; +test( macro , '1' , '-7' , '8' ) ; +test( macro , '-1' , '-7' , '6' ) ; +test( macro , '1' , '9' , '-8' ) ; +test( macro , '-1' , '9' , '-10' ) ; +test( macro , '1' , '-9' , '10' ) ; +test( macro , '-1' , '-9' , '8' ) ; +test( macro , '1' , '11' , '-10' ) ; +test( macro , '-1' , '11' , '-12' ) ; +test( macro , '1' , '-11' , '12' ) ; +test( macro , '-1' , '-11' , '10' ) ; test( macro , '1' , '17' , '-16' ) ; test( macro , '-1' , '17' , '-18' ) ; test( macro , '1' , '-17' , '18' ) ; test( macro , '-1' , '-17' , '16' ) ; -test( macro , '1' , '51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '51676101935731' , '-51676101935732' ) ; -test( macro , '1' , '-51676101935731' , '51676101935732' ) ; -test( macro , '-1' , '-51676101935731' , '51676101935730' ) ; +test( macro , '1' , '22' , '-21' ) ; +test( macro , '-1' , '22' , '-23' ) ; +test( macro , '1' , '-22' , '23' ) ; +test( macro , '-1' , '-22' , '21' ) ; +test( macro , '1' , '24' , '-23' ) ; +test( macro , '-1' , '24' , '-25' ) ; +test( macro , '1' , '-24' , '25' ) ; +test( macro , '-1' , '-24' , '23' ) ; +test( macro , '1' , '27' , '-26' ) ; +test( macro , '-1' , '27' , '-28' ) ; +test( macro , '1' , '-27' , '28' ) ; +test( macro , '-1' , '-27' , '26' ) ; +test( macro , '1' , '29' , '-28' ) ; +test( macro , '-1' , '29' , '-30' ) ; +test( macro , '1' , '-29' , '30' ) ; +test( macro , '-1' , '-29' , '28' ) ; +test( macro , '1' , '1234' , '-1233' ) ; +test( macro , '-1' , '1234' , '-1235' ) ; +test( macro , '1' , '-1234' , '1235' ) ; +test( macro , '-1' , '-1234' , '1233' ) ; +test( macro , '1' , '5678' , '-5677' ) ; +test( macro , '-1' , '5678' , '-5679' ) ; +test( macro , '1' , '-5678' , '5679' ) ; +test( macro , '-1' , '-5678' , '5677' ) ; test( macro , '1' , '1073741824' , '-1073741823' ) ; test( macro , '-1' , '1073741824' , '-1073741825' ) ; test( macro , '1' , '-1073741824' , '1073741825' ) ; test( macro , '-1' , '-1073741824' , '1073741823' ) ; +test( macro , '1' , '51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '51676101935731' , '-51676101935732' ) ; +test( macro , '1' , '-51676101935731' , '51676101935732' ) ; +test( macro , '-1' , '-51676101935731' , '51676101935730' ) ; test( macro , '1' , '717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770250' ) ; test( macro , '1' , '-717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770248' ) ; +test( macro , '3' , '1' , '2' ) ; +test( macro , '-3' , '1' , '-4' ) ; +test( macro , '3' , '-1' , '4' ) ; +test( macro , '-3' , '-1' , '-2' ) ; +test( macro , '3' , '3' , '0' ) ; +test( macro , '-3' , '3' , '-6' ) ; +test( macro , '3' , '-3' , '6' ) ; +test( macro , '-3' , '-3' , '0' ) ; +test( macro , '3' , '7' , '-4' ) ; +test( macro , '-3' , '7' , '-10' ) ; +test( macro , '3' , '-7' , '10' ) ; +test( macro , '-3' , '-7' , '4' ) ; +test( macro , '3' , '9' , '-6' ) ; +test( macro , '-3' , '9' , '-12' ) ; +test( macro , '3' , '-9' , '12' ) ; +test( macro , '-3' , '-9' , '6' ) ; +test( macro , '3' , '11' , '-8' ) ; +test( macro , '-3' , '11' , '-14' ) ; +test( macro , '3' , '-11' , '14' ) ; +test( macro , '-3' , '-11' , '8' ) ; +test( macro , '3' , '17' , '-14' ) ; +test( macro , '-3' , '17' , '-20' ) ; +test( macro , '3' , '-17' , '20' ) ; +test( macro , '-3' , '-17' , '14' ) ; +test( macro , '3' , '22' , '-19' ) ; +test( macro , '-3' , '22' , '-25' ) ; +test( macro , '3' , '-22' , '25' ) ; +test( macro , '-3' , '-22' , '19' ) ; +test( macro , '3' , '24' , '-21' ) ; +test( macro , '-3' , '24' , '-27' ) ; +test( macro , '3' , '-24' , '27' ) ; +test( macro , '-3' , '-24' , '21' ) ; +test( macro , '3' , '27' , '-24' ) ; +test( macro , '-3' , '27' , '-30' ) ; +test( macro , '3' , '-27' , '30' ) ; +test( macro , '-3' , '-27' , '24' ) ; +test( macro , '3' , '29' , '-26' ) ; +test( macro , '-3' , '29' , '-32' ) ; +test( macro , '3' , '-29' , '32' ) ; +test( macro , '-3' , '-29' , '26' ) ; +test( macro , '3' , '1234' , '-1231' ) ; +test( macro , '-3' , '1234' , '-1237' ) ; +test( macro , '3' , '-1234' , '1237' ) ; +test( macro , '-3' , '-1234' , '1231' ) ; +test( macro , '3' , '5678' , '-5675' ) ; +test( macro , '-3' , '5678' , '-5681' ) ; +test( macro , '3' , '-5678' , '5681' ) ; +test( macro , '-3' , '-5678' , '5675' ) ; +test( macro , '3' , '1073741824' , '-1073741821' ) ; +test( macro , '-3' , '1073741824' , '-1073741827' ) ; +test( macro , '3' , '-1073741824' , '1073741827' ) ; +test( macro , '-3' , '-1073741824' , '1073741821' ) ; +test( macro , '3' , '51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '51676101935731' , '-51676101935734' ) ; +test( macro , '3' , '-51676101935731' , '51676101935734' ) ; +test( macro , '-3' , '-51676101935731' , '51676101935728' ) ; +test( macro , '3' , '717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '3' , '-717897987691852588770249' , '717897987691852588770252' ) ; +test( macro , '-3' , '-717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '7' , '1' , '6' ) ; +test( macro , '-7' , '1' , '-8' ) ; +test( macro , '7' , '-1' , '8' ) ; +test( macro , '-7' , '-1' , '-6' ) ; +test( macro , '7' , '3' , '4' ) ; +test( macro , '-7' , '3' , '-10' ) ; +test( macro , '7' , '-3' , '10' ) ; +test( macro , '-7' , '-3' , '-4' ) ; +test( macro , '7' , '7' , '0' ) ; +test( macro , '-7' , '7' , '-14' ) ; +test( macro , '7' , '-7' , '14' ) ; +test( macro , '-7' , '-7' , '0' ) ; +test( macro , '7' , '9' , '-2' ) ; +test( macro , '-7' , '9' , '-16' ) ; +test( macro , '7' , '-9' , '16' ) ; +test( macro , '-7' , '-9' , '2' ) ; +test( macro , '7' , '11' , '-4' ) ; +test( macro , '-7' , '11' , '-18' ) ; +test( macro , '7' , '-11' , '18' ) ; +test( macro , '-7' , '-11' , '4' ) ; +test( macro , '7' , '17' , '-10' ) ; +test( macro , '-7' , '17' , '-24' ) ; +test( macro , '7' , '-17' , '24' ) ; +test( macro , '-7' , '-17' , '10' ) ; +test( macro , '7' , '22' , '-15' ) ; +test( macro , '-7' , '22' , '-29' ) ; +test( macro , '7' , '-22' , '29' ) ; +test( macro , '-7' , '-22' , '15' ) ; +test( macro , '7' , '24' , '-17' ) ; +test( macro , '-7' , '24' , '-31' ) ; +test( macro , '7' , '-24' , '31' ) ; +test( macro , '-7' , '-24' , '17' ) ; +test( macro , '7' , '27' , '-20' ) ; +test( macro , '-7' , '27' , '-34' ) ; +test( macro , '7' , '-27' , '34' ) ; +test( macro , '-7' , '-27' , '20' ) ; +test( macro , '7' , '29' , '-22' ) ; +test( macro , '-7' , '29' , '-36' ) ; +test( macro , '7' , '-29' , '36' ) ; +test( macro , '-7' , '-29' , '22' ) ; +test( macro , '7' , '1234' , '-1227' ) ; +test( macro , '-7' , '1234' , '-1241' ) ; +test( macro , '7' , '-1234' , '1241' ) ; +test( macro , '-7' , '-1234' , '1227' ) ; +test( macro , '7' , '5678' , '-5671' ) ; +test( macro , '-7' , '5678' , '-5685' ) ; +test( macro , '7' , '-5678' , '5685' ) ; +test( macro , '-7' , '-5678' , '5671' ) ; +test( macro , '7' , '1073741824' , '-1073741817' ) ; +test( macro , '-7' , '1073741824' , '-1073741831' ) ; +test( macro , '7' , '-1073741824' , '1073741831' ) ; +test( macro , '-7' , '-1073741824' , '1073741817' ) ; +test( macro , '7' , '51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '51676101935731' , '-51676101935738' ) ; +test( macro , '7' , '-51676101935731' , '51676101935738' ) ; +test( macro , '-7' , '-51676101935731' , '51676101935724' ) ; +test( macro , '7' , '717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '7' , '-717897987691852588770249' , '717897987691852588770256' ) ; +test( macro , '-7' , '-717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '9' , '1' , '8' ) ; +test( macro , '-9' , '1' , '-10' ) ; +test( macro , '9' , '-1' , '10' ) ; +test( macro , '-9' , '-1' , '-8' ) ; +test( macro , '9' , '3' , '6' ) ; +test( macro , '-9' , '3' , '-12' ) ; +test( macro , '9' , '-3' , '12' ) ; +test( macro , '-9' , '-3' , '-6' ) ; +test( macro , '9' , '7' , '2' ) ; +test( macro , '-9' , '7' , '-16' ) ; +test( macro , '9' , '-7' , '16' ) ; +test( macro , '-9' , '-7' , '-2' ) ; +test( macro , '9' , '9' , '0' ) ; +test( macro , '-9' , '9' , '-18' ) ; +test( macro , '9' , '-9' , '18' ) ; +test( macro , '-9' , '-9' , '0' ) ; +test( macro , '9' , '11' , '-2' ) ; +test( macro , '-9' , '11' , '-20' ) ; +test( macro , '9' , '-11' , '20' ) ; +test( macro , '-9' , '-11' , '2' ) ; +test( macro , '9' , '17' , '-8' ) ; +test( macro , '-9' , '17' , '-26' ) ; +test( macro , '9' , '-17' , '26' ) ; +test( macro , '-9' , '-17' , '8' ) ; +test( macro , '9' , '22' , '-13' ) ; +test( macro , '-9' , '22' , '-31' ) ; +test( macro , '9' , '-22' , '31' ) ; +test( macro , '-9' , '-22' , '13' ) ; +test( macro , '9' , '24' , '-15' ) ; +test( macro , '-9' , '24' , '-33' ) ; +test( macro , '9' , '-24' , '33' ) ; +test( macro , '-9' , '-24' , '15' ) ; +test( macro , '9' , '27' , '-18' ) ; +test( macro , '-9' , '27' , '-36' ) ; +test( macro , '9' , '-27' , '36' ) ; +test( macro , '-9' , '-27' , '18' ) ; +test( macro , '9' , '29' , '-20' ) ; +test( macro , '-9' , '29' , '-38' ) ; +test( macro , '9' , '-29' , '38' ) ; +test( macro , '-9' , '-29' , '20' ) ; +test( macro , '9' , '1234' , '-1225' ) ; +test( macro , '-9' , '1234' , '-1243' ) ; +test( macro , '9' , '-1234' , '1243' ) ; +test( macro , '-9' , '-1234' , '1225' ) ; +test( macro , '9' , '5678' , '-5669' ) ; +test( macro , '-9' , '5678' , '-5687' ) ; +test( macro , '9' , '-5678' , '5687' ) ; +test( macro , '-9' , '-5678' , '5669' ) ; +test( macro , '9' , '1073741824' , '-1073741815' ) ; +test( macro , '-9' , '1073741824' , '-1073741833' ) ; +test( macro , '9' , '-1073741824' , '1073741833' ) ; +test( macro , '-9' , '-1073741824' , '1073741815' ) ; +test( macro , '9' , '51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '51676101935731' , '-51676101935740' ) ; +test( macro , '9' , '-51676101935731' , '51676101935740' ) ; +test( macro , '-9' , '-51676101935731' , '51676101935722' ) ; +test( macro , '9' , '717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '9' , '-717897987691852588770249' , '717897987691852588770258' ) ; +test( macro , '-9' , '-717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '11' , '1' , '10' ) ; +test( macro , '-11' , '1' , '-12' ) ; +test( macro , '11' , '-1' , '12' ) ; +test( macro , '-11' , '-1' , '-10' ) ; +test( macro , '11' , '3' , '8' ) ; +test( macro , '-11' , '3' , '-14' ) ; +test( macro , '11' , '-3' , '14' ) ; +test( macro , '-11' , '-3' , '-8' ) ; +test( macro , '11' , '7' , '4' ) ; +test( macro , '-11' , '7' , '-18' ) ; +test( macro , '11' , '-7' , '18' ) ; +test( macro , '-11' , '-7' , '-4' ) ; +test( macro , '11' , '9' , '2' ) ; +test( macro , '-11' , '9' , '-20' ) ; +test( macro , '11' , '-9' , '20' ) ; +test( macro , '-11' , '-9' , '-2' ) ; +test( macro , '11' , '11' , '0' ) ; +test( macro , '-11' , '11' , '-22' ) ; +test( macro , '11' , '-11' , '22' ) ; +test( macro , '-11' , '-11' , '0' ) ; +test( macro , '11' , '17' , '-6' ) ; +test( macro , '-11' , '17' , '-28' ) ; +test( macro , '11' , '-17' , '28' ) ; +test( macro , '-11' , '-17' , '6' ) ; +test( macro , '11' , '22' , '-11' ) ; +test( macro , '-11' , '22' , '-33' ) ; +test( macro , '11' , '-22' , '33' ) ; +test( macro , '-11' , '-22' , '11' ) ; +test( macro , '11' , '24' , '-13' ) ; +test( macro , '-11' , '24' , '-35' ) ; +test( macro , '11' , '-24' , '35' ) ; +test( macro , '-11' , '-24' , '13' ) ; +test( macro , '11' , '27' , '-16' ) ; +test( macro , '-11' , '27' , '-38' ) ; +test( macro , '11' , '-27' , '38' ) ; +test( macro , '-11' , '-27' , '16' ) ; +test( macro , '11' , '29' , '-18' ) ; +test( macro , '-11' , '29' , '-40' ) ; +test( macro , '11' , '-29' , '40' ) ; +test( macro , '-11' , '-29' , '18' ) ; +test( macro , '11' , '1234' , '-1223' ) ; +test( macro , '-11' , '1234' , '-1245' ) ; +test( macro , '11' , '-1234' , '1245' ) ; +test( macro , '-11' , '-1234' , '1223' ) ; +test( macro , '11' , '5678' , '-5667' ) ; +test( macro , '-11' , '5678' , '-5689' ) ; +test( macro , '11' , '-5678' , '5689' ) ; +test( macro , '-11' , '-5678' , '5667' ) ; +test( macro , '11' , '1073741824' , '-1073741813' ) ; +test( macro , '-11' , '1073741824' , '-1073741835' ) ; +test( macro , '11' , '-1073741824' , '1073741835' ) ; +test( macro , '-11' , '-1073741824' , '1073741813' ) ; +test( macro , '11' , '51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '51676101935731' , '-51676101935742' ) ; +test( macro , '11' , '-51676101935731' , '51676101935742' ) ; +test( macro , '-11' , '-51676101935731' , '51676101935720' ) ; +test( macro , '11' , '717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '717897987691852588770249' , '-717897987691852588770260' ) ; +test( macro , '11' , '-717897987691852588770249' , '717897987691852588770260' ) ; +test( macro , '-11' , '-717897987691852588770249' , '717897987691852588770238' ) ; test( macro , '17' , '1' , '16' ) ; test( macro , '-17' , '1' , '-18' ) ; test( macro , '17' , '-1' , '18' ) ; test( macro , '-17' , '-1' , '-16' ) ; +test( macro , '17' , '3' , '14' ) ; +test( macro , '-17' , '3' , '-20' ) ; +test( macro , '17' , '-3' , '20' ) ; +test( macro , '-17' , '-3' , '-14' ) ; +test( macro , '17' , '7' , '10' ) ; +test( macro , '-17' , '7' , '-24' ) ; +test( macro , '17' , '-7' , '24' ) ; +test( macro , '-17' , '-7' , '-10' ) ; +test( macro , '17' , '9' , '8' ) ; +test( macro , '-17' , '9' , '-26' ) ; +test( macro , '17' , '-9' , '26' ) ; +test( macro , '-17' , '-9' , '-8' ) ; +test( macro , '17' , '11' , '6' ) ; +test( macro , '-17' , '11' , '-28' ) ; +test( macro , '17' , '-11' , '28' ) ; +test( macro , '-17' , '-11' , '-6' ) ; test( macro , '17' , '17' , '0' ) ; test( macro , '-17' , '17' , '-34' ) ; test( macro , '17' , '-17' , '34' ) ; test( macro , '-17' , '-17' , '0' ) ; -test( macro , '17' , '51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '51676101935731' , '-51676101935748' ) ; -test( macro , '17' , '-51676101935731' , '51676101935748' ) ; -test( macro , '-17' , '-51676101935731' , '51676101935714' ) ; +test( macro , '17' , '22' , '-5' ) ; +test( macro , '-17' , '22' , '-39' ) ; +test( macro , '17' , '-22' , '39' ) ; +test( macro , '-17' , '-22' , '5' ) ; +test( macro , '17' , '24' , '-7' ) ; +test( macro , '-17' , '24' , '-41' ) ; +test( macro , '17' , '-24' , '41' ) ; +test( macro , '-17' , '-24' , '7' ) ; +test( macro , '17' , '27' , '-10' ) ; +test( macro , '-17' , '27' , '-44' ) ; +test( macro , '17' , '-27' , '44' ) ; +test( macro , '-17' , '-27' , '10' ) ; +test( macro , '17' , '29' , '-12' ) ; +test( macro , '-17' , '29' , '-46' ) ; +test( macro , '17' , '-29' , '46' ) ; +test( macro , '-17' , '-29' , '12' ) ; +test( macro , '17' , '1234' , '-1217' ) ; +test( macro , '-17' , '1234' , '-1251' ) ; +test( macro , '17' , '-1234' , '1251' ) ; +test( macro , '-17' , '-1234' , '1217' ) ; +test( macro , '17' , '5678' , '-5661' ) ; +test( macro , '-17' , '5678' , '-5695' ) ; +test( macro , '17' , '-5678' , '5695' ) ; +test( macro , '-17' , '-5678' , '5661' ) ; test( macro , '17' , '1073741824' , '-1073741807' ) ; test( macro , '-17' , '1073741824' , '-1073741841' ) ; test( macro , '17' , '-1073741824' , '1073741841' ) ; test( macro , '-17' , '-1073741824' , '1073741807' ) ; +test( macro , '17' , '51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '51676101935731' , '-51676101935748' ) ; +test( macro , '17' , '-51676101935731' , '51676101935748' ) ; +test( macro , '-17' , '-51676101935731' , '51676101935714' ) ; test( macro , '17' , '717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '717897987691852588770249' , '-717897987691852588770266' ) ; test( macro , '17' , '-717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '-717897987691852588770249' , '717897987691852588770232' ) ; -test( macro , '51676101935731' , '1' , '51676101935730' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; -test( macro , '51676101935731' , '-1' , '51676101935732' ) ; -test( macro , '-51676101935731' , '-1' , '-51676101935730' ) ; -test( macro , '51676101935731' , '17' , '51676101935714' ) ; -test( macro , '-51676101935731' , '17' , '-51676101935748' ) ; -test( macro , '51676101935731' , '-17' , '51676101935748' ) ; -test( macro , '-51676101935731' , '-17' , '-51676101935714' ) ; -test( macro , '51676101935731' , '51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-103352203871462' ) ; -test( macro , '51676101935731' , '-51676101935731' , '103352203871462' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '51676101935731' , '1073741824' , '51675028193907' ) ; -test( macro , '-51676101935731' , '1073741824' , '-51677175677555' ) ; -test( macro , '51676101935731' , '-1073741824' , '51677175677555' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-51675028193907' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '22' , '1' , '21' ) ; +test( macro , '-22' , '1' , '-23' ) ; +test( macro , '22' , '-1' , '23' ) ; +test( macro , '-22' , '-1' , '-21' ) ; +test( macro , '22' , '3' , '19' ) ; +test( macro , '-22' , '3' , '-25' ) ; +test( macro , '22' , '-3' , '25' ) ; +test( macro , '-22' , '-3' , '-19' ) ; +test( macro , '22' , '7' , '15' ) ; +test( macro , '-22' , '7' , '-29' ) ; +test( macro , '22' , '-7' , '29' ) ; +test( macro , '-22' , '-7' , '-15' ) ; +test( macro , '22' , '9' , '13' ) ; +test( macro , '-22' , '9' , '-31' ) ; +test( macro , '22' , '-9' , '31' ) ; +test( macro , '-22' , '-9' , '-13' ) ; +test( macro , '22' , '11' , '11' ) ; +test( macro , '-22' , '11' , '-33' ) ; +test( macro , '22' , '-11' , '33' ) ; +test( macro , '-22' , '-11' , '-11' ) ; +test( macro , '22' , '17' , '5' ) ; +test( macro , '-22' , '17' , '-39' ) ; +test( macro , '22' , '-17' , '39' ) ; +test( macro , '-22' , '-17' , '-5' ) ; +test( macro , '22' , '22' , '0' ) ; +test( macro , '-22' , '22' , '-44' ) ; +test( macro , '22' , '-22' , '44' ) ; +test( macro , '-22' , '-22' , '0' ) ; +test( macro , '22' , '24' , '-2' ) ; +test( macro , '-22' , '24' , '-46' ) ; +test( macro , '22' , '-24' , '46' ) ; +test( macro , '-22' , '-24' , '2' ) ; +test( macro , '22' , '27' , '-5' ) ; +test( macro , '-22' , '27' , '-49' ) ; +test( macro , '22' , '-27' , '49' ) ; +test( macro , '-22' , '-27' , '5' ) ; +test( macro , '22' , '29' , '-7' ) ; +test( macro , '-22' , '29' , '-51' ) ; +test( macro , '22' , '-29' , '51' ) ; +test( macro , '-22' , '-29' , '7' ) ; +test( macro , '22' , '1234' , '-1212' ) ; +test( macro , '-22' , '1234' , '-1256' ) ; +test( macro , '22' , '-1234' , '1256' ) ; +test( macro , '-22' , '-1234' , '1212' ) ; +test( macro , '22' , '5678' , '-5656' ) ; +test( macro , '-22' , '5678' , '-5700' ) ; +test( macro , '22' , '-5678' , '5700' ) ; +test( macro , '-22' , '-5678' , '5656' ) ; +test( macro , '22' , '1073741824' , '-1073741802' ) ; +test( macro , '-22' , '1073741824' , '-1073741846' ) ; +test( macro , '22' , '-1073741824' , '1073741846' ) ; +test( macro , '-22' , '-1073741824' , '1073741802' ) ; +test( macro , '22' , '51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '51676101935731' , '-51676101935753' ) ; +test( macro , '22' , '-51676101935731' , '51676101935753' ) ; +test( macro , '-22' , '-51676101935731' , '51676101935709' ) ; +test( macro , '22' , '717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '22' , '-717897987691852588770249' , '717897987691852588770271' ) ; +test( macro , '-22' , '-717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '24' , '1' , '23' ) ; +test( macro , '-24' , '1' , '-25' ) ; +test( macro , '24' , '-1' , '25' ) ; +test( macro , '-24' , '-1' , '-23' ) ; +test( macro , '24' , '3' , '21' ) ; +test( macro , '-24' , '3' , '-27' ) ; +test( macro , '24' , '-3' , '27' ) ; +test( macro , '-24' , '-3' , '-21' ) ; +test( macro , '24' , '7' , '17' ) ; +test( macro , '-24' , '7' , '-31' ) ; +test( macro , '24' , '-7' , '31' ) ; +test( macro , '-24' , '-7' , '-17' ) ; +test( macro , '24' , '9' , '15' ) ; +test( macro , '-24' , '9' , '-33' ) ; +test( macro , '24' , '-9' , '33' ) ; +test( macro , '-24' , '-9' , '-15' ) ; +test( macro , '24' , '11' , '13' ) ; +test( macro , '-24' , '11' , '-35' ) ; +test( macro , '24' , '-11' , '35' ) ; +test( macro , '-24' , '-11' , '-13' ) ; +test( macro , '24' , '17' , '7' ) ; +test( macro , '-24' , '17' , '-41' ) ; +test( macro , '24' , '-17' , '41' ) ; +test( macro , '-24' , '-17' , '-7' ) ; +test( macro , '24' , '22' , '2' ) ; +test( macro , '-24' , '22' , '-46' ) ; +test( macro , '24' , '-22' , '46' ) ; +test( macro , '-24' , '-22' , '-2' ) ; +test( macro , '24' , '24' , '0' ) ; +test( macro , '-24' , '24' , '-48' ) ; +test( macro , '24' , '-24' , '48' ) ; +test( macro , '-24' , '-24' , '0' ) ; +test( macro , '24' , '27' , '-3' ) ; +test( macro , '-24' , '27' , '-51' ) ; +test( macro , '24' , '-27' , '51' ) ; +test( macro , '-24' , '-27' , '3' ) ; +test( macro , '24' , '29' , '-5' ) ; +test( macro , '-24' , '29' , '-53' ) ; +test( macro , '24' , '-29' , '53' ) ; +test( macro , '-24' , '-29' , '5' ) ; +test( macro , '24' , '1234' , '-1210' ) ; +test( macro , '-24' , '1234' , '-1258' ) ; +test( macro , '24' , '-1234' , '1258' ) ; +test( macro , '-24' , '-1234' , '1210' ) ; +test( macro , '24' , '5678' , '-5654' ) ; +test( macro , '-24' , '5678' , '-5702' ) ; +test( macro , '24' , '-5678' , '5702' ) ; +test( macro , '-24' , '-5678' , '5654' ) ; +test( macro , '24' , '1073741824' , '-1073741800' ) ; +test( macro , '-24' , '1073741824' , '-1073741848' ) ; +test( macro , '24' , '-1073741824' , '1073741848' ) ; +test( macro , '-24' , '-1073741824' , '1073741800' ) ; +test( macro , '24' , '51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '51676101935731' , '-51676101935755' ) ; +test( macro , '24' , '-51676101935731' , '51676101935755' ) ; +test( macro , '-24' , '-51676101935731' , '51676101935707' ) ; +test( macro , '24' , '717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '24' , '-717897987691852588770249' , '717897987691852588770273' ) ; +test( macro , '-24' , '-717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '27' , '1' , '26' ) ; +test( macro , '-27' , '1' , '-28' ) ; +test( macro , '27' , '-1' , '28' ) ; +test( macro , '-27' , '-1' , '-26' ) ; +test( macro , '27' , '3' , '24' ) ; +test( macro , '-27' , '3' , '-30' ) ; +test( macro , '27' , '-3' , '30' ) ; +test( macro , '-27' , '-3' , '-24' ) ; +test( macro , '27' , '7' , '20' ) ; +test( macro , '-27' , '7' , '-34' ) ; +test( macro , '27' , '-7' , '34' ) ; +test( macro , '-27' , '-7' , '-20' ) ; +test( macro , '27' , '9' , '18' ) ; +test( macro , '-27' , '9' , '-36' ) ; +test( macro , '27' , '-9' , '36' ) ; +test( macro , '-27' , '-9' , '-18' ) ; +test( macro , '27' , '11' , '16' ) ; +test( macro , '-27' , '11' , '-38' ) ; +test( macro , '27' , '-11' , '38' ) ; +test( macro , '-27' , '-11' , '-16' ) ; +test( macro , '27' , '17' , '10' ) ; +test( macro , '-27' , '17' , '-44' ) ; +test( macro , '27' , '-17' , '44' ) ; +test( macro , '-27' , '-17' , '-10' ) ; +test( macro , '27' , '22' , '5' ) ; +test( macro , '-27' , '22' , '-49' ) ; +test( macro , '27' , '-22' , '49' ) ; +test( macro , '-27' , '-22' , '-5' ) ; +test( macro , '27' , '24' , '3' ) ; +test( macro , '-27' , '24' , '-51' ) ; +test( macro , '27' , '-24' , '51' ) ; +test( macro , '-27' , '-24' , '-3' ) ; +test( macro , '27' , '27' , '0' ) ; +test( macro , '-27' , '27' , '-54' ) ; +test( macro , '27' , '-27' , '54' ) ; +test( macro , '-27' , '-27' , '0' ) ; +test( macro , '27' , '29' , '-2' ) ; +test( macro , '-27' , '29' , '-56' ) ; +test( macro , '27' , '-29' , '56' ) ; +test( macro , '-27' , '-29' , '2' ) ; +test( macro , '27' , '1234' , '-1207' ) ; +test( macro , '-27' , '1234' , '-1261' ) ; +test( macro , '27' , '-1234' , '1261' ) ; +test( macro , '-27' , '-1234' , '1207' ) ; +test( macro , '27' , '5678' , '-5651' ) ; +test( macro , '-27' , '5678' , '-5705' ) ; +test( macro , '27' , '-5678' , '5705' ) ; +test( macro , '-27' , '-5678' , '5651' ) ; +test( macro , '27' , '1073741824' , '-1073741797' ) ; +test( macro , '-27' , '1073741824' , '-1073741851' ) ; +test( macro , '27' , '-1073741824' , '1073741851' ) ; +test( macro , '-27' , '-1073741824' , '1073741797' ) ; +test( macro , '27' , '51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '51676101935731' , '-51676101935758' ) ; +test( macro , '27' , '-51676101935731' , '51676101935758' ) ; +test( macro , '-27' , '-51676101935731' , '51676101935704' ) ; +test( macro , '27' , '717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '27' , '-717897987691852588770249' , '717897987691852588770276' ) ; +test( macro , '-27' , '-717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '29' , '1' , '28' ) ; +test( macro , '-29' , '1' , '-30' ) ; +test( macro , '29' , '-1' , '30' ) ; +test( macro , '-29' , '-1' , '-28' ) ; +test( macro , '29' , '3' , '26' ) ; +test( macro , '-29' , '3' , '-32' ) ; +test( macro , '29' , '-3' , '32' ) ; +test( macro , '-29' , '-3' , '-26' ) ; +test( macro , '29' , '7' , '22' ) ; +test( macro , '-29' , '7' , '-36' ) ; +test( macro , '29' , '-7' , '36' ) ; +test( macro , '-29' , '-7' , '-22' ) ; +test( macro , '29' , '9' , '20' ) ; +test( macro , '-29' , '9' , '-38' ) ; +test( macro , '29' , '-9' , '38' ) ; +test( macro , '-29' , '-9' , '-20' ) ; +test( macro , '29' , '11' , '18' ) ; +test( macro , '-29' , '11' , '-40' ) ; +test( macro , '29' , '-11' , '40' ) ; +test( macro , '-29' , '-11' , '-18' ) ; +test( macro , '29' , '17' , '12' ) ; +test( macro , '-29' , '17' , '-46' ) ; +test( macro , '29' , '-17' , '46' ) ; +test( macro , '-29' , '-17' , '-12' ) ; +test( macro , '29' , '22' , '7' ) ; +test( macro , '-29' , '22' , '-51' ) ; +test( macro , '29' , '-22' , '51' ) ; +test( macro , '-29' , '-22' , '-7' ) ; +test( macro , '29' , '24' , '5' ) ; +test( macro , '-29' , '24' , '-53' ) ; +test( macro , '29' , '-24' , '53' ) ; +test( macro , '-29' , '-24' , '-5' ) ; +test( macro , '29' , '27' , '2' ) ; +test( macro , '-29' , '27' , '-56' ) ; +test( macro , '29' , '-27' , '56' ) ; +test( macro , '-29' , '-27' , '-2' ) ; +test( macro , '29' , '29' , '0' ) ; +test( macro , '-29' , '29' , '-58' ) ; +test( macro , '29' , '-29' , '58' ) ; +test( macro , '-29' , '-29' , '0' ) ; +test( macro , '29' , '1234' , '-1205' ) ; +test( macro , '-29' , '1234' , '-1263' ) ; +test( macro , '29' , '-1234' , '1263' ) ; +test( macro , '-29' , '-1234' , '1205' ) ; +test( macro , '29' , '5678' , '-5649' ) ; +test( macro , '-29' , '5678' , '-5707' ) ; +test( macro , '29' , '-5678' , '5707' ) ; +test( macro , '-29' , '-5678' , '5649' ) ; +test( macro , '29' , '1073741824' , '-1073741795' ) ; +test( macro , '-29' , '1073741824' , '-1073741853' ) ; +test( macro , '29' , '-1073741824' , '1073741853' ) ; +test( macro , '-29' , '-1073741824' , '1073741795' ) ; +test( macro , '29' , '51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '51676101935731' , '-51676101935760' ) ; +test( macro , '29' , '-51676101935731' , '51676101935760' ) ; +test( macro , '-29' , '-51676101935731' , '51676101935702' ) ; +test( macro , '29' , '717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '29' , '-717897987691852588770249' , '717897987691852588770278' ) ; +test( macro , '-29' , '-717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '1234' , '1' , '1233' ) ; +test( macro , '-1234' , '1' , '-1235' ) ; +test( macro , '1234' , '-1' , '1235' ) ; +test( macro , '-1234' , '-1' , '-1233' ) ; +test( macro , '1234' , '3' , '1231' ) ; +test( macro , '-1234' , '3' , '-1237' ) ; +test( macro , '1234' , '-3' , '1237' ) ; +test( macro , '-1234' , '-3' , '-1231' ) ; +test( macro , '1234' , '7' , '1227' ) ; +test( macro , '-1234' , '7' , '-1241' ) ; +test( macro , '1234' , '-7' , '1241' ) ; +test( macro , '-1234' , '-7' , '-1227' ) ; +test( macro , '1234' , '9' , '1225' ) ; +test( macro , '-1234' , '9' , '-1243' ) ; +test( macro , '1234' , '-9' , '1243' ) ; +test( macro , '-1234' , '-9' , '-1225' ) ; +test( macro , '1234' , '11' , '1223' ) ; +test( macro , '-1234' , '11' , '-1245' ) ; +test( macro , '1234' , '-11' , '1245' ) ; +test( macro , '-1234' , '-11' , '-1223' ) ; +test( macro , '1234' , '17' , '1217' ) ; +test( macro , '-1234' , '17' , '-1251' ) ; +test( macro , '1234' , '-17' , '1251' ) ; +test( macro , '-1234' , '-17' , '-1217' ) ; +test( macro , '1234' , '22' , '1212' ) ; +test( macro , '-1234' , '22' , '-1256' ) ; +test( macro , '1234' , '-22' , '1256' ) ; +test( macro , '-1234' , '-22' , '-1212' ) ; +test( macro , '1234' , '24' , '1210' ) ; +test( macro , '-1234' , '24' , '-1258' ) ; +test( macro , '1234' , '-24' , '1258' ) ; +test( macro , '-1234' , '-24' , '-1210' ) ; +test( macro , '1234' , '27' , '1207' ) ; +test( macro , '-1234' , '27' , '-1261' ) ; +test( macro , '1234' , '-27' , '1261' ) ; +test( macro , '-1234' , '-27' , '-1207' ) ; +test( macro , '1234' , '29' , '1205' ) ; +test( macro , '-1234' , '29' , '-1263' ) ; +test( macro , '1234' , '-29' , '1263' ) ; +test( macro , '-1234' , '-29' , '-1205' ) ; +test( macro , '1234' , '1234' , '0' ) ; +test( macro , '-1234' , '1234' , '-2468' ) ; +test( macro , '1234' , '-1234' , '2468' ) ; +test( macro , '-1234' , '-1234' , '0' ) ; +test( macro , '1234' , '5678' , '-4444' ) ; +test( macro , '-1234' , '5678' , '-6912' ) ; +test( macro , '1234' , '-5678' , '6912' ) ; +test( macro , '-1234' , '-5678' , '4444' ) ; +test( macro , '1234' , '1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '1073741824' , '-1073743058' ) ; +test( macro , '1234' , '-1073741824' , '1073743058' ) ; +test( macro , '-1234' , '-1073741824' , '1073740590' ) ; +test( macro , '1234' , '51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '51676101935731' , '-51676101936965' ) ; +test( macro , '1234' , '-51676101935731' , '51676101936965' ) ; +test( macro , '-1234' , '-51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '1234' , '-717897987691852588770249' , '717897987691852588771483' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '5678' , '1' , '5677' ) ; +test( macro , '-5678' , '1' , '-5679' ) ; +test( macro , '5678' , '-1' , '5679' ) ; +test( macro , '-5678' , '-1' , '-5677' ) ; +test( macro , '5678' , '3' , '5675' ) ; +test( macro , '-5678' , '3' , '-5681' ) ; +test( macro , '5678' , '-3' , '5681' ) ; +test( macro , '-5678' , '-3' , '-5675' ) ; +test( macro , '5678' , '7' , '5671' ) ; +test( macro , '-5678' , '7' , '-5685' ) ; +test( macro , '5678' , '-7' , '5685' ) ; +test( macro , '-5678' , '-7' , '-5671' ) ; +test( macro , '5678' , '9' , '5669' ) ; +test( macro , '-5678' , '9' , '-5687' ) ; +test( macro , '5678' , '-9' , '5687' ) ; +test( macro , '-5678' , '-9' , '-5669' ) ; +test( macro , '5678' , '11' , '5667' ) ; +test( macro , '-5678' , '11' , '-5689' ) ; +test( macro , '5678' , '-11' , '5689' ) ; +test( macro , '-5678' , '-11' , '-5667' ) ; +test( macro , '5678' , '17' , '5661' ) ; +test( macro , '-5678' , '17' , '-5695' ) ; +test( macro , '5678' , '-17' , '5695' ) ; +test( macro , '-5678' , '-17' , '-5661' ) ; +test( macro , '5678' , '22' , '5656' ) ; +test( macro , '-5678' , '22' , '-5700' ) ; +test( macro , '5678' , '-22' , '5700' ) ; +test( macro , '-5678' , '-22' , '-5656' ) ; +test( macro , '5678' , '24' , '5654' ) ; +test( macro , '-5678' , '24' , '-5702' ) ; +test( macro , '5678' , '-24' , '5702' ) ; +test( macro , '-5678' , '-24' , '-5654' ) ; +test( macro , '5678' , '27' , '5651' ) ; +test( macro , '-5678' , '27' , '-5705' ) ; +test( macro , '5678' , '-27' , '5705' ) ; +test( macro , '-5678' , '-27' , '-5651' ) ; +test( macro , '5678' , '29' , '5649' ) ; +test( macro , '-5678' , '29' , '-5707' ) ; +test( macro , '5678' , '-29' , '5707' ) ; +test( macro , '-5678' , '-29' , '-5649' ) ; +test( macro , '5678' , '1234' , '4444' ) ; +test( macro , '-5678' , '1234' , '-6912' ) ; +test( macro , '5678' , '-1234' , '6912' ) ; +test( macro , '-5678' , '-1234' , '-4444' ) ; +test( macro , '5678' , '5678' , '0' ) ; +test( macro , '-5678' , '5678' , '-11356' ) ; +test( macro , '5678' , '-5678' , '11356' ) ; +test( macro , '-5678' , '-5678' , '0' ) ; +test( macro , '5678' , '1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '1073741824' , '-1073747502' ) ; +test( macro , '5678' , '-1073741824' , '1073747502' ) ; +test( macro , '-5678' , '-1073741824' , '1073736146' ) ; +test( macro , '5678' , '51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '51676101935731' , '-51676101941409' ) ; +test( macro , '5678' , '-51676101935731' , '51676101941409' ) ; +test( macro , '-5678' , '-51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-717897987691852588775927' ) ; +test( macro , '5678' , '-717897987691852588770249' , '717897987691852588775927' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '717897987691852588764571' ) ; test( macro , '1073741824' , '1' , '1073741823' ) ; test( macro , '-1073741824' , '1' , '-1073741825' ) ; test( macro , '1073741824' , '-1' , '1073741825' ) ; test( macro , '-1073741824' , '-1' , '-1073741823' ) ; +test( macro , '1073741824' , '3' , '1073741821' ) ; +test( macro , '-1073741824' , '3' , '-1073741827' ) ; +test( macro , '1073741824' , '-3' , '1073741827' ) ; +test( macro , '-1073741824' , '-3' , '-1073741821' ) ; +test( macro , '1073741824' , '7' , '1073741817' ) ; +test( macro , '-1073741824' , '7' , '-1073741831' ) ; +test( macro , '1073741824' , '-7' , '1073741831' ) ; +test( macro , '-1073741824' , '-7' , '-1073741817' ) ; +test( macro , '1073741824' , '9' , '1073741815' ) ; +test( macro , '-1073741824' , '9' , '-1073741833' ) ; +test( macro , '1073741824' , '-9' , '1073741833' ) ; +test( macro , '-1073741824' , '-9' , '-1073741815' ) ; +test( macro , '1073741824' , '11' , '1073741813' ) ; +test( macro , '-1073741824' , '11' , '-1073741835' ) ; +test( macro , '1073741824' , '-11' , '1073741835' ) ; +test( macro , '-1073741824' , '-11' , '-1073741813' ) ; test( macro , '1073741824' , '17' , '1073741807' ) ; test( macro , '-1073741824' , '17' , '-1073741841' ) ; test( macro , '1073741824' , '-17' , '1073741841' ) ; test( macro , '-1073741824' , '-17' , '-1073741807' ) ; -test( macro , '1073741824' , '51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '51676101935731' , '-51677175677555' ) ; -test( macro , '1073741824' , '-51676101935731' , '51677175677555' ) ; -test( macro , '-1073741824' , '-51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '22' , '1073741802' ) ; +test( macro , '-1073741824' , '22' , '-1073741846' ) ; +test( macro , '1073741824' , '-22' , '1073741846' ) ; +test( macro , '-1073741824' , '-22' , '-1073741802' ) ; +test( macro , '1073741824' , '24' , '1073741800' ) ; +test( macro , '-1073741824' , '24' , '-1073741848' ) ; +test( macro , '1073741824' , '-24' , '1073741848' ) ; +test( macro , '-1073741824' , '-24' , '-1073741800' ) ; +test( macro , '1073741824' , '27' , '1073741797' ) ; +test( macro , '-1073741824' , '27' , '-1073741851' ) ; +test( macro , '1073741824' , '-27' , '1073741851' ) ; +test( macro , '-1073741824' , '-27' , '-1073741797' ) ; +test( macro , '1073741824' , '29' , '1073741795' ) ; +test( macro , '-1073741824' , '29' , '-1073741853' ) ; +test( macro , '1073741824' , '-29' , '1073741853' ) ; +test( macro , '-1073741824' , '-29' , '-1073741795' ) ; +test( macro , '1073741824' , '1234' , '1073740590' ) ; +test( macro , '-1073741824' , '1234' , '-1073743058' ) ; +test( macro , '1073741824' , '-1234' , '1073743058' ) ; +test( macro , '-1073741824' , '-1234' , '-1073740590' ) ; +test( macro , '1073741824' , '5678' , '1073736146' ) ; +test( macro , '-1073741824' , '5678' , '-1073747502' ) ; +test( macro , '1073741824' , '-5678' , '1073747502' ) ; +test( macro , '-1073741824' , '-5678' , '-1073736146' ) ; test( macro , '1073741824' , '1073741824' , '0' ) ; test( macro , '-1073741824' , '1073741824' , '-2147483648' ) ; test( macro , '1073741824' , '-1073741824' , '2147483648' ) ; test( macro , '-1073741824' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '51676101935731' , '-51677175677555' ) ; +test( macro , '1073741824' , '-51676101935731' , '51677175677555' ) ; +test( macro , '-1073741824' , '-51676101935731' , '51675028193907' ) ; test( macro , '1073741824' , '717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-717897987691853662512073' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '717897987691851515028425' ) ; +test( macro , '51676101935731' , '1' , '51676101935730' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; +test( macro , '51676101935731' , '-1' , '51676101935732' ) ; +test( macro , '-51676101935731' , '-1' , '-51676101935730' ) ; +test( macro , '51676101935731' , '3' , '51676101935728' ) ; +test( macro , '-51676101935731' , '3' , '-51676101935734' ) ; +test( macro , '51676101935731' , '-3' , '51676101935734' ) ; +test( macro , '-51676101935731' , '-3' , '-51676101935728' ) ; +test( macro , '51676101935731' , '7' , '51676101935724' ) ; +test( macro , '-51676101935731' , '7' , '-51676101935738' ) ; +test( macro , '51676101935731' , '-7' , '51676101935738' ) ; +test( macro , '-51676101935731' , '-7' , '-51676101935724' ) ; +test( macro , '51676101935731' , '9' , '51676101935722' ) ; +test( macro , '-51676101935731' , '9' , '-51676101935740' ) ; +test( macro , '51676101935731' , '-9' , '51676101935740' ) ; +test( macro , '-51676101935731' , '-9' , '-51676101935722' ) ; +test( macro , '51676101935731' , '11' , '51676101935720' ) ; +test( macro , '-51676101935731' , '11' , '-51676101935742' ) ; +test( macro , '51676101935731' , '-11' , '51676101935742' ) ; +test( macro , '-51676101935731' , '-11' , '-51676101935720' ) ; +test( macro , '51676101935731' , '17' , '51676101935714' ) ; +test( macro , '-51676101935731' , '17' , '-51676101935748' ) ; +test( macro , '51676101935731' , '-17' , '51676101935748' ) ; +test( macro , '-51676101935731' , '-17' , '-51676101935714' ) ; +test( macro , '51676101935731' , '22' , '51676101935709' ) ; +test( macro , '-51676101935731' , '22' , '-51676101935753' ) ; +test( macro , '51676101935731' , '-22' , '51676101935753' ) ; +test( macro , '-51676101935731' , '-22' , '-51676101935709' ) ; +test( macro , '51676101935731' , '24' , '51676101935707' ) ; +test( macro , '-51676101935731' , '24' , '-51676101935755' ) ; +test( macro , '51676101935731' , '-24' , '51676101935755' ) ; +test( macro , '-51676101935731' , '-24' , '-51676101935707' ) ; +test( macro , '51676101935731' , '27' , '51676101935704' ) ; +test( macro , '-51676101935731' , '27' , '-51676101935758' ) ; +test( macro , '51676101935731' , '-27' , '51676101935758' ) ; +test( macro , '-51676101935731' , '-27' , '-51676101935704' ) ; +test( macro , '51676101935731' , '29' , '51676101935702' ) ; +test( macro , '-51676101935731' , '29' , '-51676101935760' ) ; +test( macro , '51676101935731' , '-29' , '51676101935760' ) ; +test( macro , '-51676101935731' , '-29' , '-51676101935702' ) ; +test( macro , '51676101935731' , '1234' , '51676101934497' ) ; +test( macro , '-51676101935731' , '1234' , '-51676101936965' ) ; +test( macro , '51676101935731' , '-1234' , '51676101936965' ) ; +test( macro , '-51676101935731' , '-1234' , '-51676101934497' ) ; +test( macro , '51676101935731' , '5678' , '51676101930053' ) ; +test( macro , '-51676101935731' , '5678' , '-51676101941409' ) ; +test( macro , '51676101935731' , '-5678' , '51676101941409' ) ; +test( macro , '-51676101935731' , '-5678' , '-51676101930053' ) ; +test( macro , '51676101935731' , '1073741824' , '51675028193907' ) ; +test( macro , '-51676101935731' , '1073741824' , '-51677175677555' ) ; +test( macro , '51676101935731' , '-1073741824' , '51677175677555' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-51675028193907' ) ; +test( macro , '51676101935731' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-103352203871462' ) ; +test( macro , '51676101935731' , '-51676101935731' , '103352203871462' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '-1' , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , '3' , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , '3' , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , '-3' , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , '-3' , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , '7' , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , '7' , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , '-7' , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , '9' , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , '9' , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , '-9' , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , '-9' , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , '11' , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , '11' , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , '-11' , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-717897987691852588770238' ) ; test( macro , '717897987691852588770249' , '17' , '717897987691852588770232' ) ; test( macro , '-717897987691852588770249' , '17' , '-717897987691852588770266' ) ; test( macro , '717897987691852588770249' , '-17' , '717897987691852588770266' ) ; test( macro , '-717897987691852588770249' , '-17' , '-717897987691852588770232' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '717897987640176486834518' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987743528690705980' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '717897987743528690705980' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '22' , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , '22' , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , '-22' , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , '24' , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , '24' , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , '-24' , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , '27' , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , '27' , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , '-27' , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , '-27' , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , '29' , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , '29' , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , '-29' , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , '1234' , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , '-1234' , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , '5678' , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , '-5678' , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-717897987691852588764571' ) ; test( macro , '717897987691852588770249' , '1073741824' , '717897987691851515028425' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-717897987691853662512073' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '717897987691853662512073' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987640176486834518' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1435795975383705177540498' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '1435795975383705177540498' ) ; diff --git a/test/src/integer/arithmetic/isubn.js b/test/src/integer/arithmetic/isubn.js new file mode 100644 index 0000000..de16bb3 --- /dev/null +++ b/test/src/integer/arithmetic/isubn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , isubn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = isubn( a , B ) ; + t.is( stringify( a ) , C ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `isubn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '0' ) ; +test( macro , '-1' , 1 , '-2' ) ; +test( macro , '1' , -1 , '2' ) ; +test( macro , '-1' , -1 , '0' ) ; +test( macro , '1' , 3 , '-2' ) ; +test( macro , '-1' , 3 , '-4' ) ; +test( macro , '1' , -3 , '4' ) ; +test( macro , '-1' , -3 , '2' ) ; +test( macro , '1' , 7 , '-6' ) ; +test( macro , '-1' , 7 , '-8' ) ; +test( macro , '1' , -7 , '8' ) ; +test( macro , '-1' , -7 , '6' ) ; +test( macro , '1' , 9 , '-8' ) ; +test( macro , '-1' , 9 , '-10' ) ; +test( macro , '1' , -9 , '10' ) ; +test( macro , '-1' , -9 , '8' ) ; +test( macro , '1' , 11 , '-10' ) ; +test( macro , '-1' , 11 , '-12' ) ; +test( macro , '1' , -11 , '12' ) ; +test( macro , '-1' , -11 , '10' ) ; +test( macro , '1' , 17 , '-16' ) ; +test( macro , '-1' , 17 , '-18' ) ; +test( macro , '1' , -17 , '18' ) ; +test( macro , '-1' , -17 , '16' ) ; +test( macro , '1' , 22 , '-21' ) ; +test( macro , '-1' , 22 , '-23' ) ; +test( macro , '1' , -22 , '23' ) ; +test( macro , '-1' , -22 , '21' ) ; +test( macro , '1' , 24 , '-23' ) ; +test( macro , '-1' , 24 , '-25' ) ; +test( macro , '1' , -24 , '25' ) ; +test( macro , '-1' , -24 , '23' ) ; +test( macro , '1' , 27 , '-26' ) ; +test( macro , '-1' , 27 , '-28' ) ; +test( macro , '1' , -27 , '28' ) ; +test( macro , '-1' , -27 , '26' ) ; +test( macro , '1' , 29 , '-28' ) ; +test( macro , '-1' , 29 , '-30' ) ; +test( macro , '1' , -29 , '30' ) ; +test( macro , '-1' , -29 , '28' ) ; +test( macro , '1' , 1234 , '-1233' ) ; +test( macro , '-1' , 1234 , '-1235' ) ; +test( macro , '1' , -1234 , '1235' ) ; +test( macro , '-1' , -1234 , '1233' ) ; +test( macro , '1' , 5678 , '-5677' ) ; +test( macro , '-1' , 5678 , '-5679' ) ; +test( macro , '1' , -5678 , '5679' ) ; +test( macro , '-1' , -5678 , '5677' ) ; +test( macro , '1' , 1073741824 , '-1073741823' ) ; +test( macro , '-1' , 1073741824 , '-1073741825' ) ; +test( macro , '1' , -1073741824 , '1073741825' ) ; +test( macro , '-1' , -1073741824 , '1073741823' ) ; +test( macro , '1' , 51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , 51676101935731 , '-51676101935732' ) ; +test( macro , '1' , -51676101935731 , '51676101935732' ) ; +test( macro , '-1' , -51676101935731 , '51676101935730' ) ; +test( macro , '3' , 1 , '2' ) ; +test( macro , '-3' , 1 , '-4' ) ; +test( macro , '3' , -1 , '4' ) ; +test( macro , '-3' , -1 , '-2' ) ; +test( macro , '3' , 3 , '0' ) ; +test( macro , '-3' , 3 , '-6' ) ; +test( macro , '3' , -3 , '6' ) ; +test( macro , '-3' , -3 , '0' ) ; +test( macro , '3' , 7 , '-4' ) ; +test( macro , '-3' , 7 , '-10' ) ; +test( macro , '3' , -7 , '10' ) ; +test( macro , '-3' , -7 , '4' ) ; +test( macro , '3' , 9 , '-6' ) ; +test( macro , '-3' , 9 , '-12' ) ; +test( macro , '3' , -9 , '12' ) ; +test( macro , '-3' , -9 , '6' ) ; +test( macro , '3' , 11 , '-8' ) ; +test( macro , '-3' , 11 , '-14' ) ; +test( macro , '3' , -11 , '14' ) ; +test( macro , '-3' , -11 , '8' ) ; +test( macro , '3' , 17 , '-14' ) ; +test( macro , '-3' , 17 , '-20' ) ; +test( macro , '3' , -17 , '20' ) ; +test( macro , '-3' , -17 , '14' ) ; +test( macro , '3' , 22 , '-19' ) ; +test( macro , '-3' , 22 , '-25' ) ; +test( macro , '3' , -22 , '25' ) ; +test( macro , '-3' , -22 , '19' ) ; +test( macro , '3' , 24 , '-21' ) ; +test( macro , '-3' , 24 , '-27' ) ; +test( macro , '3' , -24 , '27' ) ; +test( macro , '-3' , -24 , '21' ) ; +test( macro , '3' , 27 , '-24' ) ; +test( macro , '-3' , 27 , '-30' ) ; +test( macro , '3' , -27 , '30' ) ; +test( macro , '-3' , -27 , '24' ) ; +test( macro , '3' , 29 , '-26' ) ; +test( macro , '-3' , 29 , '-32' ) ; +test( macro , '3' , -29 , '32' ) ; +test( macro , '-3' , -29 , '26' ) ; +test( macro , '3' , 1234 , '-1231' ) ; +test( macro , '-3' , 1234 , '-1237' ) ; +test( macro , '3' , -1234 , '1237' ) ; +test( macro , '-3' , -1234 , '1231' ) ; +test( macro , '3' , 5678 , '-5675' ) ; +test( macro , '-3' , 5678 , '-5681' ) ; +test( macro , '3' , -5678 , '5681' ) ; +test( macro , '-3' , -5678 , '5675' ) ; +test( macro , '3' , 1073741824 , '-1073741821' ) ; +test( macro , '-3' , 1073741824 , '-1073741827' ) ; +test( macro , '3' , -1073741824 , '1073741827' ) ; +test( macro , '-3' , -1073741824 , '1073741821' ) ; +test( macro , '3' , 51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , 51676101935731 , '-51676101935734' ) ; +test( macro , '3' , -51676101935731 , '51676101935734' ) ; +test( macro , '-3' , -51676101935731 , '51676101935728' ) ; +test( macro , '7' , 1 , '6' ) ; +test( macro , '-7' , 1 , '-8' ) ; +test( macro , '7' , -1 , '8' ) ; +test( macro , '-7' , -1 , '-6' ) ; +test( macro , '7' , 3 , '4' ) ; +test( macro , '-7' , 3 , '-10' ) ; +test( macro , '7' , -3 , '10' ) ; +test( macro , '-7' , -3 , '-4' ) ; +test( macro , '7' , 7 , '0' ) ; +test( macro , '-7' , 7 , '-14' ) ; +test( macro , '7' , -7 , '14' ) ; +test( macro , '-7' , -7 , '0' ) ; +test( macro , '7' , 9 , '-2' ) ; +test( macro , '-7' , 9 , '-16' ) ; +test( macro , '7' , -9 , '16' ) ; +test( macro , '-7' , -9 , '2' ) ; +test( macro , '7' , 11 , '-4' ) ; +test( macro , '-7' , 11 , '-18' ) ; +test( macro , '7' , -11 , '18' ) ; +test( macro , '-7' , -11 , '4' ) ; +test( macro , '7' , 17 , '-10' ) ; +test( macro , '-7' , 17 , '-24' ) ; +test( macro , '7' , -17 , '24' ) ; +test( macro , '-7' , -17 , '10' ) ; +test( macro , '7' , 22 , '-15' ) ; +test( macro , '-7' , 22 , '-29' ) ; +test( macro , '7' , -22 , '29' ) ; +test( macro , '-7' , -22 , '15' ) ; +test( macro , '7' , 24 , '-17' ) ; +test( macro , '-7' , 24 , '-31' ) ; +test( macro , '7' , -24 , '31' ) ; +test( macro , '-7' , -24 , '17' ) ; +test( macro , '7' , 27 , '-20' ) ; +test( macro , '-7' , 27 , '-34' ) ; +test( macro , '7' , -27 , '34' ) ; +test( macro , '-7' , -27 , '20' ) ; +test( macro , '7' , 29 , '-22' ) ; +test( macro , '-7' , 29 , '-36' ) ; +test( macro , '7' , -29 , '36' ) ; +test( macro , '-7' , -29 , '22' ) ; +test( macro , '7' , 1234 , '-1227' ) ; +test( macro , '-7' , 1234 , '-1241' ) ; +test( macro , '7' , -1234 , '1241' ) ; +test( macro , '-7' , -1234 , '1227' ) ; +test( macro , '7' , 5678 , '-5671' ) ; +test( macro , '-7' , 5678 , '-5685' ) ; +test( macro , '7' , -5678 , '5685' ) ; +test( macro , '-7' , -5678 , '5671' ) ; +test( macro , '7' , 1073741824 , '-1073741817' ) ; +test( macro , '-7' , 1073741824 , '-1073741831' ) ; +test( macro , '7' , -1073741824 , '1073741831' ) ; +test( macro , '-7' , -1073741824 , '1073741817' ) ; +test( macro , '7' , 51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , 51676101935731 , '-51676101935738' ) ; +test( macro , '7' , -51676101935731 , '51676101935738' ) ; +test( macro , '-7' , -51676101935731 , '51676101935724' ) ; +test( macro , '9' , 1 , '8' ) ; +test( macro , '-9' , 1 , '-10' ) ; +test( macro , '9' , -1 , '10' ) ; +test( macro , '-9' , -1 , '-8' ) ; +test( macro , '9' , 3 , '6' ) ; +test( macro , '-9' , 3 , '-12' ) ; +test( macro , '9' , -3 , '12' ) ; +test( macro , '-9' , -3 , '-6' ) ; +test( macro , '9' , 7 , '2' ) ; +test( macro , '-9' , 7 , '-16' ) ; +test( macro , '9' , -7 , '16' ) ; +test( macro , '-9' , -7 , '-2' ) ; +test( macro , '9' , 9 , '0' ) ; +test( macro , '-9' , 9 , '-18' ) ; +test( macro , '9' , -9 , '18' ) ; +test( macro , '-9' , -9 , '0' ) ; +test( macro , '9' , 11 , '-2' ) ; +test( macro , '-9' , 11 , '-20' ) ; +test( macro , '9' , -11 , '20' ) ; +test( macro , '-9' , -11 , '2' ) ; +test( macro , '9' , 17 , '-8' ) ; +test( macro , '-9' , 17 , '-26' ) ; +test( macro , '9' , -17 , '26' ) ; +test( macro , '-9' , -17 , '8' ) ; +test( macro , '9' , 22 , '-13' ) ; +test( macro , '-9' , 22 , '-31' ) ; +test( macro , '9' , -22 , '31' ) ; +test( macro , '-9' , -22 , '13' ) ; +test( macro , '9' , 24 , '-15' ) ; +test( macro , '-9' , 24 , '-33' ) ; +test( macro , '9' , -24 , '33' ) ; +test( macro , '-9' , -24 , '15' ) ; +test( macro , '9' , 27 , '-18' ) ; +test( macro , '-9' , 27 , '-36' ) ; +test( macro , '9' , -27 , '36' ) ; +test( macro , '-9' , -27 , '18' ) ; +test( macro , '9' , 29 , '-20' ) ; +test( macro , '-9' , 29 , '-38' ) ; +test( macro , '9' , -29 , '38' ) ; +test( macro , '-9' , -29 , '20' ) ; +test( macro , '9' , 1234 , '-1225' ) ; +test( macro , '-9' , 1234 , '-1243' ) ; +test( macro , '9' , -1234 , '1243' ) ; +test( macro , '-9' , -1234 , '1225' ) ; +test( macro , '9' , 5678 , '-5669' ) ; +test( macro , '-9' , 5678 , '-5687' ) ; +test( macro , '9' , -5678 , '5687' ) ; +test( macro , '-9' , -5678 , '5669' ) ; +test( macro , '9' , 1073741824 , '-1073741815' ) ; +test( macro , '-9' , 1073741824 , '-1073741833' ) ; +test( macro , '9' , -1073741824 , '1073741833' ) ; +test( macro , '-9' , -1073741824 , '1073741815' ) ; +test( macro , '9' , 51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , 51676101935731 , '-51676101935740' ) ; +test( macro , '9' , -51676101935731 , '51676101935740' ) ; +test( macro , '-9' , -51676101935731 , '51676101935722' ) ; +test( macro , '11' , 1 , '10' ) ; +test( macro , '-11' , 1 , '-12' ) ; +test( macro , '11' , -1 , '12' ) ; +test( macro , '-11' , -1 , '-10' ) ; +test( macro , '11' , 3 , '8' ) ; +test( macro , '-11' , 3 , '-14' ) ; +test( macro , '11' , -3 , '14' ) ; +test( macro , '-11' , -3 , '-8' ) ; +test( macro , '11' , 7 , '4' ) ; +test( macro , '-11' , 7 , '-18' ) ; +test( macro , '11' , -7 , '18' ) ; +test( macro , '-11' , -7 , '-4' ) ; +test( macro , '11' , 9 , '2' ) ; +test( macro , '-11' , 9 , '-20' ) ; +test( macro , '11' , -9 , '20' ) ; +test( macro , '-11' , -9 , '-2' ) ; +test( macro , '11' , 11 , '0' ) ; +test( macro , '-11' , 11 , '-22' ) ; +test( macro , '11' , -11 , '22' ) ; +test( macro , '-11' , -11 , '0' ) ; +test( macro , '11' , 17 , '-6' ) ; +test( macro , '-11' , 17 , '-28' ) ; +test( macro , '11' , -17 , '28' ) ; +test( macro , '-11' , -17 , '6' ) ; +test( macro , '11' , 22 , '-11' ) ; +test( macro , '-11' , 22 , '-33' ) ; +test( macro , '11' , -22 , '33' ) ; +test( macro , '-11' , -22 , '11' ) ; +test( macro , '11' , 24 , '-13' ) ; +test( macro , '-11' , 24 , '-35' ) ; +test( macro , '11' , -24 , '35' ) ; +test( macro , '-11' , -24 , '13' ) ; +test( macro , '11' , 27 , '-16' ) ; +test( macro , '-11' , 27 , '-38' ) ; +test( macro , '11' , -27 , '38' ) ; +test( macro , '-11' , -27 , '16' ) ; +test( macro , '11' , 29 , '-18' ) ; +test( macro , '-11' , 29 , '-40' ) ; +test( macro , '11' , -29 , '40' ) ; +test( macro , '-11' , -29 , '18' ) ; +test( macro , '11' , 1234 , '-1223' ) ; +test( macro , '-11' , 1234 , '-1245' ) ; +test( macro , '11' , -1234 , '1245' ) ; +test( macro , '-11' , -1234 , '1223' ) ; +test( macro , '11' , 5678 , '-5667' ) ; +test( macro , '-11' , 5678 , '-5689' ) ; +test( macro , '11' , -5678 , '5689' ) ; +test( macro , '-11' , -5678 , '5667' ) ; +test( macro , '11' , 1073741824 , '-1073741813' ) ; +test( macro , '-11' , 1073741824 , '-1073741835' ) ; +test( macro , '11' , -1073741824 , '1073741835' ) ; +test( macro , '-11' , -1073741824 , '1073741813' ) ; +test( macro , '11' , 51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , 51676101935731 , '-51676101935742' ) ; +test( macro , '11' , -51676101935731 , '51676101935742' ) ; +test( macro , '-11' , -51676101935731 , '51676101935720' ) ; +test( macro , '17' , 1 , '16' ) ; +test( macro , '-17' , 1 , '-18' ) ; +test( macro , '17' , -1 , '18' ) ; +test( macro , '-17' , -1 , '-16' ) ; +test( macro , '17' , 3 , '14' ) ; +test( macro , '-17' , 3 , '-20' ) ; +test( macro , '17' , -3 , '20' ) ; +test( macro , '-17' , -3 , '-14' ) ; +test( macro , '17' , 7 , '10' ) ; +test( macro , '-17' , 7 , '-24' ) ; +test( macro , '17' , -7 , '24' ) ; +test( macro , '-17' , -7 , '-10' ) ; +test( macro , '17' , 9 , '8' ) ; +test( macro , '-17' , 9 , '-26' ) ; +test( macro , '17' , -9 , '26' ) ; +test( macro , '-17' , -9 , '-8' ) ; +test( macro , '17' , 11 , '6' ) ; +test( macro , '-17' , 11 , '-28' ) ; +test( macro , '17' , -11 , '28' ) ; +test( macro , '-17' , -11 , '-6' ) ; +test( macro , '17' , 17 , '0' ) ; +test( macro , '-17' , 17 , '-34' ) ; +test( macro , '17' , -17 , '34' ) ; +test( macro , '-17' , -17 , '0' ) ; +test( macro , '17' , 22 , '-5' ) ; +test( macro , '-17' , 22 , '-39' ) ; +test( macro , '17' , -22 , '39' ) ; +test( macro , '-17' , -22 , '5' ) ; +test( macro , '17' , 24 , '-7' ) ; +test( macro , '-17' , 24 , '-41' ) ; +test( macro , '17' , -24 , '41' ) ; +test( macro , '-17' , -24 , '7' ) ; +test( macro , '17' , 27 , '-10' ) ; +test( macro , '-17' , 27 , '-44' ) ; +test( macro , '17' , -27 , '44' ) ; +test( macro , '-17' , -27 , '10' ) ; +test( macro , '17' , 29 , '-12' ) ; +test( macro , '-17' , 29 , '-46' ) ; +test( macro , '17' , -29 , '46' ) ; +test( macro , '-17' , -29 , '12' ) ; +test( macro , '17' , 1234 , '-1217' ) ; +test( macro , '-17' , 1234 , '-1251' ) ; +test( macro , '17' , -1234 , '1251' ) ; +test( macro , '-17' , -1234 , '1217' ) ; +test( macro , '17' , 5678 , '-5661' ) ; +test( macro , '-17' , 5678 , '-5695' ) ; +test( macro , '17' , -5678 , '5695' ) ; +test( macro , '-17' , -5678 , '5661' ) ; +test( macro , '17' , 1073741824 , '-1073741807' ) ; +test( macro , '-17' , 1073741824 , '-1073741841' ) ; +test( macro , '17' , -1073741824 , '1073741841' ) ; +test( macro , '-17' , -1073741824 , '1073741807' ) ; +test( macro , '17' , 51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , 51676101935731 , '-51676101935748' ) ; +test( macro , '17' , -51676101935731 , '51676101935748' ) ; +test( macro , '-17' , -51676101935731 , '51676101935714' ) ; +test( macro , '22' , 1 , '21' ) ; +test( macro , '-22' , 1 , '-23' ) ; +test( macro , '22' , -1 , '23' ) ; +test( macro , '-22' , -1 , '-21' ) ; +test( macro , '22' , 3 , '19' ) ; +test( macro , '-22' , 3 , '-25' ) ; +test( macro , '22' , -3 , '25' ) ; +test( macro , '-22' , -3 , '-19' ) ; +test( macro , '22' , 7 , '15' ) ; +test( macro , '-22' , 7 , '-29' ) ; +test( macro , '22' , -7 , '29' ) ; +test( macro , '-22' , -7 , '-15' ) ; +test( macro , '22' , 9 , '13' ) ; +test( macro , '-22' , 9 , '-31' ) ; +test( macro , '22' , -9 , '31' ) ; +test( macro , '-22' , -9 , '-13' ) ; +test( macro , '22' , 11 , '11' ) ; +test( macro , '-22' , 11 , '-33' ) ; +test( macro , '22' , -11 , '33' ) ; +test( macro , '-22' , -11 , '-11' ) ; +test( macro , '22' , 17 , '5' ) ; +test( macro , '-22' , 17 , '-39' ) ; +test( macro , '22' , -17 , '39' ) ; +test( macro , '-22' , -17 , '-5' ) ; +test( macro , '22' , 22 , '0' ) ; +test( macro , '-22' , 22 , '-44' ) ; +test( macro , '22' , -22 , '44' ) ; +test( macro , '-22' , -22 , '0' ) ; +test( macro , '22' , 24 , '-2' ) ; +test( macro , '-22' , 24 , '-46' ) ; +test( macro , '22' , -24 , '46' ) ; +test( macro , '-22' , -24 , '2' ) ; +test( macro , '22' , 27 , '-5' ) ; +test( macro , '-22' , 27 , '-49' ) ; +test( macro , '22' , -27 , '49' ) ; +test( macro , '-22' , -27 , '5' ) ; +test( macro , '22' , 29 , '-7' ) ; +test( macro , '-22' , 29 , '-51' ) ; +test( macro , '22' , -29 , '51' ) ; +test( macro , '-22' , -29 , '7' ) ; +test( macro , '22' , 1234 , '-1212' ) ; +test( macro , '-22' , 1234 , '-1256' ) ; +test( macro , '22' , -1234 , '1256' ) ; +test( macro , '-22' , -1234 , '1212' ) ; +test( macro , '22' , 5678 , '-5656' ) ; +test( macro , '-22' , 5678 , '-5700' ) ; +test( macro , '22' , -5678 , '5700' ) ; +test( macro , '-22' , -5678 , '5656' ) ; +test( macro , '22' , 1073741824 , '-1073741802' ) ; +test( macro , '-22' , 1073741824 , '-1073741846' ) ; +test( macro , '22' , -1073741824 , '1073741846' ) ; +test( macro , '-22' , -1073741824 , '1073741802' ) ; +test( macro , '22' , 51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , 51676101935731 , '-51676101935753' ) ; +test( macro , '22' , -51676101935731 , '51676101935753' ) ; +test( macro , '-22' , -51676101935731 , '51676101935709' ) ; +test( macro , '24' , 1 , '23' ) ; +test( macro , '-24' , 1 , '-25' ) ; +test( macro , '24' , -1 , '25' ) ; +test( macro , '-24' , -1 , '-23' ) ; +test( macro , '24' , 3 , '21' ) ; +test( macro , '-24' , 3 , '-27' ) ; +test( macro , '24' , -3 , '27' ) ; +test( macro , '-24' , -3 , '-21' ) ; +test( macro , '24' , 7 , '17' ) ; +test( macro , '-24' , 7 , '-31' ) ; +test( macro , '24' , -7 , '31' ) ; +test( macro , '-24' , -7 , '-17' ) ; +test( macro , '24' , 9 , '15' ) ; +test( macro , '-24' , 9 , '-33' ) ; +test( macro , '24' , -9 , '33' ) ; +test( macro , '-24' , -9 , '-15' ) ; +test( macro , '24' , 11 , '13' ) ; +test( macro , '-24' , 11 , '-35' ) ; +test( macro , '24' , -11 , '35' ) ; +test( macro , '-24' , -11 , '-13' ) ; +test( macro , '24' , 17 , '7' ) ; +test( macro , '-24' , 17 , '-41' ) ; +test( macro , '24' , -17 , '41' ) ; +test( macro , '-24' , -17 , '-7' ) ; +test( macro , '24' , 22 , '2' ) ; +test( macro , '-24' , 22 , '-46' ) ; +test( macro , '24' , -22 , '46' ) ; +test( macro , '-24' , -22 , '-2' ) ; +test( macro , '24' , 24 , '0' ) ; +test( macro , '-24' , 24 , '-48' ) ; +test( macro , '24' , -24 , '48' ) ; +test( macro , '-24' , -24 , '0' ) ; +test( macro , '24' , 27 , '-3' ) ; +test( macro , '-24' , 27 , '-51' ) ; +test( macro , '24' , -27 , '51' ) ; +test( macro , '-24' , -27 , '3' ) ; +test( macro , '24' , 29 , '-5' ) ; +test( macro , '-24' , 29 , '-53' ) ; +test( macro , '24' , -29 , '53' ) ; +test( macro , '-24' , -29 , '5' ) ; +test( macro , '24' , 1234 , '-1210' ) ; +test( macro , '-24' , 1234 , '-1258' ) ; +test( macro , '24' , -1234 , '1258' ) ; +test( macro , '-24' , -1234 , '1210' ) ; +test( macro , '24' , 5678 , '-5654' ) ; +test( macro , '-24' , 5678 , '-5702' ) ; +test( macro , '24' , -5678 , '5702' ) ; +test( macro , '-24' , -5678 , '5654' ) ; +test( macro , '24' , 1073741824 , '-1073741800' ) ; +test( macro , '-24' , 1073741824 , '-1073741848' ) ; +test( macro , '24' , -1073741824 , '1073741848' ) ; +test( macro , '-24' , -1073741824 , '1073741800' ) ; +test( macro , '24' , 51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , 51676101935731 , '-51676101935755' ) ; +test( macro , '24' , -51676101935731 , '51676101935755' ) ; +test( macro , '-24' , -51676101935731 , '51676101935707' ) ; +test( macro , '27' , 1 , '26' ) ; +test( macro , '-27' , 1 , '-28' ) ; +test( macro , '27' , -1 , '28' ) ; +test( macro , '-27' , -1 , '-26' ) ; +test( macro , '27' , 3 , '24' ) ; +test( macro , '-27' , 3 , '-30' ) ; +test( macro , '27' , -3 , '30' ) ; +test( macro , '-27' , -3 , '-24' ) ; +test( macro , '27' , 7 , '20' ) ; +test( macro , '-27' , 7 , '-34' ) ; +test( macro , '27' , -7 , '34' ) ; +test( macro , '-27' , -7 , '-20' ) ; +test( macro , '27' , 9 , '18' ) ; +test( macro , '-27' , 9 , '-36' ) ; +test( macro , '27' , -9 , '36' ) ; +test( macro , '-27' , -9 , '-18' ) ; +test( macro , '27' , 11 , '16' ) ; +test( macro , '-27' , 11 , '-38' ) ; +test( macro , '27' , -11 , '38' ) ; +test( macro , '-27' , -11 , '-16' ) ; +test( macro , '27' , 17 , '10' ) ; +test( macro , '-27' , 17 , '-44' ) ; +test( macro , '27' , -17 , '44' ) ; +test( macro , '-27' , -17 , '-10' ) ; +test( macro , '27' , 22 , '5' ) ; +test( macro , '-27' , 22 , '-49' ) ; +test( macro , '27' , -22 , '49' ) ; +test( macro , '-27' , -22 , '-5' ) ; +test( macro , '27' , 24 , '3' ) ; +test( macro , '-27' , 24 , '-51' ) ; +test( macro , '27' , -24 , '51' ) ; +test( macro , '-27' , -24 , '-3' ) ; +test( macro , '27' , 27 , '0' ) ; +test( macro , '-27' , 27 , '-54' ) ; +test( macro , '27' , -27 , '54' ) ; +test( macro , '-27' , -27 , '0' ) ; +test( macro , '27' , 29 , '-2' ) ; +test( macro , '-27' , 29 , '-56' ) ; +test( macro , '27' , -29 , '56' ) ; +test( macro , '-27' , -29 , '2' ) ; +test( macro , '27' , 1234 , '-1207' ) ; +test( macro , '-27' , 1234 , '-1261' ) ; +test( macro , '27' , -1234 , '1261' ) ; +test( macro , '-27' , -1234 , '1207' ) ; +test( macro , '27' , 5678 , '-5651' ) ; +test( macro , '-27' , 5678 , '-5705' ) ; +test( macro , '27' , -5678 , '5705' ) ; +test( macro , '-27' , -5678 , '5651' ) ; +test( macro , '27' , 1073741824 , '-1073741797' ) ; +test( macro , '-27' , 1073741824 , '-1073741851' ) ; +test( macro , '27' , -1073741824 , '1073741851' ) ; +test( macro , '-27' , -1073741824 , '1073741797' ) ; +test( macro , '27' , 51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , 51676101935731 , '-51676101935758' ) ; +test( macro , '27' , -51676101935731 , '51676101935758' ) ; +test( macro , '-27' , -51676101935731 , '51676101935704' ) ; +test( macro , '29' , 1 , '28' ) ; +test( macro , '-29' , 1 , '-30' ) ; +test( macro , '29' , -1 , '30' ) ; +test( macro , '-29' , -1 , '-28' ) ; +test( macro , '29' , 3 , '26' ) ; +test( macro , '-29' , 3 , '-32' ) ; +test( macro , '29' , -3 , '32' ) ; +test( macro , '-29' , -3 , '-26' ) ; +test( macro , '29' , 7 , '22' ) ; +test( macro , '-29' , 7 , '-36' ) ; +test( macro , '29' , -7 , '36' ) ; +test( macro , '-29' , -7 , '-22' ) ; +test( macro , '29' , 9 , '20' ) ; +test( macro , '-29' , 9 , '-38' ) ; +test( macro , '29' , -9 , '38' ) ; +test( macro , '-29' , -9 , '-20' ) ; +test( macro , '29' , 11 , '18' ) ; +test( macro , '-29' , 11 , '-40' ) ; +test( macro , '29' , -11 , '40' ) ; +test( macro , '-29' , -11 , '-18' ) ; +test( macro , '29' , 17 , '12' ) ; +test( macro , '-29' , 17 , '-46' ) ; +test( macro , '29' , -17 , '46' ) ; +test( macro , '-29' , -17 , '-12' ) ; +test( macro , '29' , 22 , '7' ) ; +test( macro , '-29' , 22 , '-51' ) ; +test( macro , '29' , -22 , '51' ) ; +test( macro , '-29' , -22 , '-7' ) ; +test( macro , '29' , 24 , '5' ) ; +test( macro , '-29' , 24 , '-53' ) ; +test( macro , '29' , -24 , '53' ) ; +test( macro , '-29' , -24 , '-5' ) ; +test( macro , '29' , 27 , '2' ) ; +test( macro , '-29' , 27 , '-56' ) ; +test( macro , '29' , -27 , '56' ) ; +test( macro , '-29' , -27 , '-2' ) ; +test( macro , '29' , 29 , '0' ) ; +test( macro , '-29' , 29 , '-58' ) ; +test( macro , '29' , -29 , '58' ) ; +test( macro , '-29' , -29 , '0' ) ; +test( macro , '29' , 1234 , '-1205' ) ; +test( macro , '-29' , 1234 , '-1263' ) ; +test( macro , '29' , -1234 , '1263' ) ; +test( macro , '-29' , -1234 , '1205' ) ; +test( macro , '29' , 5678 , '-5649' ) ; +test( macro , '-29' , 5678 , '-5707' ) ; +test( macro , '29' , -5678 , '5707' ) ; +test( macro , '-29' , -5678 , '5649' ) ; +test( macro , '29' , 1073741824 , '-1073741795' ) ; +test( macro , '-29' , 1073741824 , '-1073741853' ) ; +test( macro , '29' , -1073741824 , '1073741853' ) ; +test( macro , '-29' , -1073741824 , '1073741795' ) ; +test( macro , '29' , 51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , 51676101935731 , '-51676101935760' ) ; +test( macro , '29' , -51676101935731 , '51676101935760' ) ; +test( macro , '-29' , -51676101935731 , '51676101935702' ) ; +test( macro , '1234' , 1 , '1233' ) ; +test( macro , '-1234' , 1 , '-1235' ) ; +test( macro , '1234' , -1 , '1235' ) ; +test( macro , '-1234' , -1 , '-1233' ) ; +test( macro , '1234' , 3 , '1231' ) ; +test( macro , '-1234' , 3 , '-1237' ) ; +test( macro , '1234' , -3 , '1237' ) ; +test( macro , '-1234' , -3 , '-1231' ) ; +test( macro , '1234' , 7 , '1227' ) ; +test( macro , '-1234' , 7 , '-1241' ) ; +test( macro , '1234' , -7 , '1241' ) ; +test( macro , '-1234' , -7 , '-1227' ) ; +test( macro , '1234' , 9 , '1225' ) ; +test( macro , '-1234' , 9 , '-1243' ) ; +test( macro , '1234' , -9 , '1243' ) ; +test( macro , '-1234' , -9 , '-1225' ) ; +test( macro , '1234' , 11 , '1223' ) ; +test( macro , '-1234' , 11 , '-1245' ) ; +test( macro , '1234' , -11 , '1245' ) ; +test( macro , '-1234' , -11 , '-1223' ) ; +test( macro , '1234' , 17 , '1217' ) ; +test( macro , '-1234' , 17 , '-1251' ) ; +test( macro , '1234' , -17 , '1251' ) ; +test( macro , '-1234' , -17 , '-1217' ) ; +test( macro , '1234' , 22 , '1212' ) ; +test( macro , '-1234' , 22 , '-1256' ) ; +test( macro , '1234' , -22 , '1256' ) ; +test( macro , '-1234' , -22 , '-1212' ) ; +test( macro , '1234' , 24 , '1210' ) ; +test( macro , '-1234' , 24 , '-1258' ) ; +test( macro , '1234' , -24 , '1258' ) ; +test( macro , '-1234' , -24 , '-1210' ) ; +test( macro , '1234' , 27 , '1207' ) ; +test( macro , '-1234' , 27 , '-1261' ) ; +test( macro , '1234' , -27 , '1261' ) ; +test( macro , '-1234' , -27 , '-1207' ) ; +test( macro , '1234' , 29 , '1205' ) ; +test( macro , '-1234' , 29 , '-1263' ) ; +test( macro , '1234' , -29 , '1263' ) ; +test( macro , '-1234' , -29 , '-1205' ) ; +test( macro , '1234' , 1234 , '0' ) ; +test( macro , '-1234' , 1234 , '-2468' ) ; +test( macro , '1234' , -1234 , '2468' ) ; +test( macro , '-1234' , -1234 , '0' ) ; +test( macro , '1234' , 5678 , '-4444' ) ; +test( macro , '-1234' , 5678 , '-6912' ) ; +test( macro , '1234' , -5678 , '6912' ) ; +test( macro , '-1234' , -5678 , '4444' ) ; +test( macro , '1234' , 1073741824 , '-1073740590' ) ; +test( macro , '-1234' , 1073741824 , '-1073743058' ) ; +test( macro , '1234' , -1073741824 , '1073743058' ) ; +test( macro , '-1234' , -1073741824 , '1073740590' ) ; +test( macro , '1234' , 51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , 51676101935731 , '-51676101936965' ) ; +test( macro , '1234' , -51676101935731 , '51676101936965' ) ; +test( macro , '-1234' , -51676101935731 , '51676101934497' ) ; +test( macro , '5678' , 1 , '5677' ) ; +test( macro , '-5678' , 1 , '-5679' ) ; +test( macro , '5678' , -1 , '5679' ) ; +test( macro , '-5678' , -1 , '-5677' ) ; +test( macro , '5678' , 3 , '5675' ) ; +test( macro , '-5678' , 3 , '-5681' ) ; +test( macro , '5678' , -3 , '5681' ) ; +test( macro , '-5678' , -3 , '-5675' ) ; +test( macro , '5678' , 7 , '5671' ) ; +test( macro , '-5678' , 7 , '-5685' ) ; +test( macro , '5678' , -7 , '5685' ) ; +test( macro , '-5678' , -7 , '-5671' ) ; +test( macro , '5678' , 9 , '5669' ) ; +test( macro , '-5678' , 9 , '-5687' ) ; +test( macro , '5678' , -9 , '5687' ) ; +test( macro , '-5678' , -9 , '-5669' ) ; +test( macro , '5678' , 11 , '5667' ) ; +test( macro , '-5678' , 11 , '-5689' ) ; +test( macro , '5678' , -11 , '5689' ) ; +test( macro , '-5678' , -11 , '-5667' ) ; +test( macro , '5678' , 17 , '5661' ) ; +test( macro , '-5678' , 17 , '-5695' ) ; +test( macro , '5678' , -17 , '5695' ) ; +test( macro , '-5678' , -17 , '-5661' ) ; +test( macro , '5678' , 22 , '5656' ) ; +test( macro , '-5678' , 22 , '-5700' ) ; +test( macro , '5678' , -22 , '5700' ) ; +test( macro , '-5678' , -22 , '-5656' ) ; +test( macro , '5678' , 24 , '5654' ) ; +test( macro , '-5678' , 24 , '-5702' ) ; +test( macro , '5678' , -24 , '5702' ) ; +test( macro , '-5678' , -24 , '-5654' ) ; +test( macro , '5678' , 27 , '5651' ) ; +test( macro , '-5678' , 27 , '-5705' ) ; +test( macro , '5678' , -27 , '5705' ) ; +test( macro , '-5678' , -27 , '-5651' ) ; +test( macro , '5678' , 29 , '5649' ) ; +test( macro , '-5678' , 29 , '-5707' ) ; +test( macro , '5678' , -29 , '5707' ) ; +test( macro , '-5678' , -29 , '-5649' ) ; +test( macro , '5678' , 1234 , '4444' ) ; +test( macro , '-5678' , 1234 , '-6912' ) ; +test( macro , '5678' , -1234 , '6912' ) ; +test( macro , '-5678' , -1234 , '-4444' ) ; +test( macro , '5678' , 5678 , '0' ) ; +test( macro , '-5678' , 5678 , '-11356' ) ; +test( macro , '5678' , -5678 , '11356' ) ; +test( macro , '-5678' , -5678 , '0' ) ; +test( macro , '5678' , 1073741824 , '-1073736146' ) ; +test( macro , '-5678' , 1073741824 , '-1073747502' ) ; +test( macro , '5678' , -1073741824 , '1073747502' ) ; +test( macro , '-5678' , -1073741824 , '1073736146' ) ; +test( macro , '5678' , 51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , 51676101935731 , '-51676101941409' ) ; +test( macro , '5678' , -51676101935731 , '51676101941409' ) ; +test( macro , '-5678' , -51676101935731 , '51676101930053' ) ; +test( macro , '1073741824' , 1 , '1073741823' ) ; +test( macro , '-1073741824' , 1 , '-1073741825' ) ; +test( macro , '1073741824' , -1 , '1073741825' ) ; +test( macro , '-1073741824' , -1 , '-1073741823' ) ; +test( macro , '1073741824' , 3 , '1073741821' ) ; +test( macro , '-1073741824' , 3 , '-1073741827' ) ; +test( macro , '1073741824' , -3 , '1073741827' ) ; +test( macro , '-1073741824' , -3 , '-1073741821' ) ; +test( macro , '1073741824' , 7 , '1073741817' ) ; +test( macro , '-1073741824' , 7 , '-1073741831' ) ; +test( macro , '1073741824' , -7 , '1073741831' ) ; +test( macro , '-1073741824' , -7 , '-1073741817' ) ; +test( macro , '1073741824' , 9 , '1073741815' ) ; +test( macro , '-1073741824' , 9 , '-1073741833' ) ; +test( macro , '1073741824' , -9 , '1073741833' ) ; +test( macro , '-1073741824' , -9 , '-1073741815' ) ; +test( macro , '1073741824' , 11 , '1073741813' ) ; +test( macro , '-1073741824' , 11 , '-1073741835' ) ; +test( macro , '1073741824' , -11 , '1073741835' ) ; +test( macro , '-1073741824' , -11 , '-1073741813' ) ; +test( macro , '1073741824' , 17 , '1073741807' ) ; +test( macro , '-1073741824' , 17 , '-1073741841' ) ; +test( macro , '1073741824' , -17 , '1073741841' ) ; +test( macro , '-1073741824' , -17 , '-1073741807' ) ; +test( macro , '1073741824' , 22 , '1073741802' ) ; +test( macro , '-1073741824' , 22 , '-1073741846' ) ; +test( macro , '1073741824' , -22 , '1073741846' ) ; +test( macro , '-1073741824' , -22 , '-1073741802' ) ; +test( macro , '1073741824' , 24 , '1073741800' ) ; +test( macro , '-1073741824' , 24 , '-1073741848' ) ; +test( macro , '1073741824' , -24 , '1073741848' ) ; +test( macro , '-1073741824' , -24 , '-1073741800' ) ; +test( macro , '1073741824' , 27 , '1073741797' ) ; +test( macro , '-1073741824' , 27 , '-1073741851' ) ; +test( macro , '1073741824' , -27 , '1073741851' ) ; +test( macro , '-1073741824' , -27 , '-1073741797' ) ; +test( macro , '1073741824' , 29 , '1073741795' ) ; +test( macro , '-1073741824' , 29 , '-1073741853' ) ; +test( macro , '1073741824' , -29 , '1073741853' ) ; +test( macro , '-1073741824' , -29 , '-1073741795' ) ; +test( macro , '1073741824' , 1234 , '1073740590' ) ; +test( macro , '-1073741824' , 1234 , '-1073743058' ) ; +test( macro , '1073741824' , -1234 , '1073743058' ) ; +test( macro , '-1073741824' , -1234 , '-1073740590' ) ; +test( macro , '1073741824' , 5678 , '1073736146' ) ; +test( macro , '-1073741824' , 5678 , '-1073747502' ) ; +test( macro , '1073741824' , -5678 , '1073747502' ) ; +test( macro , '-1073741824' , -5678 , '-1073736146' ) ; +test( macro , '1073741824' , 1073741824 , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '-2147483648' ) ; +test( macro , '1073741824' , -1073741824 , '2147483648' ) ; +test( macro , '-1073741824' , -1073741824 , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , 51676101935731 , '-51677175677555' ) ; +test( macro , '1073741824' , -51676101935731 , '51677175677555' ) ; +test( macro , '-1073741824' , -51676101935731 , '51675028193907' ) ; +test( macro , '51676101935731' , 1 , '51676101935730' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935732' ) ; +test( macro , '51676101935731' , -1 , '51676101935732' ) ; +test( macro , '-51676101935731' , -1 , '-51676101935730' ) ; +test( macro , '51676101935731' , 3 , '51676101935728' ) ; +test( macro , '-51676101935731' , 3 , '-51676101935734' ) ; +test( macro , '51676101935731' , -3 , '51676101935734' ) ; +test( macro , '-51676101935731' , -3 , '-51676101935728' ) ; +test( macro , '51676101935731' , 7 , '51676101935724' ) ; +test( macro , '-51676101935731' , 7 , '-51676101935738' ) ; +test( macro , '51676101935731' , -7 , '51676101935738' ) ; +test( macro , '-51676101935731' , -7 , '-51676101935724' ) ; +test( macro , '51676101935731' , 9 , '51676101935722' ) ; +test( macro , '-51676101935731' , 9 , '-51676101935740' ) ; +test( macro , '51676101935731' , -9 , '51676101935740' ) ; +test( macro , '-51676101935731' , -9 , '-51676101935722' ) ; +test( macro , '51676101935731' , 11 , '51676101935720' ) ; +test( macro , '-51676101935731' , 11 , '-51676101935742' ) ; +test( macro , '51676101935731' , -11 , '51676101935742' ) ; +test( macro , '-51676101935731' , -11 , '-51676101935720' ) ; +test( macro , '51676101935731' , 17 , '51676101935714' ) ; +test( macro , '-51676101935731' , 17 , '-51676101935748' ) ; +test( macro , '51676101935731' , -17 , '51676101935748' ) ; +test( macro , '-51676101935731' , -17 , '-51676101935714' ) ; +test( macro , '51676101935731' , 22 , '51676101935709' ) ; +test( macro , '-51676101935731' , 22 , '-51676101935753' ) ; +test( macro , '51676101935731' , -22 , '51676101935753' ) ; +test( macro , '-51676101935731' , -22 , '-51676101935709' ) ; +test( macro , '51676101935731' , 24 , '51676101935707' ) ; +test( macro , '-51676101935731' , 24 , '-51676101935755' ) ; +test( macro , '51676101935731' , -24 , '51676101935755' ) ; +test( macro , '-51676101935731' , -24 , '-51676101935707' ) ; +test( macro , '51676101935731' , 27 , '51676101935704' ) ; +test( macro , '-51676101935731' , 27 , '-51676101935758' ) ; +test( macro , '51676101935731' , -27 , '51676101935758' ) ; +test( macro , '-51676101935731' , -27 , '-51676101935704' ) ; +test( macro , '51676101935731' , 29 , '51676101935702' ) ; +test( macro , '-51676101935731' , 29 , '-51676101935760' ) ; +test( macro , '51676101935731' , -29 , '51676101935760' ) ; +test( macro , '-51676101935731' , -29 , '-51676101935702' ) ; +test( macro , '51676101935731' , 1234 , '51676101934497' ) ; +test( macro , '-51676101935731' , 1234 , '-51676101936965' ) ; +test( macro , '51676101935731' , -1234 , '51676101936965' ) ; +test( macro , '-51676101935731' , -1234 , '-51676101934497' ) ; +test( macro , '51676101935731' , 5678 , '51676101930053' ) ; +test( macro , '-51676101935731' , 5678 , '-51676101941409' ) ; +test( macro , '51676101935731' , -5678 , '51676101941409' ) ; +test( macro , '-51676101935731' , -5678 , '-51676101930053' ) ; +test( macro , '51676101935731' , 1073741824 , '51675028193907' ) ; +test( macro , '-51676101935731' , 1073741824 , '-51677175677555' ) ; +test( macro , '51676101935731' , -1073741824 , '51677175677555' ) ; +test( macro , '-51676101935731' , -1073741824 , '-51675028193907' ) ; +test( macro , '51676101935731' , 51676101935731 , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-103352203871462' ) ; +test( macro , '51676101935731' , -51676101935731 , '103352203871462' ) ; +test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770248' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , -1 , '717897987691852588770250' ) ; +test( macro , '-717897987691852588770249' , -1 , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , 3 , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , 3 , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , -3 , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , -3 , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , 7 , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , 7 , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , -7 , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , -7 , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , 9 , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , 9 , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , -9 , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , -9 , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , 11 , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , 11 , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , -11 , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , -11 , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , 17 , '717897987691852588770232' ) ; +test( macro , '-717897987691852588770249' , 17 , '-717897987691852588770266' ) ; +test( macro , '717897987691852588770249' , -17 , '717897987691852588770266' ) ; +test( macro , '-717897987691852588770249' , -17 , '-717897987691852588770232' ) ; +test( macro , '717897987691852588770249' , 22 , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , 22 , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , -22 , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , -22 , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , 24 , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , 24 , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , -24 , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , -24 , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , 27 , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , 27 , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , -27 , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , -27 , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , 29 , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , 29 , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , -29 , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , -29 , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , 1234 , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , -1234 , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , 5678 , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , -5678 , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '717897987691851515028425' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '717897987691853662512073' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-717897987640176486834518' ) ; diff --git a/test/src/integer/arithmetic/mod.js b/test/src/integer/arithmetic/mod.js index 14a6085..f5d5585 100644 --- a/test/src/integer/arithmetic/mod.js +++ b/test/src/integer/arithmetic/mod.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} % ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `mod(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '0' ) ; test( macro , '1' , '-1' , '0' ) ; test( macro , '-1' , '-1' , '0' ) ; +test( macro , '1' , '3' , '1' ) ; +test( macro , '-1' , '3' , '2' ) ; +test( macro , '1' , '-3' , '-2' ) ; +test( macro , '-1' , '-3' , '-1' ) ; +test( macro , '1' , '7' , '1' ) ; +test( macro , '-1' , '7' , '6' ) ; +test( macro , '1' , '-7' , '-6' ) ; +test( macro , '-1' , '-7' , '-1' ) ; +test( macro , '1' , '9' , '1' ) ; +test( macro , '-1' , '9' , '8' ) ; +test( macro , '1' , '-9' , '-8' ) ; +test( macro , '-1' , '-9' , '-1' ) ; +test( macro , '1' , '11' , '1' ) ; +test( macro , '-1' , '11' , '10' ) ; +test( macro , '1' , '-11' , '-10' ) ; +test( macro , '-1' , '-11' , '-1' ) ; test( macro , '1' , '17' , '1' ) ; test( macro , '-1' , '17' , '16' ) ; test( macro , '1' , '-17' , '-16' ) ; test( macro , '-1' , '-17' , '-1' ) ; -test( macro , '1' , '51676101935731' , '1' ) ; -test( macro , '-1' , '51676101935731' , '51676101935730' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '-51676101935731' , '-1' ) ; +test( macro , '1' , '22' , '1' ) ; +test( macro , '-1' , '22' , '21' ) ; +test( macro , '1' , '-22' , '-21' ) ; +test( macro , '-1' , '-22' , '-1' ) ; +test( macro , '1' , '24' , '1' ) ; +test( macro , '-1' , '24' , '23' ) ; +test( macro , '1' , '-24' , '-23' ) ; +test( macro , '-1' , '-24' , '-1' ) ; +test( macro , '1' , '27' , '1' ) ; +test( macro , '-1' , '27' , '26' ) ; +test( macro , '1' , '-27' , '-26' ) ; +test( macro , '-1' , '-27' , '-1' ) ; +test( macro , '1' , '29' , '1' ) ; +test( macro , '-1' , '29' , '28' ) ; +test( macro , '1' , '-29' , '-28' ) ; +test( macro , '-1' , '-29' , '-1' ) ; +test( macro , '1' , '1234' , '1' ) ; +test( macro , '-1' , '1234' , '1233' ) ; +test( macro , '1' , '-1234' , '-1233' ) ; +test( macro , '-1' , '-1234' , '-1' ) ; +test( macro , '1' , '5678' , '1' ) ; +test( macro , '-1' , '5678' , '5677' ) ; +test( macro , '1' , '-5678' , '-5677' ) ; +test( macro , '-1' , '-5678' , '-1' ) ; test( macro , '1' , '1073741824' , '1' ) ; test( macro , '-1' , '1073741824' , '1073741823' ) ; test( macro , '1' , '-1073741824' , '-1073741823' ) ; test( macro , '-1' , '-1073741824' , '-1' ) ; +test( macro , '1' , '51676101935731' , '1' ) ; +test( macro , '-1' , '51676101935731' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '-1' ) ; test( macro , '1' , '717897987691852588770249' , '1' ) ; test( macro , '-1' , '717897987691852588770249' , '717897987691852588770248' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '-717897987691852588770249' , '-1' ) ; +test( macro , '3' , '1' , '0' ) ; +test( macro , '-3' , '1' , '0' ) ; +test( macro , '3' , '-1' , '0' ) ; +test( macro , '-3' , '-1' , '0' ) ; +test( macro , '3' , '3' , '0' ) ; +test( macro , '-3' , '3' , '0' ) ; +test( macro , '3' , '-3' , '0' ) ; +test( macro , '-3' , '-3' , '0' ) ; +test( macro , '3' , '7' , '3' ) ; +test( macro , '-3' , '7' , '4' ) ; +test( macro , '3' , '-7' , '-4' ) ; +test( macro , '-3' , '-7' , '-3' ) ; +test( macro , '3' , '9' , '3' ) ; +test( macro , '-3' , '9' , '6' ) ; +test( macro , '3' , '-9' , '-6' ) ; +test( macro , '-3' , '-9' , '-3' ) ; +test( macro , '3' , '11' , '3' ) ; +test( macro , '-3' , '11' , '8' ) ; +test( macro , '3' , '-11' , '-8' ) ; +test( macro , '-3' , '-11' , '-3' ) ; +test( macro , '3' , '17' , '3' ) ; +test( macro , '-3' , '17' , '14' ) ; +test( macro , '3' , '-17' , '-14' ) ; +test( macro , '-3' , '-17' , '-3' ) ; +test( macro , '3' , '22' , '3' ) ; +test( macro , '-3' , '22' , '19' ) ; +test( macro , '3' , '-22' , '-19' ) ; +test( macro , '-3' , '-22' , '-3' ) ; +test( macro , '3' , '24' , '3' ) ; +test( macro , '-3' , '24' , '21' ) ; +test( macro , '3' , '-24' , '-21' ) ; +test( macro , '-3' , '-24' , '-3' ) ; +test( macro , '3' , '27' , '3' ) ; +test( macro , '-3' , '27' , '24' ) ; +test( macro , '3' , '-27' , '-24' ) ; +test( macro , '-3' , '-27' , '-3' ) ; +test( macro , '3' , '29' , '3' ) ; +test( macro , '-3' , '29' , '26' ) ; +test( macro , '3' , '-29' , '-26' ) ; +test( macro , '-3' , '-29' , '-3' ) ; +test( macro , '3' , '1234' , '3' ) ; +test( macro , '-3' , '1234' , '1231' ) ; +test( macro , '3' , '-1234' , '-1231' ) ; +test( macro , '-3' , '-1234' , '-3' ) ; +test( macro , '3' , '5678' , '3' ) ; +test( macro , '-3' , '5678' , '5675' ) ; +test( macro , '3' , '-5678' , '-5675' ) ; +test( macro , '-3' , '-5678' , '-3' ) ; +test( macro , '3' , '1073741824' , '3' ) ; +test( macro , '-3' , '1073741824' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '-3' ) ; +test( macro , '3' , '51676101935731' , '3' ) ; +test( macro , '-3' , '51676101935731' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '-3' ) ; +test( macro , '3' , '717897987691852588770249' , '3' ) ; +test( macro , '-3' , '717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '-3' ) ; +test( macro , '7' , '1' , '0' ) ; +test( macro , '-7' , '1' , '0' ) ; +test( macro , '7' , '-1' , '0' ) ; +test( macro , '-7' , '-1' , '0' ) ; +test( macro , '7' , '3' , '1' ) ; +test( macro , '-7' , '3' , '2' ) ; +test( macro , '7' , '-3' , '-2' ) ; +test( macro , '-7' , '-3' , '-1' ) ; +test( macro , '7' , '7' , '0' ) ; +test( macro , '-7' , '7' , '0' ) ; +test( macro , '7' , '-7' , '0' ) ; +test( macro , '-7' , '-7' , '0' ) ; +test( macro , '7' , '9' , '7' ) ; +test( macro , '-7' , '9' , '2' ) ; +test( macro , '7' , '-9' , '-2' ) ; +test( macro , '-7' , '-9' , '-7' ) ; +test( macro , '7' , '11' , '7' ) ; +test( macro , '-7' , '11' , '4' ) ; +test( macro , '7' , '-11' , '-4' ) ; +test( macro , '-7' , '-11' , '-7' ) ; +test( macro , '7' , '17' , '7' ) ; +test( macro , '-7' , '17' , '10' ) ; +test( macro , '7' , '-17' , '-10' ) ; +test( macro , '-7' , '-17' , '-7' ) ; +test( macro , '7' , '22' , '7' ) ; +test( macro , '-7' , '22' , '15' ) ; +test( macro , '7' , '-22' , '-15' ) ; +test( macro , '-7' , '-22' , '-7' ) ; +test( macro , '7' , '24' , '7' ) ; +test( macro , '-7' , '24' , '17' ) ; +test( macro , '7' , '-24' , '-17' ) ; +test( macro , '-7' , '-24' , '-7' ) ; +test( macro , '7' , '27' , '7' ) ; +test( macro , '-7' , '27' , '20' ) ; +test( macro , '7' , '-27' , '-20' ) ; +test( macro , '-7' , '-27' , '-7' ) ; +test( macro , '7' , '29' , '7' ) ; +test( macro , '-7' , '29' , '22' ) ; +test( macro , '7' , '-29' , '-22' ) ; +test( macro , '-7' , '-29' , '-7' ) ; +test( macro , '7' , '1234' , '7' ) ; +test( macro , '-7' , '1234' , '1227' ) ; +test( macro , '7' , '-1234' , '-1227' ) ; +test( macro , '-7' , '-1234' , '-7' ) ; +test( macro , '7' , '5678' , '7' ) ; +test( macro , '-7' , '5678' , '5671' ) ; +test( macro , '7' , '-5678' , '-5671' ) ; +test( macro , '-7' , '-5678' , '-7' ) ; +test( macro , '7' , '1073741824' , '7' ) ; +test( macro , '-7' , '1073741824' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '-7' ) ; +test( macro , '7' , '51676101935731' , '7' ) ; +test( macro , '-7' , '51676101935731' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '-7' ) ; +test( macro , '7' , '717897987691852588770249' , '7' ) ; +test( macro , '-7' , '717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '-7' ) ; +test( macro , '9' , '1' , '0' ) ; +test( macro , '-9' , '1' , '0' ) ; +test( macro , '9' , '-1' , '0' ) ; +test( macro , '-9' , '-1' , '0' ) ; +test( macro , '9' , '3' , '0' ) ; +test( macro , '-9' , '3' , '0' ) ; +test( macro , '9' , '-3' , '0' ) ; +test( macro , '-9' , '-3' , '0' ) ; +test( macro , '9' , '7' , '2' ) ; +test( macro , '-9' , '7' , '5' ) ; +test( macro , '9' , '-7' , '-5' ) ; +test( macro , '-9' , '-7' , '-2' ) ; +test( macro , '9' , '9' , '0' ) ; +test( macro , '-9' , '9' , '0' ) ; +test( macro , '9' , '-9' , '0' ) ; +test( macro , '-9' , '-9' , '0' ) ; +test( macro , '9' , '11' , '9' ) ; +test( macro , '-9' , '11' , '2' ) ; +test( macro , '9' , '-11' , '-2' ) ; +test( macro , '-9' , '-11' , '-9' ) ; +test( macro , '9' , '17' , '9' ) ; +test( macro , '-9' , '17' , '8' ) ; +test( macro , '9' , '-17' , '-8' ) ; +test( macro , '-9' , '-17' , '-9' ) ; +test( macro , '9' , '22' , '9' ) ; +test( macro , '-9' , '22' , '13' ) ; +test( macro , '9' , '-22' , '-13' ) ; +test( macro , '-9' , '-22' , '-9' ) ; +test( macro , '9' , '24' , '9' ) ; +test( macro , '-9' , '24' , '15' ) ; +test( macro , '9' , '-24' , '-15' ) ; +test( macro , '-9' , '-24' , '-9' ) ; +test( macro , '9' , '27' , '9' ) ; +test( macro , '-9' , '27' , '18' ) ; +test( macro , '9' , '-27' , '-18' ) ; +test( macro , '-9' , '-27' , '-9' ) ; +test( macro , '9' , '29' , '9' ) ; +test( macro , '-9' , '29' , '20' ) ; +test( macro , '9' , '-29' , '-20' ) ; +test( macro , '-9' , '-29' , '-9' ) ; +test( macro , '9' , '1234' , '9' ) ; +test( macro , '-9' , '1234' , '1225' ) ; +test( macro , '9' , '-1234' , '-1225' ) ; +test( macro , '-9' , '-1234' , '-9' ) ; +test( macro , '9' , '5678' , '9' ) ; +test( macro , '-9' , '5678' , '5669' ) ; +test( macro , '9' , '-5678' , '-5669' ) ; +test( macro , '-9' , '-5678' , '-9' ) ; +test( macro , '9' , '1073741824' , '9' ) ; +test( macro , '-9' , '1073741824' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '-9' ) ; +test( macro , '9' , '51676101935731' , '9' ) ; +test( macro , '-9' , '51676101935731' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '-9' ) ; +test( macro , '9' , '717897987691852588770249' , '9' ) ; +test( macro , '-9' , '717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '-9' ) ; +test( macro , '11' , '1' , '0' ) ; +test( macro , '-11' , '1' , '0' ) ; +test( macro , '11' , '-1' , '0' ) ; +test( macro , '-11' , '-1' , '0' ) ; +test( macro , '11' , '3' , '2' ) ; +test( macro , '-11' , '3' , '1' ) ; +test( macro , '11' , '-3' , '-1' ) ; +test( macro , '-11' , '-3' , '-2' ) ; +test( macro , '11' , '7' , '4' ) ; +test( macro , '-11' , '7' , '3' ) ; +test( macro , '11' , '-7' , '-3' ) ; +test( macro , '-11' , '-7' , '-4' ) ; +test( macro , '11' , '9' , '2' ) ; +test( macro , '-11' , '9' , '7' ) ; +test( macro , '11' , '-9' , '-7' ) ; +test( macro , '-11' , '-9' , '-2' ) ; +test( macro , '11' , '11' , '0' ) ; +test( macro , '-11' , '11' , '0' ) ; +test( macro , '11' , '-11' , '0' ) ; +test( macro , '-11' , '-11' , '0' ) ; +test( macro , '11' , '17' , '11' ) ; +test( macro , '-11' , '17' , '6' ) ; +test( macro , '11' , '-17' , '-6' ) ; +test( macro , '-11' , '-17' , '-11' ) ; +test( macro , '11' , '22' , '11' ) ; +test( macro , '-11' , '22' , '11' ) ; +test( macro , '11' , '-22' , '-11' ) ; +test( macro , '-11' , '-22' , '-11' ) ; +test( macro , '11' , '24' , '11' ) ; +test( macro , '-11' , '24' , '13' ) ; +test( macro , '11' , '-24' , '-13' ) ; +test( macro , '-11' , '-24' , '-11' ) ; +test( macro , '11' , '27' , '11' ) ; +test( macro , '-11' , '27' , '16' ) ; +test( macro , '11' , '-27' , '-16' ) ; +test( macro , '-11' , '-27' , '-11' ) ; +test( macro , '11' , '29' , '11' ) ; +test( macro , '-11' , '29' , '18' ) ; +test( macro , '11' , '-29' , '-18' ) ; +test( macro , '-11' , '-29' , '-11' ) ; +test( macro , '11' , '1234' , '11' ) ; +test( macro , '-11' , '1234' , '1223' ) ; +test( macro , '11' , '-1234' , '-1223' ) ; +test( macro , '-11' , '-1234' , '-11' ) ; +test( macro , '11' , '5678' , '11' ) ; +test( macro , '-11' , '5678' , '5667' ) ; +test( macro , '11' , '-5678' , '-5667' ) ; +test( macro , '-11' , '-5678' , '-11' ) ; +test( macro , '11' , '1073741824' , '11' ) ; +test( macro , '-11' , '1073741824' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '-11' ) ; +test( macro , '11' , '51676101935731' , '11' ) ; +test( macro , '-11' , '51676101935731' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '-11' ) ; +test( macro , '11' , '717897987691852588770249' , '11' ) ; +test( macro , '-11' , '717897987691852588770249' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '-11' ) ; test( macro , '17' , '1' , '0' ) ; test( macro , '-17' , '1' , '0' ) ; test( macro , '17' , '-1' , '0' ) ; test( macro , '-17' , '-1' , '0' ) ; +test( macro , '17' , '3' , '2' ) ; +test( macro , '-17' , '3' , '1' ) ; +test( macro , '17' , '-3' , '-1' ) ; +test( macro , '-17' , '-3' , '-2' ) ; +test( macro , '17' , '7' , '3' ) ; +test( macro , '-17' , '7' , '4' ) ; +test( macro , '17' , '-7' , '-4' ) ; +test( macro , '-17' , '-7' , '-3' ) ; +test( macro , '17' , '9' , '8' ) ; +test( macro , '-17' , '9' , '1' ) ; +test( macro , '17' , '-9' , '-1' ) ; +test( macro , '-17' , '-9' , '-8' ) ; +test( macro , '17' , '11' , '6' ) ; +test( macro , '-17' , '11' , '5' ) ; +test( macro , '17' , '-11' , '-5' ) ; +test( macro , '-17' , '-11' , '-6' ) ; test( macro , '17' , '17' , '0' ) ; test( macro , '-17' , '17' , '0' ) ; test( macro , '17' , '-17' , '0' ) ; test( macro , '-17' , '-17' , '0' ) ; -test( macro , '17' , '51676101935731' , '17' ) ; -test( macro , '-17' , '51676101935731' , '51676101935714' ) ; -test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '-51676101935731' , '-17' ) ; +test( macro , '17' , '22' , '17' ) ; +test( macro , '-17' , '22' , '5' ) ; +test( macro , '17' , '-22' , '-5' ) ; +test( macro , '-17' , '-22' , '-17' ) ; +test( macro , '17' , '24' , '17' ) ; +test( macro , '-17' , '24' , '7' ) ; +test( macro , '17' , '-24' , '-7' ) ; +test( macro , '-17' , '-24' , '-17' ) ; +test( macro , '17' , '27' , '17' ) ; +test( macro , '-17' , '27' , '10' ) ; +test( macro , '17' , '-27' , '-10' ) ; +test( macro , '-17' , '-27' , '-17' ) ; +test( macro , '17' , '29' , '17' ) ; +test( macro , '-17' , '29' , '12' ) ; +test( macro , '17' , '-29' , '-12' ) ; +test( macro , '-17' , '-29' , '-17' ) ; +test( macro , '17' , '1234' , '17' ) ; +test( macro , '-17' , '1234' , '1217' ) ; +test( macro , '17' , '-1234' , '-1217' ) ; +test( macro , '-17' , '-1234' , '-17' ) ; +test( macro , '17' , '5678' , '17' ) ; +test( macro , '-17' , '5678' , '5661' ) ; +test( macro , '17' , '-5678' , '-5661' ) ; +test( macro , '-17' , '-5678' , '-17' ) ; test( macro , '17' , '1073741824' , '17' ) ; test( macro , '-17' , '1073741824' , '1073741807' ) ; test( macro , '17' , '-1073741824' , '-1073741807' ) ; test( macro , '-17' , '-1073741824' , '-17' ) ; +test( macro , '17' , '51676101935731' , '17' ) ; +test( macro , '-17' , '51676101935731' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '-17' ) ; test( macro , '17' , '717897987691852588770249' , '17' ) ; test( macro , '-17' , '717897987691852588770249' , '717897987691852588770232' ) ; test( macro , '17' , '-717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '-717897987691852588770249' , '-17' ) ; -test( macro , '51676101935731' , '1' , '0' ) ; -test( macro , '-51676101935731' , '1' , '0' ) ; -test( macro , '51676101935731' , '-1' , '0' ) ; -test( macro , '-51676101935731' , '-1' , '0' ) ; -test( macro , '51676101935731' , '17' , '14' ) ; -test( macro , '-51676101935731' , '17' , '3' ) ; -test( macro , '51676101935731' , '-17' , '-3' ) ; -test( macro , '-51676101935731' , '-17' , '-14' ) ; -test( macro , '51676101935731' , '51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '51676101935731' , '0' ) ; -test( macro , '51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '51676101935731' , '1073741824' , '129172083' ) ; -test( macro , '-51676101935731' , '1073741824' , '944569741' ) ; -test( macro , '51676101935731' , '-1073741824' , '-944569741' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-129172083' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '51676101935731' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '-51676101935731' ) ; +test( macro , '22' , '1' , '0' ) ; +test( macro , '-22' , '1' , '0' ) ; +test( macro , '22' , '-1' , '0' ) ; +test( macro , '-22' , '-1' , '0' ) ; +test( macro , '22' , '3' , '1' ) ; +test( macro , '-22' , '3' , '2' ) ; +test( macro , '22' , '-3' , '-2' ) ; +test( macro , '-22' , '-3' , '-1' ) ; +test( macro , '22' , '7' , '1' ) ; +test( macro , '-22' , '7' , '6' ) ; +test( macro , '22' , '-7' , '-6' ) ; +test( macro , '-22' , '-7' , '-1' ) ; +test( macro , '22' , '9' , '4' ) ; +test( macro , '-22' , '9' , '5' ) ; +test( macro , '22' , '-9' , '-5' ) ; +test( macro , '-22' , '-9' , '-4' ) ; +test( macro , '22' , '11' , '0' ) ; +test( macro , '-22' , '11' , '0' ) ; +test( macro , '22' , '-11' , '0' ) ; +test( macro , '-22' , '-11' , '0' ) ; +test( macro , '22' , '17' , '5' ) ; +test( macro , '-22' , '17' , '12' ) ; +test( macro , '22' , '-17' , '-12' ) ; +test( macro , '-22' , '-17' , '-5' ) ; +test( macro , '22' , '22' , '0' ) ; +test( macro , '-22' , '22' , '0' ) ; +test( macro , '22' , '-22' , '0' ) ; +test( macro , '-22' , '-22' , '0' ) ; +test( macro , '22' , '24' , '22' ) ; +test( macro , '-22' , '24' , '2' ) ; +test( macro , '22' , '-24' , '-2' ) ; +test( macro , '-22' , '-24' , '-22' ) ; +test( macro , '22' , '27' , '22' ) ; +test( macro , '-22' , '27' , '5' ) ; +test( macro , '22' , '-27' , '-5' ) ; +test( macro , '-22' , '-27' , '-22' ) ; +test( macro , '22' , '29' , '22' ) ; +test( macro , '-22' , '29' , '7' ) ; +test( macro , '22' , '-29' , '-7' ) ; +test( macro , '-22' , '-29' , '-22' ) ; +test( macro , '22' , '1234' , '22' ) ; +test( macro , '-22' , '1234' , '1212' ) ; +test( macro , '22' , '-1234' , '-1212' ) ; +test( macro , '-22' , '-1234' , '-22' ) ; +test( macro , '22' , '5678' , '22' ) ; +test( macro , '-22' , '5678' , '5656' ) ; +test( macro , '22' , '-5678' , '-5656' ) ; +test( macro , '-22' , '-5678' , '-22' ) ; +test( macro , '22' , '1073741824' , '22' ) ; +test( macro , '-22' , '1073741824' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '-22' ) ; +test( macro , '22' , '51676101935731' , '22' ) ; +test( macro , '-22' , '51676101935731' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '-22' ) ; +test( macro , '22' , '717897987691852588770249' , '22' ) ; +test( macro , '-22' , '717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '-22' ) ; +test( macro , '24' , '1' , '0' ) ; +test( macro , '-24' , '1' , '0' ) ; +test( macro , '24' , '-1' , '0' ) ; +test( macro , '-24' , '-1' , '0' ) ; +test( macro , '24' , '3' , '0' ) ; +test( macro , '-24' , '3' , '0' ) ; +test( macro , '24' , '-3' , '0' ) ; +test( macro , '-24' , '-3' , '0' ) ; +test( macro , '24' , '7' , '3' ) ; +test( macro , '-24' , '7' , '4' ) ; +test( macro , '24' , '-7' , '-4' ) ; +test( macro , '-24' , '-7' , '-3' ) ; +test( macro , '24' , '9' , '6' ) ; +test( macro , '-24' , '9' , '3' ) ; +test( macro , '24' , '-9' , '-3' ) ; +test( macro , '-24' , '-9' , '-6' ) ; +test( macro , '24' , '11' , '2' ) ; +test( macro , '-24' , '11' , '9' ) ; +test( macro , '24' , '-11' , '-9' ) ; +test( macro , '-24' , '-11' , '-2' ) ; +test( macro , '24' , '17' , '7' ) ; +test( macro , '-24' , '17' , '10' ) ; +test( macro , '24' , '-17' , '-10' ) ; +test( macro , '-24' , '-17' , '-7' ) ; +test( macro , '24' , '22' , '2' ) ; +test( macro , '-24' , '22' , '20' ) ; +test( macro , '24' , '-22' , '-20' ) ; +test( macro , '-24' , '-22' , '-2' ) ; +test( macro , '24' , '24' , '0' ) ; +test( macro , '-24' , '24' , '0' ) ; +test( macro , '24' , '-24' , '0' ) ; +test( macro , '-24' , '-24' , '0' ) ; +test( macro , '24' , '27' , '24' ) ; +test( macro , '-24' , '27' , '3' ) ; +test( macro , '24' , '-27' , '-3' ) ; +test( macro , '-24' , '-27' , '-24' ) ; +test( macro , '24' , '29' , '24' ) ; +test( macro , '-24' , '29' , '5' ) ; +test( macro , '24' , '-29' , '-5' ) ; +test( macro , '-24' , '-29' , '-24' ) ; +test( macro , '24' , '1234' , '24' ) ; +test( macro , '-24' , '1234' , '1210' ) ; +test( macro , '24' , '-1234' , '-1210' ) ; +test( macro , '-24' , '-1234' , '-24' ) ; +test( macro , '24' , '5678' , '24' ) ; +test( macro , '-24' , '5678' , '5654' ) ; +test( macro , '24' , '-5678' , '-5654' ) ; +test( macro , '-24' , '-5678' , '-24' ) ; +test( macro , '24' , '1073741824' , '24' ) ; +test( macro , '-24' , '1073741824' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '-24' ) ; +test( macro , '24' , '51676101935731' , '24' ) ; +test( macro , '-24' , '51676101935731' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '-24' ) ; +test( macro , '24' , '717897987691852588770249' , '24' ) ; +test( macro , '-24' , '717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '-24' ) ; +test( macro , '27' , '1' , '0' ) ; +test( macro , '-27' , '1' , '0' ) ; +test( macro , '27' , '-1' , '0' ) ; +test( macro , '-27' , '-1' , '0' ) ; +test( macro , '27' , '3' , '0' ) ; +test( macro , '-27' , '3' , '0' ) ; +test( macro , '27' , '-3' , '0' ) ; +test( macro , '-27' , '-3' , '0' ) ; +test( macro , '27' , '7' , '6' ) ; +test( macro , '-27' , '7' , '1' ) ; +test( macro , '27' , '-7' , '-1' ) ; +test( macro , '-27' , '-7' , '-6' ) ; +test( macro , '27' , '9' , '0' ) ; +test( macro , '-27' , '9' , '0' ) ; +test( macro , '27' , '-9' , '0' ) ; +test( macro , '-27' , '-9' , '0' ) ; +test( macro , '27' , '11' , '5' ) ; +test( macro , '-27' , '11' , '6' ) ; +test( macro , '27' , '-11' , '-6' ) ; +test( macro , '-27' , '-11' , '-5' ) ; +test( macro , '27' , '17' , '10' ) ; +test( macro , '-27' , '17' , '7' ) ; +test( macro , '27' , '-17' , '-7' ) ; +test( macro , '-27' , '-17' , '-10' ) ; +test( macro , '27' , '22' , '5' ) ; +test( macro , '-27' , '22' , '17' ) ; +test( macro , '27' , '-22' , '-17' ) ; +test( macro , '-27' , '-22' , '-5' ) ; +test( macro , '27' , '24' , '3' ) ; +test( macro , '-27' , '24' , '21' ) ; +test( macro , '27' , '-24' , '-21' ) ; +test( macro , '-27' , '-24' , '-3' ) ; +test( macro , '27' , '27' , '0' ) ; +test( macro , '-27' , '27' , '0' ) ; +test( macro , '27' , '-27' , '0' ) ; +test( macro , '-27' , '-27' , '0' ) ; +test( macro , '27' , '29' , '27' ) ; +test( macro , '-27' , '29' , '2' ) ; +test( macro , '27' , '-29' , '-2' ) ; +test( macro , '-27' , '-29' , '-27' ) ; +test( macro , '27' , '1234' , '27' ) ; +test( macro , '-27' , '1234' , '1207' ) ; +test( macro , '27' , '-1234' , '-1207' ) ; +test( macro , '-27' , '-1234' , '-27' ) ; +test( macro , '27' , '5678' , '27' ) ; +test( macro , '-27' , '5678' , '5651' ) ; +test( macro , '27' , '-5678' , '-5651' ) ; +test( macro , '-27' , '-5678' , '-27' ) ; +test( macro , '27' , '1073741824' , '27' ) ; +test( macro , '-27' , '1073741824' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '-27' ) ; +test( macro , '27' , '51676101935731' , '27' ) ; +test( macro , '-27' , '51676101935731' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '-27' ) ; +test( macro , '27' , '717897987691852588770249' , '27' ) ; +test( macro , '-27' , '717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '-27' ) ; +test( macro , '29' , '1' , '0' ) ; +test( macro , '-29' , '1' , '0' ) ; +test( macro , '29' , '-1' , '0' ) ; +test( macro , '-29' , '-1' , '0' ) ; +test( macro , '29' , '3' , '2' ) ; +test( macro , '-29' , '3' , '1' ) ; +test( macro , '29' , '-3' , '-1' ) ; +test( macro , '-29' , '-3' , '-2' ) ; +test( macro , '29' , '7' , '1' ) ; +test( macro , '-29' , '7' , '6' ) ; +test( macro , '29' , '-7' , '-6' ) ; +test( macro , '-29' , '-7' , '-1' ) ; +test( macro , '29' , '9' , '2' ) ; +test( macro , '-29' , '9' , '7' ) ; +test( macro , '29' , '-9' , '-7' ) ; +test( macro , '-29' , '-9' , '-2' ) ; +test( macro , '29' , '11' , '7' ) ; +test( macro , '-29' , '11' , '4' ) ; +test( macro , '29' , '-11' , '-4' ) ; +test( macro , '-29' , '-11' , '-7' ) ; +test( macro , '29' , '17' , '12' ) ; +test( macro , '-29' , '17' , '5' ) ; +test( macro , '29' , '-17' , '-5' ) ; +test( macro , '-29' , '-17' , '-12' ) ; +test( macro , '29' , '22' , '7' ) ; +test( macro , '-29' , '22' , '15' ) ; +test( macro , '29' , '-22' , '-15' ) ; +test( macro , '-29' , '-22' , '-7' ) ; +test( macro , '29' , '24' , '5' ) ; +test( macro , '-29' , '24' , '19' ) ; +test( macro , '29' , '-24' , '-19' ) ; +test( macro , '-29' , '-24' , '-5' ) ; +test( macro , '29' , '27' , '2' ) ; +test( macro , '-29' , '27' , '25' ) ; +test( macro , '29' , '-27' , '-25' ) ; +test( macro , '-29' , '-27' , '-2' ) ; +test( macro , '29' , '29' , '0' ) ; +test( macro , '-29' , '29' , '0' ) ; +test( macro , '29' , '-29' , '0' ) ; +test( macro , '-29' , '-29' , '0' ) ; +test( macro , '29' , '1234' , '29' ) ; +test( macro , '-29' , '1234' , '1205' ) ; +test( macro , '29' , '-1234' , '-1205' ) ; +test( macro , '-29' , '-1234' , '-29' ) ; +test( macro , '29' , '5678' , '29' ) ; +test( macro , '-29' , '5678' , '5649' ) ; +test( macro , '29' , '-5678' , '-5649' ) ; +test( macro , '-29' , '-5678' , '-29' ) ; +test( macro , '29' , '1073741824' , '29' ) ; +test( macro , '-29' , '1073741824' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '-29' ) ; +test( macro , '29' , '51676101935731' , '29' ) ; +test( macro , '-29' , '51676101935731' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '-29' ) ; +test( macro , '29' , '717897987691852588770249' , '29' ) ; +test( macro , '-29' , '717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '-29' ) ; +test( macro , '1234' , '1' , '0' ) ; +test( macro , '-1234' , '1' , '0' ) ; +test( macro , '1234' , '-1' , '0' ) ; +test( macro , '-1234' , '-1' , '0' ) ; +test( macro , '1234' , '3' , '1' ) ; +test( macro , '-1234' , '3' , '2' ) ; +test( macro , '1234' , '-3' , '-2' ) ; +test( macro , '-1234' , '-3' , '-1' ) ; +test( macro , '1234' , '7' , '2' ) ; +test( macro , '-1234' , '7' , '5' ) ; +test( macro , '1234' , '-7' , '-5' ) ; +test( macro , '-1234' , '-7' , '-2' ) ; +test( macro , '1234' , '9' , '1' ) ; +test( macro , '-1234' , '9' , '8' ) ; +test( macro , '1234' , '-9' , '-8' ) ; +test( macro , '-1234' , '-9' , '-1' ) ; +test( macro , '1234' , '11' , '2' ) ; +test( macro , '-1234' , '11' , '9' ) ; +test( macro , '1234' , '-11' , '-9' ) ; +test( macro , '-1234' , '-11' , '-2' ) ; +test( macro , '1234' , '17' , '10' ) ; +test( macro , '-1234' , '17' , '7' ) ; +test( macro , '1234' , '-17' , '-7' ) ; +test( macro , '-1234' , '-17' , '-10' ) ; +test( macro , '1234' , '22' , '2' ) ; +test( macro , '-1234' , '22' , '20' ) ; +test( macro , '1234' , '-22' , '-20' ) ; +test( macro , '-1234' , '-22' , '-2' ) ; +test( macro , '1234' , '24' , '10' ) ; +test( macro , '-1234' , '24' , '14' ) ; +test( macro , '1234' , '-24' , '-14' ) ; +test( macro , '-1234' , '-24' , '-10' ) ; +test( macro , '1234' , '27' , '19' ) ; +test( macro , '-1234' , '27' , '8' ) ; +test( macro , '1234' , '-27' , '-8' ) ; +test( macro , '-1234' , '-27' , '-19' ) ; +test( macro , '1234' , '29' , '16' ) ; +test( macro , '-1234' , '29' , '13' ) ; +test( macro , '1234' , '-29' , '-13' ) ; +test( macro , '-1234' , '-29' , '-16' ) ; +test( macro , '1234' , '1234' , '0' ) ; +test( macro , '-1234' , '1234' , '0' ) ; +test( macro , '1234' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1234' , '0' ) ; +test( macro , '1234' , '5678' , '1234' ) ; +test( macro , '-1234' , '5678' , '4444' ) ; +test( macro , '1234' , '-5678' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '-1234' ) ; +test( macro , '1234' , '1073741824' , '1234' ) ; +test( macro , '-1234' , '1073741824' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '-1234' ) ; +test( macro , '1234' , '51676101935731' , '1234' ) ; +test( macro , '-1234' , '51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '-1234' ) ; +test( macro , '1234' , '717897987691852588770249' , '1234' ) ; +test( macro , '-1234' , '717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '-1234' ) ; +test( macro , '5678' , '1' , '0' ) ; +test( macro , '-5678' , '1' , '0' ) ; +test( macro , '5678' , '-1' , '0' ) ; +test( macro , '-5678' , '-1' , '0' ) ; +test( macro , '5678' , '3' , '2' ) ; +test( macro , '-5678' , '3' , '1' ) ; +test( macro , '5678' , '-3' , '-1' ) ; +test( macro , '-5678' , '-3' , '-2' ) ; +test( macro , '5678' , '7' , '1' ) ; +test( macro , '-5678' , '7' , '6' ) ; +test( macro , '5678' , '-7' , '-6' ) ; +test( macro , '-5678' , '-7' , '-1' ) ; +test( macro , '5678' , '9' , '8' ) ; +test( macro , '-5678' , '9' , '1' ) ; +test( macro , '5678' , '-9' , '-1' ) ; +test( macro , '-5678' , '-9' , '-8' ) ; +test( macro , '5678' , '11' , '2' ) ; +test( macro , '-5678' , '11' , '9' ) ; +test( macro , '5678' , '-11' , '-9' ) ; +test( macro , '-5678' , '-11' , '-2' ) ; +test( macro , '5678' , '17' , '0' ) ; +test( macro , '-5678' , '17' , '0' ) ; +test( macro , '5678' , '-17' , '0' ) ; +test( macro , '-5678' , '-17' , '0' ) ; +test( macro , '5678' , '22' , '2' ) ; +test( macro , '-5678' , '22' , '20' ) ; +test( macro , '5678' , '-22' , '-20' ) ; +test( macro , '-5678' , '-22' , '-2' ) ; +test( macro , '5678' , '24' , '14' ) ; +test( macro , '-5678' , '24' , '10' ) ; +test( macro , '5678' , '-24' , '-10' ) ; +test( macro , '-5678' , '-24' , '-14' ) ; +test( macro , '5678' , '27' , '8' ) ; +test( macro , '-5678' , '27' , '19' ) ; +test( macro , '5678' , '-27' , '-19' ) ; +test( macro , '-5678' , '-27' , '-8' ) ; +test( macro , '5678' , '29' , '23' ) ; +test( macro , '-5678' , '29' , '6' ) ; +test( macro , '5678' , '-29' , '-6' ) ; +test( macro , '-5678' , '-29' , '-23' ) ; +test( macro , '5678' , '1234' , '742' ) ; +test( macro , '-5678' , '1234' , '492' ) ; +test( macro , '5678' , '-1234' , '-492' ) ; +test( macro , '-5678' , '-1234' , '-742' ) ; +test( macro , '5678' , '5678' , '0' ) ; +test( macro , '-5678' , '5678' , '0' ) ; +test( macro , '5678' , '-5678' , '0' ) ; +test( macro , '-5678' , '-5678' , '0' ) ; +test( macro , '5678' , '1073741824' , '5678' ) ; +test( macro , '-5678' , '1073741824' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '-5678' ) ; +test( macro , '5678' , '51676101935731' , '5678' ) ; +test( macro , '-5678' , '51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '-5678' ) ; +test( macro , '5678' , '717897987691852588770249' , '5678' ) ; +test( macro , '-5678' , '717897987691852588770249' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '-5678' ) ; test( macro , '1073741824' , '1' , '0' ) ; test( macro , '-1073741824' , '1' , '0' ) ; test( macro , '1073741824' , '-1' , '0' ) ; test( macro , '-1073741824' , '-1' , '0' ) ; +test( macro , '1073741824' , '3' , '1' ) ; +test( macro , '-1073741824' , '3' , '2' ) ; +test( macro , '1073741824' , '-3' , '-2' ) ; +test( macro , '-1073741824' , '-3' , '-1' ) ; +test( macro , '1073741824' , '7' , '1' ) ; +test( macro , '-1073741824' , '7' , '6' ) ; +test( macro , '1073741824' , '-7' , '-6' ) ; +test( macro , '-1073741824' , '-7' , '-1' ) ; +test( macro , '1073741824' , '9' , '1' ) ; +test( macro , '-1073741824' , '9' , '8' ) ; +test( macro , '1073741824' , '-9' , '-8' ) ; +test( macro , '-1073741824' , '-9' , '-1' ) ; +test( macro , '1073741824' , '11' , '1' ) ; +test( macro , '-1073741824' , '11' , '10' ) ; +test( macro , '1073741824' , '-11' , '-10' ) ; +test( macro , '-1073741824' , '-11' , '-1' ) ; test( macro , '1073741824' , '17' , '13' ) ; test( macro , '-1073741824' , '17' , '4' ) ; test( macro , '1073741824' , '-17' , '-4' ) ; test( macro , '-1073741824' , '-17' , '-13' ) ; -test( macro , '1073741824' , '51676101935731' , '1073741824' ) ; -test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; -test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '-51676101935731' , '-1073741824' ) ; +test( macro , '1073741824' , '22' , '12' ) ; +test( macro , '-1073741824' , '22' , '10' ) ; +test( macro , '1073741824' , '-22' , '-10' ) ; +test( macro , '-1073741824' , '-22' , '-12' ) ; +test( macro , '1073741824' , '24' , '16' ) ; +test( macro , '-1073741824' , '24' , '8' ) ; +test( macro , '1073741824' , '-24' , '-8' ) ; +test( macro , '-1073741824' , '-24' , '-16' ) ; +test( macro , '1073741824' , '27' , '19' ) ; +test( macro , '-1073741824' , '27' , '8' ) ; +test( macro , '1073741824' , '-27' , '-8' ) ; +test( macro , '-1073741824' , '-27' , '-19' ) ; +test( macro , '1073741824' , '29' , '4' ) ; +test( macro , '-1073741824' , '29' , '25' ) ; +test( macro , '1073741824' , '-29' , '-25' ) ; +test( macro , '-1073741824' , '-29' , '-4' ) ; +test( macro , '1073741824' , '1234' , '170' ) ; +test( macro , '-1073741824' , '1234' , '1064' ) ; +test( macro , '1073741824' , '-1234' , '-1064' ) ; +test( macro , '-1073741824' , '-1234' , '-170' ) ; +test( macro , '1073741824' , '5678' , '3634' ) ; +test( macro , '-1073741824' , '5678' , '2044' ) ; +test( macro , '1073741824' , '-5678' , '-2044' ) ; +test( macro , '-1073741824' , '-5678' , '-3634' ) ; test( macro , '1073741824' , '1073741824' , '0' ) ; test( macro , '-1073741824' , '1073741824' , '0' ) ; test( macro , '1073741824' , '-1073741824' , '0' ) ; test( macro , '-1073741824' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '1073741824' ) ; +test( macro , '-1073741824' , '51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '-1073741824' ) ; test( macro , '1073741824' , '717897987691852588770249' , '1073741824' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '717897987691851515028425' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '-1073741824' ) ; +test( macro , '51676101935731' , '1' , '0' ) ; +test( macro , '-51676101935731' , '1' , '0' ) ; +test( macro , '51676101935731' , '-1' , '0' ) ; +test( macro , '-51676101935731' , '-1' , '0' ) ; +test( macro , '51676101935731' , '3' , '1' ) ; +test( macro , '-51676101935731' , '3' , '2' ) ; +test( macro , '51676101935731' , '-3' , '-2' ) ; +test( macro , '-51676101935731' , '-3' , '-1' ) ; +test( macro , '51676101935731' , '7' , '0' ) ; +test( macro , '-51676101935731' , '7' , '0' ) ; +test( macro , '51676101935731' , '-7' , '0' ) ; +test( macro , '-51676101935731' , '-7' , '0' ) ; +test( macro , '51676101935731' , '9' , '1' ) ; +test( macro , '-51676101935731' , '9' , '8' ) ; +test( macro , '51676101935731' , '-9' , '-8' ) ; +test( macro , '-51676101935731' , '-9' , '-1' ) ; +test( macro , '51676101935731' , '11' , '9' ) ; +test( macro , '-51676101935731' , '11' , '2' ) ; +test( macro , '51676101935731' , '-11' , '-2' ) ; +test( macro , '-51676101935731' , '-11' , '-9' ) ; +test( macro , '51676101935731' , '17' , '14' ) ; +test( macro , '-51676101935731' , '17' , '3' ) ; +test( macro , '51676101935731' , '-17' , '-3' ) ; +test( macro , '-51676101935731' , '-17' , '-14' ) ; +test( macro , '51676101935731' , '22' , '9' ) ; +test( macro , '-51676101935731' , '22' , '13' ) ; +test( macro , '51676101935731' , '-22' , '-13' ) ; +test( macro , '-51676101935731' , '-22' , '-9' ) ; +test( macro , '51676101935731' , '24' , '19' ) ; +test( macro , '-51676101935731' , '24' , '5' ) ; +test( macro , '51676101935731' , '-24' , '-5' ) ; +test( macro , '-51676101935731' , '-24' , '-19' ) ; +test( macro , '51676101935731' , '27' , '10' ) ; +test( macro , '-51676101935731' , '27' , '17' ) ; +test( macro , '51676101935731' , '-27' , '-17' ) ; +test( macro , '-51676101935731' , '-27' , '-10' ) ; +test( macro , '51676101935731' , '29' , '28' ) ; +test( macro , '-51676101935731' , '29' , '1' ) ; +test( macro , '51676101935731' , '-29' , '-1' ) ; +test( macro , '-51676101935731' , '-29' , '-28' ) ; +test( macro , '51676101935731' , '1234' , '835' ) ; +test( macro , '-51676101935731' , '1234' , '399' ) ; +test( macro , '51676101935731' , '-1234' , '-399' ) ; +test( macro , '-51676101935731' , '-1234' , '-835' ) ; +test( macro , '51676101935731' , '5678' , '3023' ) ; +test( macro , '-51676101935731' , '5678' , '2655' ) ; +test( macro , '51676101935731' , '-5678' , '-2655' ) ; +test( macro , '-51676101935731' , '-5678' , '-3023' ) ; +test( macro , '51676101935731' , '1073741824' , '129172083' ) ; +test( macro , '-51676101935731' , '1073741824' , '944569741' ) ; +test( macro , '51676101935731' , '-1073741824' , '-944569741' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-129172083' ) ; +test( macro , '51676101935731' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '51676101935731' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '-51676101935731' ) ; test( macro , '717897987691852588770249' , '1' , '0' ) ; test( macro , '-717897987691852588770249' , '1' , '0' ) ; test( macro , '717897987691852588770249' , '-1' , '0' ) ; test( macro , '-717897987691852588770249' , '-1' , '0' ) ; +test( macro , '717897987691852588770249' , '3' , '0' ) ; +test( macro , '-717897987691852588770249' , '3' , '0' ) ; +test( macro , '717897987691852588770249' , '-3' , '0' ) ; +test( macro , '-717897987691852588770249' , '-3' , '0' ) ; +test( macro , '717897987691852588770249' , '7' , '2' ) ; +test( macro , '-717897987691852588770249' , '7' , '5' ) ; +test( macro , '717897987691852588770249' , '-7' , '-5' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-2' ) ; +test( macro , '717897987691852588770249' , '9' , '0' ) ; +test( macro , '-717897987691852588770249' , '9' , '0' ) ; +test( macro , '717897987691852588770249' , '-9' , '0' ) ; +test( macro , '-717897987691852588770249' , '-9' , '0' ) ; +test( macro , '717897987691852588770249' , '11' , '1' ) ; +test( macro , '-717897987691852588770249' , '11' , '10' ) ; +test( macro , '717897987691852588770249' , '-11' , '-10' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-1' ) ; test( macro , '717897987691852588770249' , '17' , '9' ) ; test( macro , '-717897987691852588770249' , '17' , '8' ) ; test( macro , '717897987691852588770249' , '-17' , '-8' ) ; test( macro , '-717897987691852588770249' , '-17' , '-9' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '51258661506607' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '417440429124' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-417440429124' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-51258661506607' ) ; +test( macro , '717897987691852588770249' , '22' , '1' ) ; +test( macro , '-717897987691852588770249' , '22' , '21' ) ; +test( macro , '717897987691852588770249' , '-22' , '-21' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-1' ) ; +test( macro , '717897987691852588770249' , '24' , '9' ) ; +test( macro , '-717897987691852588770249' , '24' , '15' ) ; +test( macro , '717897987691852588770249' , '-24' , '-15' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-9' ) ; +test( macro , '717897987691852588770249' , '27' , '0' ) ; +test( macro , '-717897987691852588770249' , '27' , '0' ) ; +test( macro , '717897987691852588770249' , '-27' , '0' ) ; +test( macro , '-717897987691852588770249' , '-27' , '0' ) ; +test( macro , '717897987691852588770249' , '29' , '22' ) ; +test( macro , '-717897987691852588770249' , '29' , '7' ) ; +test( macro , '717897987691852588770249' , '-29' , '-7' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-22' ) ; +test( macro , '717897987691852588770249' , '1234' , '755' ) ; +test( macro , '-717897987691852588770249' , '1234' , '479' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-479' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-755' ) ; +test( macro , '717897987691852588770249' , '5678' , '3477' ) ; +test( macro , '-717897987691852588770249' , '5678' , '2201' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-2201' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-3477' ) ; test( macro , '717897987691852588770249' , '1073741824' , '278782921' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '794958903' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-794958903' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-278782921' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '417440429124' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-51258661506607' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '0' ) ; diff --git a/test/src/integer/arithmetic/modn.js b/test/src/integer/arithmetic/modn.js new file mode 100644 index 0000000..5893679 --- /dev/null +++ b/test/src/integer/arithmetic/modn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , modn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = modn( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `modn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '0' ) ; +test( macro , '-1' , 1 , '0' ) ; +test( macro , '1' , -1 , '0' ) ; +test( macro , '-1' , -1 , '0' ) ; +test( macro , '1' , 3 , '1' ) ; +test( macro , '-1' , 3 , '2' ) ; +test( macro , '1' , -3 , '-2' ) ; +test( macro , '-1' , -3 , '-1' ) ; +test( macro , '1' , 7 , '1' ) ; +test( macro , '-1' , 7 , '6' ) ; +test( macro , '1' , -7 , '-6' ) ; +test( macro , '-1' , -7 , '-1' ) ; +test( macro , '1' , 9 , '1' ) ; +test( macro , '-1' , 9 , '8' ) ; +test( macro , '1' , -9 , '-8' ) ; +test( macro , '-1' , -9 , '-1' ) ; +test( macro , '1' , 11 , '1' ) ; +test( macro , '-1' , 11 , '10' ) ; +test( macro , '1' , -11 , '-10' ) ; +test( macro , '-1' , -11 , '-1' ) ; +test( macro , '1' , 17 , '1' ) ; +test( macro , '-1' , 17 , '16' ) ; +test( macro , '1' , -17 , '-16' ) ; +test( macro , '-1' , -17 , '-1' ) ; +test( macro , '1' , 22 , '1' ) ; +test( macro , '-1' , 22 , '21' ) ; +test( macro , '1' , -22 , '-21' ) ; +test( macro , '-1' , -22 , '-1' ) ; +test( macro , '1' , 24 , '1' ) ; +test( macro , '-1' , 24 , '23' ) ; +test( macro , '1' , -24 , '-23' ) ; +test( macro , '-1' , -24 , '-1' ) ; +test( macro , '1' , 27 , '1' ) ; +test( macro , '-1' , 27 , '26' ) ; +test( macro , '1' , -27 , '-26' ) ; +test( macro , '-1' , -27 , '-1' ) ; +test( macro , '1' , 29 , '1' ) ; +test( macro , '-1' , 29 , '28' ) ; +test( macro , '1' , -29 , '-28' ) ; +test( macro , '-1' , -29 , '-1' ) ; +test( macro , '1' , 1234 , '1' ) ; +test( macro , '-1' , 1234 , '1233' ) ; +test( macro , '1' , -1234 , '-1233' ) ; +test( macro , '-1' , -1234 , '-1' ) ; +test( macro , '1' , 5678 , '1' ) ; +test( macro , '-1' , 5678 , '5677' ) ; +test( macro , '1' , -5678 , '-5677' ) ; +test( macro , '-1' , -5678 , '-1' ) ; +test( macro , '1' , 1073741824 , '1' ) ; +test( macro , '-1' , 1073741824 , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '-1' ) ; +test( macro , '1' , 51676101935731 , '1' ) ; +test( macro , '-1' , 51676101935731 , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '-1' ) ; +test( macro , '3' , 1 , '0' ) ; +test( macro , '-3' , 1 , '0' ) ; +test( macro , '3' , -1 , '0' ) ; +test( macro , '-3' , -1 , '0' ) ; +test( macro , '3' , 3 , '0' ) ; +test( macro , '-3' , 3 , '0' ) ; +test( macro , '3' , -3 , '0' ) ; +test( macro , '-3' , -3 , '0' ) ; +test( macro , '3' , 7 , '3' ) ; +test( macro , '-3' , 7 , '4' ) ; +test( macro , '3' , -7 , '-4' ) ; +test( macro , '-3' , -7 , '-3' ) ; +test( macro , '3' , 9 , '3' ) ; +test( macro , '-3' , 9 , '6' ) ; +test( macro , '3' , -9 , '-6' ) ; +test( macro , '-3' , -9 , '-3' ) ; +test( macro , '3' , 11 , '3' ) ; +test( macro , '-3' , 11 , '8' ) ; +test( macro , '3' , -11 , '-8' ) ; +test( macro , '-3' , -11 , '-3' ) ; +test( macro , '3' , 17 , '3' ) ; +test( macro , '-3' , 17 , '14' ) ; +test( macro , '3' , -17 , '-14' ) ; +test( macro , '-3' , -17 , '-3' ) ; +test( macro , '3' , 22 , '3' ) ; +test( macro , '-3' , 22 , '19' ) ; +test( macro , '3' , -22 , '-19' ) ; +test( macro , '-3' , -22 , '-3' ) ; +test( macro , '3' , 24 , '3' ) ; +test( macro , '-3' , 24 , '21' ) ; +test( macro , '3' , -24 , '-21' ) ; +test( macro , '-3' , -24 , '-3' ) ; +test( macro , '3' , 27 , '3' ) ; +test( macro , '-3' , 27 , '24' ) ; +test( macro , '3' , -27 , '-24' ) ; +test( macro , '-3' , -27 , '-3' ) ; +test( macro , '3' , 29 , '3' ) ; +test( macro , '-3' , 29 , '26' ) ; +test( macro , '3' , -29 , '-26' ) ; +test( macro , '-3' , -29 , '-3' ) ; +test( macro , '3' , 1234 , '3' ) ; +test( macro , '-3' , 1234 , '1231' ) ; +test( macro , '3' , -1234 , '-1231' ) ; +test( macro , '-3' , -1234 , '-3' ) ; +test( macro , '3' , 5678 , '3' ) ; +test( macro , '-3' , 5678 , '5675' ) ; +test( macro , '3' , -5678 , '-5675' ) ; +test( macro , '-3' , -5678 , '-3' ) ; +test( macro , '3' , 1073741824 , '3' ) ; +test( macro , '-3' , 1073741824 , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '-3' ) ; +test( macro , '3' , 51676101935731 , '3' ) ; +test( macro , '-3' , 51676101935731 , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '-3' ) ; +test( macro , '7' , 1 , '0' ) ; +test( macro , '-7' , 1 , '0' ) ; +test( macro , '7' , -1 , '0' ) ; +test( macro , '-7' , -1 , '0' ) ; +test( macro , '7' , 3 , '1' ) ; +test( macro , '-7' , 3 , '2' ) ; +test( macro , '7' , -3 , '-2' ) ; +test( macro , '-7' , -3 , '-1' ) ; +test( macro , '7' , 7 , '0' ) ; +test( macro , '-7' , 7 , '0' ) ; +test( macro , '7' , -7 , '0' ) ; +test( macro , '-7' , -7 , '0' ) ; +test( macro , '7' , 9 , '7' ) ; +test( macro , '-7' , 9 , '2' ) ; +test( macro , '7' , -9 , '-2' ) ; +test( macro , '-7' , -9 , '-7' ) ; +test( macro , '7' , 11 , '7' ) ; +test( macro , '-7' , 11 , '4' ) ; +test( macro , '7' , -11 , '-4' ) ; +test( macro , '-7' , -11 , '-7' ) ; +test( macro , '7' , 17 , '7' ) ; +test( macro , '-7' , 17 , '10' ) ; +test( macro , '7' , -17 , '-10' ) ; +test( macro , '-7' , -17 , '-7' ) ; +test( macro , '7' , 22 , '7' ) ; +test( macro , '-7' , 22 , '15' ) ; +test( macro , '7' , -22 , '-15' ) ; +test( macro , '-7' , -22 , '-7' ) ; +test( macro , '7' , 24 , '7' ) ; +test( macro , '-7' , 24 , '17' ) ; +test( macro , '7' , -24 , '-17' ) ; +test( macro , '-7' , -24 , '-7' ) ; +test( macro , '7' , 27 , '7' ) ; +test( macro , '-7' , 27 , '20' ) ; +test( macro , '7' , -27 , '-20' ) ; +test( macro , '-7' , -27 , '-7' ) ; +test( macro , '7' , 29 , '7' ) ; +test( macro , '-7' , 29 , '22' ) ; +test( macro , '7' , -29 , '-22' ) ; +test( macro , '-7' , -29 , '-7' ) ; +test( macro , '7' , 1234 , '7' ) ; +test( macro , '-7' , 1234 , '1227' ) ; +test( macro , '7' , -1234 , '-1227' ) ; +test( macro , '-7' , -1234 , '-7' ) ; +test( macro , '7' , 5678 , '7' ) ; +test( macro , '-7' , 5678 , '5671' ) ; +test( macro , '7' , -5678 , '-5671' ) ; +test( macro , '-7' , -5678 , '-7' ) ; +test( macro , '7' , 1073741824 , '7' ) ; +test( macro , '-7' , 1073741824 , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '-7' ) ; +test( macro , '7' , 51676101935731 , '7' ) ; +test( macro , '-7' , 51676101935731 , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '-7' ) ; +test( macro , '9' , 1 , '0' ) ; +test( macro , '-9' , 1 , '0' ) ; +test( macro , '9' , -1 , '0' ) ; +test( macro , '-9' , -1 , '0' ) ; +test( macro , '9' , 3 , '0' ) ; +test( macro , '-9' , 3 , '0' ) ; +test( macro , '9' , -3 , '0' ) ; +test( macro , '-9' , -3 , '0' ) ; +test( macro , '9' , 7 , '2' ) ; +test( macro , '-9' , 7 , '5' ) ; +test( macro , '9' , -7 , '-5' ) ; +test( macro , '-9' , -7 , '-2' ) ; +test( macro , '9' , 9 , '0' ) ; +test( macro , '-9' , 9 , '0' ) ; +test( macro , '9' , -9 , '0' ) ; +test( macro , '-9' , -9 , '0' ) ; +test( macro , '9' , 11 , '9' ) ; +test( macro , '-9' , 11 , '2' ) ; +test( macro , '9' , -11 , '-2' ) ; +test( macro , '-9' , -11 , '-9' ) ; +test( macro , '9' , 17 , '9' ) ; +test( macro , '-9' , 17 , '8' ) ; +test( macro , '9' , -17 , '-8' ) ; +test( macro , '-9' , -17 , '-9' ) ; +test( macro , '9' , 22 , '9' ) ; +test( macro , '-9' , 22 , '13' ) ; +test( macro , '9' , -22 , '-13' ) ; +test( macro , '-9' , -22 , '-9' ) ; +test( macro , '9' , 24 , '9' ) ; +test( macro , '-9' , 24 , '15' ) ; +test( macro , '9' , -24 , '-15' ) ; +test( macro , '-9' , -24 , '-9' ) ; +test( macro , '9' , 27 , '9' ) ; +test( macro , '-9' , 27 , '18' ) ; +test( macro , '9' , -27 , '-18' ) ; +test( macro , '-9' , -27 , '-9' ) ; +test( macro , '9' , 29 , '9' ) ; +test( macro , '-9' , 29 , '20' ) ; +test( macro , '9' , -29 , '-20' ) ; +test( macro , '-9' , -29 , '-9' ) ; +test( macro , '9' , 1234 , '9' ) ; +test( macro , '-9' , 1234 , '1225' ) ; +test( macro , '9' , -1234 , '-1225' ) ; +test( macro , '-9' , -1234 , '-9' ) ; +test( macro , '9' , 5678 , '9' ) ; +test( macro , '-9' , 5678 , '5669' ) ; +test( macro , '9' , -5678 , '-5669' ) ; +test( macro , '-9' , -5678 , '-9' ) ; +test( macro , '9' , 1073741824 , '9' ) ; +test( macro , '-9' , 1073741824 , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '-9' ) ; +test( macro , '9' , 51676101935731 , '9' ) ; +test( macro , '-9' , 51676101935731 , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '-9' ) ; +test( macro , '11' , 1 , '0' ) ; +test( macro , '-11' , 1 , '0' ) ; +test( macro , '11' , -1 , '0' ) ; +test( macro , '-11' , -1 , '0' ) ; +test( macro , '11' , 3 , '2' ) ; +test( macro , '-11' , 3 , '1' ) ; +test( macro , '11' , -3 , '-1' ) ; +test( macro , '-11' , -3 , '-2' ) ; +test( macro , '11' , 7 , '4' ) ; +test( macro , '-11' , 7 , '3' ) ; +test( macro , '11' , -7 , '-3' ) ; +test( macro , '-11' , -7 , '-4' ) ; +test( macro , '11' , 9 , '2' ) ; +test( macro , '-11' , 9 , '7' ) ; +test( macro , '11' , -9 , '-7' ) ; +test( macro , '-11' , -9 , '-2' ) ; +test( macro , '11' , 11 , '0' ) ; +test( macro , '-11' , 11 , '0' ) ; +test( macro , '11' , -11 , '0' ) ; +test( macro , '-11' , -11 , '0' ) ; +test( macro , '11' , 17 , '11' ) ; +test( macro , '-11' , 17 , '6' ) ; +test( macro , '11' , -17 , '-6' ) ; +test( macro , '-11' , -17 , '-11' ) ; +test( macro , '11' , 22 , '11' ) ; +test( macro , '-11' , 22 , '11' ) ; +test( macro , '11' , -22 , '-11' ) ; +test( macro , '-11' , -22 , '-11' ) ; +test( macro , '11' , 24 , '11' ) ; +test( macro , '-11' , 24 , '13' ) ; +test( macro , '11' , -24 , '-13' ) ; +test( macro , '-11' , -24 , '-11' ) ; +test( macro , '11' , 27 , '11' ) ; +test( macro , '-11' , 27 , '16' ) ; +test( macro , '11' , -27 , '-16' ) ; +test( macro , '-11' , -27 , '-11' ) ; +test( macro , '11' , 29 , '11' ) ; +test( macro , '-11' , 29 , '18' ) ; +test( macro , '11' , -29 , '-18' ) ; +test( macro , '-11' , -29 , '-11' ) ; +test( macro , '11' , 1234 , '11' ) ; +test( macro , '-11' , 1234 , '1223' ) ; +test( macro , '11' , -1234 , '-1223' ) ; +test( macro , '-11' , -1234 , '-11' ) ; +test( macro , '11' , 5678 , '11' ) ; +test( macro , '-11' , 5678 , '5667' ) ; +test( macro , '11' , -5678 , '-5667' ) ; +test( macro , '-11' , -5678 , '-11' ) ; +test( macro , '11' , 1073741824 , '11' ) ; +test( macro , '-11' , 1073741824 , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '-11' ) ; +test( macro , '11' , 51676101935731 , '11' ) ; +test( macro , '-11' , 51676101935731 , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '-11' ) ; +test( macro , '17' , 1 , '0' ) ; +test( macro , '-17' , 1 , '0' ) ; +test( macro , '17' , -1 , '0' ) ; +test( macro , '-17' , -1 , '0' ) ; +test( macro , '17' , 3 , '2' ) ; +test( macro , '-17' , 3 , '1' ) ; +test( macro , '17' , -3 , '-1' ) ; +test( macro , '-17' , -3 , '-2' ) ; +test( macro , '17' , 7 , '3' ) ; +test( macro , '-17' , 7 , '4' ) ; +test( macro , '17' , -7 , '-4' ) ; +test( macro , '-17' , -7 , '-3' ) ; +test( macro , '17' , 9 , '8' ) ; +test( macro , '-17' , 9 , '1' ) ; +test( macro , '17' , -9 , '-1' ) ; +test( macro , '-17' , -9 , '-8' ) ; +test( macro , '17' , 11 , '6' ) ; +test( macro , '-17' , 11 , '5' ) ; +test( macro , '17' , -11 , '-5' ) ; +test( macro , '-17' , -11 , '-6' ) ; +test( macro , '17' , 17 , '0' ) ; +test( macro , '-17' , 17 , '0' ) ; +test( macro , '17' , -17 , '0' ) ; +test( macro , '-17' , -17 , '0' ) ; +test( macro , '17' , 22 , '17' ) ; +test( macro , '-17' , 22 , '5' ) ; +test( macro , '17' , -22 , '-5' ) ; +test( macro , '-17' , -22 , '-17' ) ; +test( macro , '17' , 24 , '17' ) ; +test( macro , '-17' , 24 , '7' ) ; +test( macro , '17' , -24 , '-7' ) ; +test( macro , '-17' , -24 , '-17' ) ; +test( macro , '17' , 27 , '17' ) ; +test( macro , '-17' , 27 , '10' ) ; +test( macro , '17' , -27 , '-10' ) ; +test( macro , '-17' , -27 , '-17' ) ; +test( macro , '17' , 29 , '17' ) ; +test( macro , '-17' , 29 , '12' ) ; +test( macro , '17' , -29 , '-12' ) ; +test( macro , '-17' , -29 , '-17' ) ; +test( macro , '17' , 1234 , '17' ) ; +test( macro , '-17' , 1234 , '1217' ) ; +test( macro , '17' , -1234 , '-1217' ) ; +test( macro , '-17' , -1234 , '-17' ) ; +test( macro , '17' , 5678 , '17' ) ; +test( macro , '-17' , 5678 , '5661' ) ; +test( macro , '17' , -5678 , '-5661' ) ; +test( macro , '-17' , -5678 , '-17' ) ; +test( macro , '17' , 1073741824 , '17' ) ; +test( macro , '-17' , 1073741824 , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '-17' ) ; +test( macro , '17' , 51676101935731 , '17' ) ; +test( macro , '-17' , 51676101935731 , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '-17' ) ; +test( macro , '22' , 1 , '0' ) ; +test( macro , '-22' , 1 , '0' ) ; +test( macro , '22' , -1 , '0' ) ; +test( macro , '-22' , -1 , '0' ) ; +test( macro , '22' , 3 , '1' ) ; +test( macro , '-22' , 3 , '2' ) ; +test( macro , '22' , -3 , '-2' ) ; +test( macro , '-22' , -3 , '-1' ) ; +test( macro , '22' , 7 , '1' ) ; +test( macro , '-22' , 7 , '6' ) ; +test( macro , '22' , -7 , '-6' ) ; +test( macro , '-22' , -7 , '-1' ) ; +test( macro , '22' , 9 , '4' ) ; +test( macro , '-22' , 9 , '5' ) ; +test( macro , '22' , -9 , '-5' ) ; +test( macro , '-22' , -9 , '-4' ) ; +test( macro , '22' , 11 , '0' ) ; +test( macro , '-22' , 11 , '0' ) ; +test( macro , '22' , -11 , '0' ) ; +test( macro , '-22' , -11 , '0' ) ; +test( macro , '22' , 17 , '5' ) ; +test( macro , '-22' , 17 , '12' ) ; +test( macro , '22' , -17 , '-12' ) ; +test( macro , '-22' , -17 , '-5' ) ; +test( macro , '22' , 22 , '0' ) ; +test( macro , '-22' , 22 , '0' ) ; +test( macro , '22' , -22 , '0' ) ; +test( macro , '-22' , -22 , '0' ) ; +test( macro , '22' , 24 , '22' ) ; +test( macro , '-22' , 24 , '2' ) ; +test( macro , '22' , -24 , '-2' ) ; +test( macro , '-22' , -24 , '-22' ) ; +test( macro , '22' , 27 , '22' ) ; +test( macro , '-22' , 27 , '5' ) ; +test( macro , '22' , -27 , '-5' ) ; +test( macro , '-22' , -27 , '-22' ) ; +test( macro , '22' , 29 , '22' ) ; +test( macro , '-22' , 29 , '7' ) ; +test( macro , '22' , -29 , '-7' ) ; +test( macro , '-22' , -29 , '-22' ) ; +test( macro , '22' , 1234 , '22' ) ; +test( macro , '-22' , 1234 , '1212' ) ; +test( macro , '22' , -1234 , '-1212' ) ; +test( macro , '-22' , -1234 , '-22' ) ; +test( macro , '22' , 5678 , '22' ) ; +test( macro , '-22' , 5678 , '5656' ) ; +test( macro , '22' , -5678 , '-5656' ) ; +test( macro , '-22' , -5678 , '-22' ) ; +test( macro , '22' , 1073741824 , '22' ) ; +test( macro , '-22' , 1073741824 , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '-22' ) ; +test( macro , '22' , 51676101935731 , '22' ) ; +test( macro , '-22' , 51676101935731 , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '-22' ) ; +test( macro , '24' , 1 , '0' ) ; +test( macro , '-24' , 1 , '0' ) ; +test( macro , '24' , -1 , '0' ) ; +test( macro , '-24' , -1 , '0' ) ; +test( macro , '24' , 3 , '0' ) ; +test( macro , '-24' , 3 , '0' ) ; +test( macro , '24' , -3 , '0' ) ; +test( macro , '-24' , -3 , '0' ) ; +test( macro , '24' , 7 , '3' ) ; +test( macro , '-24' , 7 , '4' ) ; +test( macro , '24' , -7 , '-4' ) ; +test( macro , '-24' , -7 , '-3' ) ; +test( macro , '24' , 9 , '6' ) ; +test( macro , '-24' , 9 , '3' ) ; +test( macro , '24' , -9 , '-3' ) ; +test( macro , '-24' , -9 , '-6' ) ; +test( macro , '24' , 11 , '2' ) ; +test( macro , '-24' , 11 , '9' ) ; +test( macro , '24' , -11 , '-9' ) ; +test( macro , '-24' , -11 , '-2' ) ; +test( macro , '24' , 17 , '7' ) ; +test( macro , '-24' , 17 , '10' ) ; +test( macro , '24' , -17 , '-10' ) ; +test( macro , '-24' , -17 , '-7' ) ; +test( macro , '24' , 22 , '2' ) ; +test( macro , '-24' , 22 , '20' ) ; +test( macro , '24' , -22 , '-20' ) ; +test( macro , '-24' , -22 , '-2' ) ; +test( macro , '24' , 24 , '0' ) ; +test( macro , '-24' , 24 , '0' ) ; +test( macro , '24' , -24 , '0' ) ; +test( macro , '-24' , -24 , '0' ) ; +test( macro , '24' , 27 , '24' ) ; +test( macro , '-24' , 27 , '3' ) ; +test( macro , '24' , -27 , '-3' ) ; +test( macro , '-24' , -27 , '-24' ) ; +test( macro , '24' , 29 , '24' ) ; +test( macro , '-24' , 29 , '5' ) ; +test( macro , '24' , -29 , '-5' ) ; +test( macro , '-24' , -29 , '-24' ) ; +test( macro , '24' , 1234 , '24' ) ; +test( macro , '-24' , 1234 , '1210' ) ; +test( macro , '24' , -1234 , '-1210' ) ; +test( macro , '-24' , -1234 , '-24' ) ; +test( macro , '24' , 5678 , '24' ) ; +test( macro , '-24' , 5678 , '5654' ) ; +test( macro , '24' , -5678 , '-5654' ) ; +test( macro , '-24' , -5678 , '-24' ) ; +test( macro , '24' , 1073741824 , '24' ) ; +test( macro , '-24' , 1073741824 , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '-24' ) ; +test( macro , '24' , 51676101935731 , '24' ) ; +test( macro , '-24' , 51676101935731 , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '-24' ) ; +test( macro , '27' , 1 , '0' ) ; +test( macro , '-27' , 1 , '0' ) ; +test( macro , '27' , -1 , '0' ) ; +test( macro , '-27' , -1 , '0' ) ; +test( macro , '27' , 3 , '0' ) ; +test( macro , '-27' , 3 , '0' ) ; +test( macro , '27' , -3 , '0' ) ; +test( macro , '-27' , -3 , '0' ) ; +test( macro , '27' , 7 , '6' ) ; +test( macro , '-27' , 7 , '1' ) ; +test( macro , '27' , -7 , '-1' ) ; +test( macro , '-27' , -7 , '-6' ) ; +test( macro , '27' , 9 , '0' ) ; +test( macro , '-27' , 9 , '0' ) ; +test( macro , '27' , -9 , '0' ) ; +test( macro , '-27' , -9 , '0' ) ; +test( macro , '27' , 11 , '5' ) ; +test( macro , '-27' , 11 , '6' ) ; +test( macro , '27' , -11 , '-6' ) ; +test( macro , '-27' , -11 , '-5' ) ; +test( macro , '27' , 17 , '10' ) ; +test( macro , '-27' , 17 , '7' ) ; +test( macro , '27' , -17 , '-7' ) ; +test( macro , '-27' , -17 , '-10' ) ; +test( macro , '27' , 22 , '5' ) ; +test( macro , '-27' , 22 , '17' ) ; +test( macro , '27' , -22 , '-17' ) ; +test( macro , '-27' , -22 , '-5' ) ; +test( macro , '27' , 24 , '3' ) ; +test( macro , '-27' , 24 , '21' ) ; +test( macro , '27' , -24 , '-21' ) ; +test( macro , '-27' , -24 , '-3' ) ; +test( macro , '27' , 27 , '0' ) ; +test( macro , '-27' , 27 , '0' ) ; +test( macro , '27' , -27 , '0' ) ; +test( macro , '-27' , -27 , '0' ) ; +test( macro , '27' , 29 , '27' ) ; +test( macro , '-27' , 29 , '2' ) ; +test( macro , '27' , -29 , '-2' ) ; +test( macro , '-27' , -29 , '-27' ) ; +test( macro , '27' , 1234 , '27' ) ; +test( macro , '-27' , 1234 , '1207' ) ; +test( macro , '27' , -1234 , '-1207' ) ; +test( macro , '-27' , -1234 , '-27' ) ; +test( macro , '27' , 5678 , '27' ) ; +test( macro , '-27' , 5678 , '5651' ) ; +test( macro , '27' , -5678 , '-5651' ) ; +test( macro , '-27' , -5678 , '-27' ) ; +test( macro , '27' , 1073741824 , '27' ) ; +test( macro , '-27' , 1073741824 , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '-27' ) ; +test( macro , '27' , 51676101935731 , '27' ) ; +test( macro , '-27' , 51676101935731 , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '-27' ) ; +test( macro , '29' , 1 , '0' ) ; +test( macro , '-29' , 1 , '0' ) ; +test( macro , '29' , -1 , '0' ) ; +test( macro , '-29' , -1 , '0' ) ; +test( macro , '29' , 3 , '2' ) ; +test( macro , '-29' , 3 , '1' ) ; +test( macro , '29' , -3 , '-1' ) ; +test( macro , '-29' , -3 , '-2' ) ; +test( macro , '29' , 7 , '1' ) ; +test( macro , '-29' , 7 , '6' ) ; +test( macro , '29' , -7 , '-6' ) ; +test( macro , '-29' , -7 , '-1' ) ; +test( macro , '29' , 9 , '2' ) ; +test( macro , '-29' , 9 , '7' ) ; +test( macro , '29' , -9 , '-7' ) ; +test( macro , '-29' , -9 , '-2' ) ; +test( macro , '29' , 11 , '7' ) ; +test( macro , '-29' , 11 , '4' ) ; +test( macro , '29' , -11 , '-4' ) ; +test( macro , '-29' , -11 , '-7' ) ; +test( macro , '29' , 17 , '12' ) ; +test( macro , '-29' , 17 , '5' ) ; +test( macro , '29' , -17 , '-5' ) ; +test( macro , '-29' , -17 , '-12' ) ; +test( macro , '29' , 22 , '7' ) ; +test( macro , '-29' , 22 , '15' ) ; +test( macro , '29' , -22 , '-15' ) ; +test( macro , '-29' , -22 , '-7' ) ; +test( macro , '29' , 24 , '5' ) ; +test( macro , '-29' , 24 , '19' ) ; +test( macro , '29' , -24 , '-19' ) ; +test( macro , '-29' , -24 , '-5' ) ; +test( macro , '29' , 27 , '2' ) ; +test( macro , '-29' , 27 , '25' ) ; +test( macro , '29' , -27 , '-25' ) ; +test( macro , '-29' , -27 , '-2' ) ; +test( macro , '29' , 29 , '0' ) ; +test( macro , '-29' , 29 , '0' ) ; +test( macro , '29' , -29 , '0' ) ; +test( macro , '-29' , -29 , '0' ) ; +test( macro , '29' , 1234 , '29' ) ; +test( macro , '-29' , 1234 , '1205' ) ; +test( macro , '29' , -1234 , '-1205' ) ; +test( macro , '-29' , -1234 , '-29' ) ; +test( macro , '29' , 5678 , '29' ) ; +test( macro , '-29' , 5678 , '5649' ) ; +test( macro , '29' , -5678 , '-5649' ) ; +test( macro , '-29' , -5678 , '-29' ) ; +test( macro , '29' , 1073741824 , '29' ) ; +test( macro , '-29' , 1073741824 , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '-29' ) ; +test( macro , '29' , 51676101935731 , '29' ) ; +test( macro , '-29' , 51676101935731 , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '-29' ) ; +test( macro , '1234' , 1 , '0' ) ; +test( macro , '-1234' , 1 , '0' ) ; +test( macro , '1234' , -1 , '0' ) ; +test( macro , '-1234' , -1 , '0' ) ; +test( macro , '1234' , 3 , '1' ) ; +test( macro , '-1234' , 3 , '2' ) ; +test( macro , '1234' , -3 , '-2' ) ; +test( macro , '-1234' , -3 , '-1' ) ; +test( macro , '1234' , 7 , '2' ) ; +test( macro , '-1234' , 7 , '5' ) ; +test( macro , '1234' , -7 , '-5' ) ; +test( macro , '-1234' , -7 , '-2' ) ; +test( macro , '1234' , 9 , '1' ) ; +test( macro , '-1234' , 9 , '8' ) ; +test( macro , '1234' , -9 , '-8' ) ; +test( macro , '-1234' , -9 , '-1' ) ; +test( macro , '1234' , 11 , '2' ) ; +test( macro , '-1234' , 11 , '9' ) ; +test( macro , '1234' , -11 , '-9' ) ; +test( macro , '-1234' , -11 , '-2' ) ; +test( macro , '1234' , 17 , '10' ) ; +test( macro , '-1234' , 17 , '7' ) ; +test( macro , '1234' , -17 , '-7' ) ; +test( macro , '-1234' , -17 , '-10' ) ; +test( macro , '1234' , 22 , '2' ) ; +test( macro , '-1234' , 22 , '20' ) ; +test( macro , '1234' , -22 , '-20' ) ; +test( macro , '-1234' , -22 , '-2' ) ; +test( macro , '1234' , 24 , '10' ) ; +test( macro , '-1234' , 24 , '14' ) ; +test( macro , '1234' , -24 , '-14' ) ; +test( macro , '-1234' , -24 , '-10' ) ; +test( macro , '1234' , 27 , '19' ) ; +test( macro , '-1234' , 27 , '8' ) ; +test( macro , '1234' , -27 , '-8' ) ; +test( macro , '-1234' , -27 , '-19' ) ; +test( macro , '1234' , 29 , '16' ) ; +test( macro , '-1234' , 29 , '13' ) ; +test( macro , '1234' , -29 , '-13' ) ; +test( macro , '-1234' , -29 , '-16' ) ; +test( macro , '1234' , 1234 , '0' ) ; +test( macro , '-1234' , 1234 , '0' ) ; +test( macro , '1234' , -1234 , '0' ) ; +test( macro , '-1234' , -1234 , '0' ) ; +test( macro , '1234' , 5678 , '1234' ) ; +test( macro , '-1234' , 5678 , '4444' ) ; +test( macro , '1234' , -5678 , '-4444' ) ; +test( macro , '-1234' , -5678 , '-1234' ) ; +test( macro , '1234' , 1073741824 , '1234' ) ; +test( macro , '-1234' , 1073741824 , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '-1234' ) ; +test( macro , '1234' , 51676101935731 , '1234' ) ; +test( macro , '-1234' , 51676101935731 , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '-1234' ) ; +test( macro , '5678' , 1 , '0' ) ; +test( macro , '-5678' , 1 , '0' ) ; +test( macro , '5678' , -1 , '0' ) ; +test( macro , '-5678' , -1 , '0' ) ; +test( macro , '5678' , 3 , '2' ) ; +test( macro , '-5678' , 3 , '1' ) ; +test( macro , '5678' , -3 , '-1' ) ; +test( macro , '-5678' , -3 , '-2' ) ; +test( macro , '5678' , 7 , '1' ) ; +test( macro , '-5678' , 7 , '6' ) ; +test( macro , '5678' , -7 , '-6' ) ; +test( macro , '-5678' , -7 , '-1' ) ; +test( macro , '5678' , 9 , '8' ) ; +test( macro , '-5678' , 9 , '1' ) ; +test( macro , '5678' , -9 , '-1' ) ; +test( macro , '-5678' , -9 , '-8' ) ; +test( macro , '5678' , 11 , '2' ) ; +test( macro , '-5678' , 11 , '9' ) ; +test( macro , '5678' , -11 , '-9' ) ; +test( macro , '-5678' , -11 , '-2' ) ; +test( macro , '5678' , 17 , '0' ) ; +test( macro , '-5678' , 17 , '0' ) ; +test( macro , '5678' , -17 , '0' ) ; +test( macro , '-5678' , -17 , '0' ) ; +test( macro , '5678' , 22 , '2' ) ; +test( macro , '-5678' , 22 , '20' ) ; +test( macro , '5678' , -22 , '-20' ) ; +test( macro , '-5678' , -22 , '-2' ) ; +test( macro , '5678' , 24 , '14' ) ; +test( macro , '-5678' , 24 , '10' ) ; +test( macro , '5678' , -24 , '-10' ) ; +test( macro , '-5678' , -24 , '-14' ) ; +test( macro , '5678' , 27 , '8' ) ; +test( macro , '-5678' , 27 , '19' ) ; +test( macro , '5678' , -27 , '-19' ) ; +test( macro , '-5678' , -27 , '-8' ) ; +test( macro , '5678' , 29 , '23' ) ; +test( macro , '-5678' , 29 , '6' ) ; +test( macro , '5678' , -29 , '-6' ) ; +test( macro , '-5678' , -29 , '-23' ) ; +test( macro , '5678' , 1234 , '742' ) ; +test( macro , '-5678' , 1234 , '492' ) ; +test( macro , '5678' , -1234 , '-492' ) ; +test( macro , '-5678' , -1234 , '-742' ) ; +test( macro , '5678' , 5678 , '0' ) ; +test( macro , '-5678' , 5678 , '0' ) ; +test( macro , '5678' , -5678 , '0' ) ; +test( macro , '-5678' , -5678 , '0' ) ; +test( macro , '5678' , 1073741824 , '5678' ) ; +test( macro , '-5678' , 1073741824 , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '-5678' ) ; +test( macro , '5678' , 51676101935731 , '5678' ) ; +test( macro , '-5678' , 51676101935731 , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '-5678' ) ; +test( macro , '1073741824' , 1 , '0' ) ; +test( macro , '-1073741824' , 1 , '0' ) ; +test( macro , '1073741824' , -1 , '0' ) ; +test( macro , '-1073741824' , -1 , '0' ) ; +test( macro , '1073741824' , 3 , '1' ) ; +test( macro , '-1073741824' , 3 , '2' ) ; +test( macro , '1073741824' , -3 , '-2' ) ; +test( macro , '-1073741824' , -3 , '-1' ) ; +test( macro , '1073741824' , 7 , '1' ) ; +test( macro , '-1073741824' , 7 , '6' ) ; +test( macro , '1073741824' , -7 , '-6' ) ; +test( macro , '-1073741824' , -7 , '-1' ) ; +test( macro , '1073741824' , 9 , '1' ) ; +test( macro , '-1073741824' , 9 , '8' ) ; +test( macro , '1073741824' , -9 , '-8' ) ; +test( macro , '-1073741824' , -9 , '-1' ) ; +test( macro , '1073741824' , 11 , '1' ) ; +test( macro , '-1073741824' , 11 , '10' ) ; +test( macro , '1073741824' , -11 , '-10' ) ; +test( macro , '-1073741824' , -11 , '-1' ) ; +test( macro , '1073741824' , 17 , '13' ) ; +test( macro , '-1073741824' , 17 , '4' ) ; +test( macro , '1073741824' , -17 , '-4' ) ; +test( macro , '-1073741824' , -17 , '-13' ) ; +test( macro , '1073741824' , 22 , '12' ) ; +test( macro , '-1073741824' , 22 , '10' ) ; +test( macro , '1073741824' , -22 , '-10' ) ; +test( macro , '-1073741824' , -22 , '-12' ) ; +test( macro , '1073741824' , 24 , '16' ) ; +test( macro , '-1073741824' , 24 , '8' ) ; +test( macro , '1073741824' , -24 , '-8' ) ; +test( macro , '-1073741824' , -24 , '-16' ) ; +test( macro , '1073741824' , 27 , '19' ) ; +test( macro , '-1073741824' , 27 , '8' ) ; +test( macro , '1073741824' , -27 , '-8' ) ; +test( macro , '-1073741824' , -27 , '-19' ) ; +test( macro , '1073741824' , 29 , '4' ) ; +test( macro , '-1073741824' , 29 , '25' ) ; +test( macro , '1073741824' , -29 , '-25' ) ; +test( macro , '-1073741824' , -29 , '-4' ) ; +test( macro , '1073741824' , 1234 , '170' ) ; +test( macro , '-1073741824' , 1234 , '1064' ) ; +test( macro , '1073741824' , -1234 , '-1064' ) ; +test( macro , '-1073741824' , -1234 , '-170' ) ; +test( macro , '1073741824' , 5678 , '3634' ) ; +test( macro , '-1073741824' , 5678 , '2044' ) ; +test( macro , '1073741824' , -5678 , '-2044' ) ; +test( macro , '-1073741824' , -5678 , '-3634' ) ; +test( macro , '1073741824' , 1073741824 , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '0' ) ; +test( macro , '1073741824' , -1073741824 , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '1073741824' ) ; +test( macro , '-1073741824' , 51676101935731 , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '-1073741824' ) ; +test( macro , '51676101935731' , 1 , '0' ) ; +test( macro , '-51676101935731' , 1 , '0' ) ; +test( macro , '51676101935731' , -1 , '0' ) ; +test( macro , '-51676101935731' , -1 , '0' ) ; +test( macro , '51676101935731' , 3 , '1' ) ; +test( macro , '-51676101935731' , 3 , '2' ) ; +test( macro , '51676101935731' , -3 , '-2' ) ; +test( macro , '-51676101935731' , -3 , '-1' ) ; +test( macro , '51676101935731' , 7 , '0' ) ; +test( macro , '-51676101935731' , 7 , '0' ) ; +test( macro , '51676101935731' , -7 , '0' ) ; +test( macro , '-51676101935731' , -7 , '0' ) ; +test( macro , '51676101935731' , 9 , '1' ) ; +test( macro , '-51676101935731' , 9 , '8' ) ; +test( macro , '51676101935731' , -9 , '-8' ) ; +test( macro , '-51676101935731' , -9 , '-1' ) ; +test( macro , '51676101935731' , 11 , '9' ) ; +test( macro , '-51676101935731' , 11 , '2' ) ; +test( macro , '51676101935731' , -11 , '-2' ) ; +test( macro , '-51676101935731' , -11 , '-9' ) ; +test( macro , '51676101935731' , 17 , '14' ) ; +test( macro , '-51676101935731' , 17 , '3' ) ; +test( macro , '51676101935731' , -17 , '-3' ) ; +test( macro , '-51676101935731' , -17 , '-14' ) ; +test( macro , '51676101935731' , 22 , '9' ) ; +test( macro , '-51676101935731' , 22 , '13' ) ; +test( macro , '51676101935731' , -22 , '-13' ) ; +test( macro , '-51676101935731' , -22 , '-9' ) ; +test( macro , '51676101935731' , 24 , '19' ) ; +test( macro , '-51676101935731' , 24 , '5' ) ; +test( macro , '51676101935731' , -24 , '-5' ) ; +test( macro , '-51676101935731' , -24 , '-19' ) ; +test( macro , '51676101935731' , 27 , '10' ) ; +test( macro , '-51676101935731' , 27 , '17' ) ; +test( macro , '51676101935731' , -27 , '-17' ) ; +test( macro , '-51676101935731' , -27 , '-10' ) ; +test( macro , '51676101935731' , 29 , '28' ) ; +test( macro , '-51676101935731' , 29 , '1' ) ; +test( macro , '51676101935731' , -29 , '-1' ) ; +test( macro , '-51676101935731' , -29 , '-28' ) ; +test( macro , '51676101935731' , 1234 , '835' ) ; +test( macro , '-51676101935731' , 1234 , '399' ) ; +test( macro , '51676101935731' , -1234 , '-399' ) ; +test( macro , '-51676101935731' , -1234 , '-835' ) ; +test( macro , '51676101935731' , 5678 , '3023' ) ; +test( macro , '-51676101935731' , 5678 , '2655' ) ; +test( macro , '51676101935731' , -5678 , '-2655' ) ; +test( macro , '-51676101935731' , -5678 , '-3023' ) ; +test( macro , '51676101935731' , 1073741824 , '129172083' ) ; +test( macro , '-51676101935731' , 1073741824 , '944569741' ) ; +test( macro , '51676101935731' , -1073741824 , '-944569741' ) ; +test( macro , '-51676101935731' , -1073741824 , '-129172083' ) ; +test( macro , '51676101935731' , 51676101935731 , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '0' ) ; +test( macro , '-717897987691852588770249' , 1 , '0' ) ; +test( macro , '717897987691852588770249' , -1 , '0' ) ; +test( macro , '-717897987691852588770249' , -1 , '0' ) ; +test( macro , '717897987691852588770249' , 3 , '0' ) ; +test( macro , '-717897987691852588770249' , 3 , '0' ) ; +test( macro , '717897987691852588770249' , -3 , '0' ) ; +test( macro , '-717897987691852588770249' , -3 , '0' ) ; +test( macro , '717897987691852588770249' , 7 , '2' ) ; +test( macro , '-717897987691852588770249' , 7 , '5' ) ; +test( macro , '717897987691852588770249' , -7 , '-5' ) ; +test( macro , '-717897987691852588770249' , -7 , '-2' ) ; +test( macro , '717897987691852588770249' , 9 , '0' ) ; +test( macro , '-717897987691852588770249' , 9 , '0' ) ; +test( macro , '717897987691852588770249' , -9 , '0' ) ; +test( macro , '-717897987691852588770249' , -9 , '0' ) ; +test( macro , '717897987691852588770249' , 11 , '1' ) ; +test( macro , '-717897987691852588770249' , 11 , '10' ) ; +test( macro , '717897987691852588770249' , -11 , '-10' ) ; +test( macro , '-717897987691852588770249' , -11 , '-1' ) ; +test( macro , '717897987691852588770249' , 17 , '9' ) ; +test( macro , '-717897987691852588770249' , 17 , '8' ) ; +test( macro , '717897987691852588770249' , -17 , '-8' ) ; +test( macro , '-717897987691852588770249' , -17 , '-9' ) ; +test( macro , '717897987691852588770249' , 22 , '1' ) ; +test( macro , '-717897987691852588770249' , 22 , '21' ) ; +test( macro , '717897987691852588770249' , -22 , '-21' ) ; +test( macro , '-717897987691852588770249' , -22 , '-1' ) ; +test( macro , '717897987691852588770249' , 24 , '9' ) ; +test( macro , '-717897987691852588770249' , 24 , '15' ) ; +test( macro , '717897987691852588770249' , -24 , '-15' ) ; +test( macro , '-717897987691852588770249' , -24 , '-9' ) ; +test( macro , '717897987691852588770249' , 27 , '0' ) ; +test( macro , '-717897987691852588770249' , 27 , '0' ) ; +test( macro , '717897987691852588770249' , -27 , '0' ) ; +test( macro , '-717897987691852588770249' , -27 , '0' ) ; +test( macro , '717897987691852588770249' , 29 , '22' ) ; +test( macro , '-717897987691852588770249' , 29 , '7' ) ; +test( macro , '717897987691852588770249' , -29 , '-7' ) ; +test( macro , '-717897987691852588770249' , -29 , '-22' ) ; +test( macro , '717897987691852588770249' , 1234 , '755' ) ; +test( macro , '-717897987691852588770249' , 1234 , '479' ) ; +test( macro , '717897987691852588770249' , -1234 , '-479' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-755' ) ; +test( macro , '717897987691852588770249' , 5678 , '3477' ) ; +test( macro , '-717897987691852588770249' , 5678 , '2201' ) ; +test( macro , '717897987691852588770249' , -5678 , '-2201' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-3477' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '278782921' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '794958903' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-794958903' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-278782921' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '417440429124' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-51258661506607' ) ; diff --git a/test/src/integer/arithmetic/mul.js b/test/src/integer/arithmetic/mul.js index 280ba4d..09bd454 100644 --- a/test/src/integer/arithmetic/mul.js +++ b/test/src/integer/arithmetic/mul.js @@ -10,114 +10,905 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -const s = x => x.length <= 30 ? x : x.slice(0,37) + '...' ; - -macro.title = ( _ , A , B , C ) => `mul(${s(A)},${s(B)}) = ${s(C)}` ; +macro.title = ( _ , A , B , C ) => `mul(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '1' ) ; test( macro , '-1' , '1' , '-1' ) ; test( macro , '1' , '-1' , '-1' ) ; test( macro , '-1' , '-1' , '1' ) ; +test( macro , '1' , '3' , '3' ) ; +test( macro , '-1' , '3' , '-3' ) ; +test( macro , '1' , '-3' , '-3' ) ; +test( macro , '-1' , '-3' , '3' ) ; +test( macro , '1' , '7' , '7' ) ; +test( macro , '-1' , '7' , '-7' ) ; +test( macro , '1' , '-7' , '-7' ) ; +test( macro , '-1' , '-7' , '7' ) ; +test( macro , '1' , '9' , '9' ) ; +test( macro , '-1' , '9' , '-9' ) ; +test( macro , '1' , '-9' , '-9' ) ; +test( macro , '-1' , '-9' , '9' ) ; +test( macro , '1' , '11' , '11' ) ; +test( macro , '-1' , '11' , '-11' ) ; +test( macro , '1' , '-11' , '-11' ) ; +test( macro , '-1' , '-11' , '11' ) ; test( macro , '1' , '17' , '17' ) ; test( macro , '-1' , '17' , '-17' ) ; test( macro , '1' , '-17' , '-17' ) ; test( macro , '-1' , '-17' , '17' ) ; -test( macro , '1' , '51676101935731' , '51676101935731' ) ; -test( macro , '-1' , '51676101935731' , '-51676101935731' ) ; -test( macro , '1' , '-51676101935731' , '-51676101935731' ) ; -test( macro , '-1' , '-51676101935731' , '51676101935731' ) ; +test( macro , '1' , '22' , '22' ) ; +test( macro , '-1' , '22' , '-22' ) ; +test( macro , '1' , '-22' , '-22' ) ; +test( macro , '-1' , '-22' , '22' ) ; +test( macro , '1' , '24' , '24' ) ; +test( macro , '-1' , '24' , '-24' ) ; +test( macro , '1' , '-24' , '-24' ) ; +test( macro , '-1' , '-24' , '24' ) ; +test( macro , '1' , '27' , '27' ) ; +test( macro , '-1' , '27' , '-27' ) ; +test( macro , '1' , '-27' , '-27' ) ; +test( macro , '-1' , '-27' , '27' ) ; +test( macro , '1' , '29' , '29' ) ; +test( macro , '-1' , '29' , '-29' ) ; +test( macro , '1' , '-29' , '-29' ) ; +test( macro , '-1' , '-29' , '29' ) ; +test( macro , '1' , '1234' , '1234' ) ; +test( macro , '-1' , '1234' , '-1234' ) ; +test( macro , '1' , '-1234' , '-1234' ) ; +test( macro , '-1' , '-1234' , '1234' ) ; +test( macro , '1' , '5678' , '5678' ) ; +test( macro , '-1' , '5678' , '-5678' ) ; +test( macro , '1' , '-5678' , '-5678' ) ; +test( macro , '-1' , '-5678' , '5678' ) ; test( macro , '1' , '1073741824' , '1073741824' ) ; test( macro , '-1' , '1073741824' , '-1073741824' ) ; test( macro , '1' , '-1073741824' , '-1073741824' ) ; test( macro , '-1' , '-1073741824' , '1073741824' ) ; +test( macro , '1' , '51676101935731' , '51676101935731' ) ; +test( macro , '-1' , '51676101935731' , '-51676101935731' ) ; +test( macro , '1' , '-51676101935731' , '-51676101935731' ) ; +test( macro , '-1' , '-51676101935731' , '51676101935731' ) ; test( macro , '1' , '717897987691852588770249' , '717897987691852588770249' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '1' , '-717897987691852588770249' , '-717897987691852588770249' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770249' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '-1' , '-3' ) ; +test( macro , '-3' , '-1' , '3' ) ; +test( macro , '3' , '3' , '9' ) ; +test( macro , '-3' , '3' , '-9' ) ; +test( macro , '3' , '-3' , '-9' ) ; +test( macro , '-3' , '-3' , '9' ) ; +test( macro , '3' , '7' , '21' ) ; +test( macro , '-3' , '7' , '-21' ) ; +test( macro , '3' , '-7' , '-21' ) ; +test( macro , '-3' , '-7' , '21' ) ; +test( macro , '3' , '9' , '27' ) ; +test( macro , '-3' , '9' , '-27' ) ; +test( macro , '3' , '-9' , '-27' ) ; +test( macro , '-3' , '-9' , '27' ) ; +test( macro , '3' , '11' , '33' ) ; +test( macro , '-3' , '11' , '-33' ) ; +test( macro , '3' , '-11' , '-33' ) ; +test( macro , '-3' , '-11' , '33' ) ; +test( macro , '3' , '17' , '51' ) ; +test( macro , '-3' , '17' , '-51' ) ; +test( macro , '3' , '-17' , '-51' ) ; +test( macro , '-3' , '-17' , '51' ) ; +test( macro , '3' , '22' , '66' ) ; +test( macro , '-3' , '22' , '-66' ) ; +test( macro , '3' , '-22' , '-66' ) ; +test( macro , '-3' , '-22' , '66' ) ; +test( macro , '3' , '24' , '72' ) ; +test( macro , '-3' , '24' , '-72' ) ; +test( macro , '3' , '-24' , '-72' ) ; +test( macro , '-3' , '-24' , '72' ) ; +test( macro , '3' , '27' , '81' ) ; +test( macro , '-3' , '27' , '-81' ) ; +test( macro , '3' , '-27' , '-81' ) ; +test( macro , '-3' , '-27' , '81' ) ; +test( macro , '3' , '29' , '87' ) ; +test( macro , '-3' , '29' , '-87' ) ; +test( macro , '3' , '-29' , '-87' ) ; +test( macro , '-3' , '-29' , '87' ) ; +test( macro , '3' , '1234' , '3702' ) ; +test( macro , '-3' , '1234' , '-3702' ) ; +test( macro , '3' , '-1234' , '-3702' ) ; +test( macro , '-3' , '-1234' , '3702' ) ; +test( macro , '3' , '5678' , '17034' ) ; +test( macro , '-3' , '5678' , '-17034' ) ; +test( macro , '3' , '-5678' , '-17034' ) ; +test( macro , '-3' , '-5678' , '17034' ) ; +test( macro , '3' , '1073741824' , '3221225472' ) ; +test( macro , '-3' , '1073741824' , '-3221225472' ) ; +test( macro , '3' , '-1073741824' , '-3221225472' ) ; +test( macro , '-3' , '-1073741824' , '3221225472' ) ; +test( macro , '3' , '51676101935731' , '155028305807193' ) ; +test( macro , '-3' , '51676101935731' , '-155028305807193' ) ; +test( macro , '3' , '-51676101935731' , '-155028305807193' ) ; +test( macro , '-3' , '-51676101935731' , '155028305807193' ) ; +test( macro , '3' , '717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '-3' , '717897987691852588770249' , '-2153693963075557766310747' ) ; +test( macro , '3' , '-717897987691852588770249' , '-2153693963075557766310747' ) ; +test( macro , '-3' , '-717897987691852588770249' , '2153693963075557766310747' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '-1' , '-7' ) ; +test( macro , '-7' , '-1' , '7' ) ; +test( macro , '7' , '3' , '21' ) ; +test( macro , '-7' , '3' , '-21' ) ; +test( macro , '7' , '-3' , '-21' ) ; +test( macro , '-7' , '-3' , '21' ) ; +test( macro , '7' , '7' , '49' ) ; +test( macro , '-7' , '7' , '-49' ) ; +test( macro , '7' , '-7' , '-49' ) ; +test( macro , '-7' , '-7' , '49' ) ; +test( macro , '7' , '9' , '63' ) ; +test( macro , '-7' , '9' , '-63' ) ; +test( macro , '7' , '-9' , '-63' ) ; +test( macro , '-7' , '-9' , '63' ) ; +test( macro , '7' , '11' , '77' ) ; +test( macro , '-7' , '11' , '-77' ) ; +test( macro , '7' , '-11' , '-77' ) ; +test( macro , '-7' , '-11' , '77' ) ; +test( macro , '7' , '17' , '119' ) ; +test( macro , '-7' , '17' , '-119' ) ; +test( macro , '7' , '-17' , '-119' ) ; +test( macro , '-7' , '-17' , '119' ) ; +test( macro , '7' , '22' , '154' ) ; +test( macro , '-7' , '22' , '-154' ) ; +test( macro , '7' , '-22' , '-154' ) ; +test( macro , '-7' , '-22' , '154' ) ; +test( macro , '7' , '24' , '168' ) ; +test( macro , '-7' , '24' , '-168' ) ; +test( macro , '7' , '-24' , '-168' ) ; +test( macro , '-7' , '-24' , '168' ) ; +test( macro , '7' , '27' , '189' ) ; +test( macro , '-7' , '27' , '-189' ) ; +test( macro , '7' , '-27' , '-189' ) ; +test( macro , '-7' , '-27' , '189' ) ; +test( macro , '7' , '29' , '203' ) ; +test( macro , '-7' , '29' , '-203' ) ; +test( macro , '7' , '-29' , '-203' ) ; +test( macro , '-7' , '-29' , '203' ) ; +test( macro , '7' , '1234' , '8638' ) ; +test( macro , '-7' , '1234' , '-8638' ) ; +test( macro , '7' , '-1234' , '-8638' ) ; +test( macro , '-7' , '-1234' , '8638' ) ; +test( macro , '7' , '5678' , '39746' ) ; +test( macro , '-7' , '5678' , '-39746' ) ; +test( macro , '7' , '-5678' , '-39746' ) ; +test( macro , '-7' , '-5678' , '39746' ) ; +test( macro , '7' , '1073741824' , '7516192768' ) ; +test( macro , '-7' , '1073741824' , '-7516192768' ) ; +test( macro , '7' , '-1073741824' , '-7516192768' ) ; +test( macro , '-7' , '-1073741824' , '7516192768' ) ; +test( macro , '7' , '51676101935731' , '361732713550117' ) ; +test( macro , '-7' , '51676101935731' , '-361732713550117' ) ; +test( macro , '7' , '-51676101935731' , '-361732713550117' ) ; +test( macro , '-7' , '-51676101935731' , '361732713550117' ) ; +test( macro , '7' , '717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '-7' , '717897987691852588770249' , '-5025285913842968121391743' ) ; +test( macro , '7' , '-717897987691852588770249' , '-5025285913842968121391743' ) ; +test( macro , '-7' , '-717897987691852588770249' , '5025285913842968121391743' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '-1' , '-9' ) ; +test( macro , '-9' , '-1' , '9' ) ; +test( macro , '9' , '3' , '27' ) ; +test( macro , '-9' , '3' , '-27' ) ; +test( macro , '9' , '-3' , '-27' ) ; +test( macro , '-9' , '-3' , '27' ) ; +test( macro , '9' , '7' , '63' ) ; +test( macro , '-9' , '7' , '-63' ) ; +test( macro , '9' , '-7' , '-63' ) ; +test( macro , '-9' , '-7' , '63' ) ; +test( macro , '9' , '9' , '81' ) ; +test( macro , '-9' , '9' , '-81' ) ; +test( macro , '9' , '-9' , '-81' ) ; +test( macro , '-9' , '-9' , '81' ) ; +test( macro , '9' , '11' , '99' ) ; +test( macro , '-9' , '11' , '-99' ) ; +test( macro , '9' , '-11' , '-99' ) ; +test( macro , '-9' , '-11' , '99' ) ; +test( macro , '9' , '17' , '153' ) ; +test( macro , '-9' , '17' , '-153' ) ; +test( macro , '9' , '-17' , '-153' ) ; +test( macro , '-9' , '-17' , '153' ) ; +test( macro , '9' , '22' , '198' ) ; +test( macro , '-9' , '22' , '-198' ) ; +test( macro , '9' , '-22' , '-198' ) ; +test( macro , '-9' , '-22' , '198' ) ; +test( macro , '9' , '24' , '216' ) ; +test( macro , '-9' , '24' , '-216' ) ; +test( macro , '9' , '-24' , '-216' ) ; +test( macro , '-9' , '-24' , '216' ) ; +test( macro , '9' , '27' , '243' ) ; +test( macro , '-9' , '27' , '-243' ) ; +test( macro , '9' , '-27' , '-243' ) ; +test( macro , '-9' , '-27' , '243' ) ; +test( macro , '9' , '29' , '261' ) ; +test( macro , '-9' , '29' , '-261' ) ; +test( macro , '9' , '-29' , '-261' ) ; +test( macro , '-9' , '-29' , '261' ) ; +test( macro , '9' , '1234' , '11106' ) ; +test( macro , '-9' , '1234' , '-11106' ) ; +test( macro , '9' , '-1234' , '-11106' ) ; +test( macro , '-9' , '-1234' , '11106' ) ; +test( macro , '9' , '5678' , '51102' ) ; +test( macro , '-9' , '5678' , '-51102' ) ; +test( macro , '9' , '-5678' , '-51102' ) ; +test( macro , '-9' , '-5678' , '51102' ) ; +test( macro , '9' , '1073741824' , '9663676416' ) ; +test( macro , '-9' , '1073741824' , '-9663676416' ) ; +test( macro , '9' , '-1073741824' , '-9663676416' ) ; +test( macro , '-9' , '-1073741824' , '9663676416' ) ; +test( macro , '9' , '51676101935731' , '465084917421579' ) ; +test( macro , '-9' , '51676101935731' , '-465084917421579' ) ; +test( macro , '9' , '-51676101935731' , '-465084917421579' ) ; +test( macro , '-9' , '-51676101935731' , '465084917421579' ) ; +test( macro , '9' , '717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '-9' , '717897987691852588770249' , '-6461081889226673298932241' ) ; +test( macro , '9' , '-717897987691852588770249' , '-6461081889226673298932241' ) ; +test( macro , '-9' , '-717897987691852588770249' , '6461081889226673298932241' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '-1' , '-11' ) ; +test( macro , '-11' , '-1' , '11' ) ; +test( macro , '11' , '3' , '33' ) ; +test( macro , '-11' , '3' , '-33' ) ; +test( macro , '11' , '-3' , '-33' ) ; +test( macro , '-11' , '-3' , '33' ) ; +test( macro , '11' , '7' , '77' ) ; +test( macro , '-11' , '7' , '-77' ) ; +test( macro , '11' , '-7' , '-77' ) ; +test( macro , '-11' , '-7' , '77' ) ; +test( macro , '11' , '9' , '99' ) ; +test( macro , '-11' , '9' , '-99' ) ; +test( macro , '11' , '-9' , '-99' ) ; +test( macro , '-11' , '-9' , '99' ) ; +test( macro , '11' , '11' , '121' ) ; +test( macro , '-11' , '11' , '-121' ) ; +test( macro , '11' , '-11' , '-121' ) ; +test( macro , '-11' , '-11' , '121' ) ; +test( macro , '11' , '17' , '187' ) ; +test( macro , '-11' , '17' , '-187' ) ; +test( macro , '11' , '-17' , '-187' ) ; +test( macro , '-11' , '-17' , '187' ) ; +test( macro , '11' , '22' , '242' ) ; +test( macro , '-11' , '22' , '-242' ) ; +test( macro , '11' , '-22' , '-242' ) ; +test( macro , '-11' , '-22' , '242' ) ; +test( macro , '11' , '24' , '264' ) ; +test( macro , '-11' , '24' , '-264' ) ; +test( macro , '11' , '-24' , '-264' ) ; +test( macro , '-11' , '-24' , '264' ) ; +test( macro , '11' , '27' , '297' ) ; +test( macro , '-11' , '27' , '-297' ) ; +test( macro , '11' , '-27' , '-297' ) ; +test( macro , '-11' , '-27' , '297' ) ; +test( macro , '11' , '29' , '319' ) ; +test( macro , '-11' , '29' , '-319' ) ; +test( macro , '11' , '-29' , '-319' ) ; +test( macro , '-11' , '-29' , '319' ) ; +test( macro , '11' , '1234' , '13574' ) ; +test( macro , '-11' , '1234' , '-13574' ) ; +test( macro , '11' , '-1234' , '-13574' ) ; +test( macro , '-11' , '-1234' , '13574' ) ; +test( macro , '11' , '5678' , '62458' ) ; +test( macro , '-11' , '5678' , '-62458' ) ; +test( macro , '11' , '-5678' , '-62458' ) ; +test( macro , '-11' , '-5678' , '62458' ) ; +test( macro , '11' , '1073741824' , '11811160064' ) ; +test( macro , '-11' , '1073741824' , '-11811160064' ) ; +test( macro , '11' , '-1073741824' , '-11811160064' ) ; +test( macro , '-11' , '-1073741824' , '11811160064' ) ; +test( macro , '11' , '51676101935731' , '568437121293041' ) ; +test( macro , '-11' , '51676101935731' , '-568437121293041' ) ; +test( macro , '11' , '-51676101935731' , '-568437121293041' ) ; +test( macro , '-11' , '-51676101935731' , '568437121293041' ) ; +test( macro , '11' , '717897987691852588770249' , '7896877864610378476472739' ) ; +test( macro , '-11' , '717897987691852588770249' , '-7896877864610378476472739' ) ; +test( macro , '11' , '-717897987691852588770249' , '-7896877864610378476472739' ) ; +test( macro , '-11' , '-717897987691852588770249' , '7896877864610378476472739' ) ; test( macro , '17' , '1' , '17' ) ; test( macro , '-17' , '1' , '-17' ) ; test( macro , '17' , '-1' , '-17' ) ; test( macro , '-17' , '-1' , '17' ) ; +test( macro , '17' , '3' , '51' ) ; +test( macro , '-17' , '3' , '-51' ) ; +test( macro , '17' , '-3' , '-51' ) ; +test( macro , '-17' , '-3' , '51' ) ; +test( macro , '17' , '7' , '119' ) ; +test( macro , '-17' , '7' , '-119' ) ; +test( macro , '17' , '-7' , '-119' ) ; +test( macro , '-17' , '-7' , '119' ) ; +test( macro , '17' , '9' , '153' ) ; +test( macro , '-17' , '9' , '-153' ) ; +test( macro , '17' , '-9' , '-153' ) ; +test( macro , '-17' , '-9' , '153' ) ; +test( macro , '17' , '11' , '187' ) ; +test( macro , '-17' , '11' , '-187' ) ; +test( macro , '17' , '-11' , '-187' ) ; +test( macro , '-17' , '-11' , '187' ) ; test( macro , '17' , '17' , '289' ) ; test( macro , '-17' , '17' , '-289' ) ; test( macro , '17' , '-17' , '-289' ) ; test( macro , '-17' , '-17' , '289' ) ; -test( macro , '17' , '51676101935731' , '878493732907427' ) ; -test( macro , '-17' , '51676101935731' , '-878493732907427' ) ; -test( macro , '17' , '-51676101935731' , '-878493732907427' ) ; -test( macro , '-17' , '-51676101935731' , '878493732907427' ) ; +test( macro , '17' , '22' , '374' ) ; +test( macro , '-17' , '22' , '-374' ) ; +test( macro , '17' , '-22' , '-374' ) ; +test( macro , '-17' , '-22' , '374' ) ; +test( macro , '17' , '24' , '408' ) ; +test( macro , '-17' , '24' , '-408' ) ; +test( macro , '17' , '-24' , '-408' ) ; +test( macro , '-17' , '-24' , '408' ) ; +test( macro , '17' , '27' , '459' ) ; +test( macro , '-17' , '27' , '-459' ) ; +test( macro , '17' , '-27' , '-459' ) ; +test( macro , '-17' , '-27' , '459' ) ; +test( macro , '17' , '29' , '493' ) ; +test( macro , '-17' , '29' , '-493' ) ; +test( macro , '17' , '-29' , '-493' ) ; +test( macro , '-17' , '-29' , '493' ) ; +test( macro , '17' , '1234' , '20978' ) ; +test( macro , '-17' , '1234' , '-20978' ) ; +test( macro , '17' , '-1234' , '-20978' ) ; +test( macro , '-17' , '-1234' , '20978' ) ; +test( macro , '17' , '5678' , '96526' ) ; +test( macro , '-17' , '5678' , '-96526' ) ; +test( macro , '17' , '-5678' , '-96526' ) ; +test( macro , '-17' , '-5678' , '96526' ) ; test( macro , '17' , '1073741824' , '18253611008' ) ; test( macro , '-17' , '1073741824' , '-18253611008' ) ; test( macro , '17' , '-1073741824' , '-18253611008' ) ; test( macro , '-17' , '-1073741824' , '18253611008' ) ; +test( macro , '17' , '51676101935731' , '878493732907427' ) ; +test( macro , '-17' , '51676101935731' , '-878493732907427' ) ; +test( macro , '17' , '-51676101935731' , '-878493732907427' ) ; +test( macro , '-17' , '-51676101935731' , '878493732907427' ) ; test( macro , '17' , '717897987691852588770249' , '12204265790761494009094233' ) ; test( macro , '-17' , '717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '17' , '-717897987691852588770249' , '-12204265790761494009094233' ) ; test( macro , '-17' , '-717897987691852588770249' , '12204265790761494009094233' ) ; -test( macro , '51676101935731' , '1' , '51676101935731' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; -test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; -test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; -test( macro , '51676101935731' , '17' , '878493732907427' ) ; -test( macro , '-51676101935731' , '17' , '-878493732907427' ) ; -test( macro , '51676101935731' , '-17' , '-878493732907427' ) ; -test( macro , '-51676101935731' , '-17' , '878493732907427' ) ; -test( macro , '51676101935731' , '51676101935731' , '2670419511272061205254504361' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-2670419511272061205254504361' ) ; -test( macro , '51676101935731' , '-51676101935731' , '-2670419511272061205254504361' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '2670419511272061205254504361' ) ; -test( macro , '51676101935731' , '1073741824' , '55486791949681734713344' ) ; -test( macro , '-51676101935731' , '1073741824' , '-55486791949681734713344' ) ; -test( macro , '51676101935731' , '-1073741824' , '-55486791949681734713344' ) ; -test( macro , '-51676101935731' , '-1073741824' , '55486791949681734713344' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333175287767861722867019' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '-1' , '-22' ) ; +test( macro , '-22' , '-1' , '22' ) ; +test( macro , '22' , '3' , '66' ) ; +test( macro , '-22' , '3' , '-66' ) ; +test( macro , '22' , '-3' , '-66' ) ; +test( macro , '-22' , '-3' , '66' ) ; +test( macro , '22' , '7' , '154' ) ; +test( macro , '-22' , '7' , '-154' ) ; +test( macro , '22' , '-7' , '-154' ) ; +test( macro , '-22' , '-7' , '154' ) ; +test( macro , '22' , '9' , '198' ) ; +test( macro , '-22' , '9' , '-198' ) ; +test( macro , '22' , '-9' , '-198' ) ; +test( macro , '-22' , '-9' , '198' ) ; +test( macro , '22' , '11' , '242' ) ; +test( macro , '-22' , '11' , '-242' ) ; +test( macro , '22' , '-11' , '-242' ) ; +test( macro , '-22' , '-11' , '242' ) ; +test( macro , '22' , '17' , '374' ) ; +test( macro , '-22' , '17' , '-374' ) ; +test( macro , '22' , '-17' , '-374' ) ; +test( macro , '-22' , '-17' , '374' ) ; +test( macro , '22' , '22' , '484' ) ; +test( macro , '-22' , '22' , '-484' ) ; +test( macro , '22' , '-22' , '-484' ) ; +test( macro , '-22' , '-22' , '484' ) ; +test( macro , '22' , '24' , '528' ) ; +test( macro , '-22' , '24' , '-528' ) ; +test( macro , '22' , '-24' , '-528' ) ; +test( macro , '-22' , '-24' , '528' ) ; +test( macro , '22' , '27' , '594' ) ; +test( macro , '-22' , '27' , '-594' ) ; +test( macro , '22' , '-27' , '-594' ) ; +test( macro , '-22' , '-27' , '594' ) ; +test( macro , '22' , '29' , '638' ) ; +test( macro , '-22' , '29' , '-638' ) ; +test( macro , '22' , '-29' , '-638' ) ; +test( macro , '-22' , '-29' , '638' ) ; +test( macro , '22' , '1234' , '27148' ) ; +test( macro , '-22' , '1234' , '-27148' ) ; +test( macro , '22' , '-1234' , '-27148' ) ; +test( macro , '-22' , '-1234' , '27148' ) ; +test( macro , '22' , '5678' , '124916' ) ; +test( macro , '-22' , '5678' , '-124916' ) ; +test( macro , '22' , '-5678' , '-124916' ) ; +test( macro , '-22' , '-5678' , '124916' ) ; +test( macro , '22' , '1073741824' , '23622320128' ) ; +test( macro , '-22' , '1073741824' , '-23622320128' ) ; +test( macro , '22' , '-1073741824' , '-23622320128' ) ; +test( macro , '-22' , '-1073741824' , '23622320128' ) ; +test( macro , '22' , '51676101935731' , '1136874242586082' ) ; +test( macro , '-22' , '51676101935731' , '-1136874242586082' ) ; +test( macro , '22' , '-51676101935731' , '-1136874242586082' ) ; +test( macro , '-22' , '-51676101935731' , '1136874242586082' ) ; +test( macro , '22' , '717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '-22' , '717897987691852588770249' , '-15793755729220756952945478' ) ; +test( macro , '22' , '-717897987691852588770249' , '-15793755729220756952945478' ) ; +test( macro , '-22' , '-717897987691852588770249' , '15793755729220756952945478' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '-1' , '-24' ) ; +test( macro , '-24' , '-1' , '24' ) ; +test( macro , '24' , '3' , '72' ) ; +test( macro , '-24' , '3' , '-72' ) ; +test( macro , '24' , '-3' , '-72' ) ; +test( macro , '-24' , '-3' , '72' ) ; +test( macro , '24' , '7' , '168' ) ; +test( macro , '-24' , '7' , '-168' ) ; +test( macro , '24' , '-7' , '-168' ) ; +test( macro , '-24' , '-7' , '168' ) ; +test( macro , '24' , '9' , '216' ) ; +test( macro , '-24' , '9' , '-216' ) ; +test( macro , '24' , '-9' , '-216' ) ; +test( macro , '-24' , '-9' , '216' ) ; +test( macro , '24' , '11' , '264' ) ; +test( macro , '-24' , '11' , '-264' ) ; +test( macro , '24' , '-11' , '-264' ) ; +test( macro , '-24' , '-11' , '264' ) ; +test( macro , '24' , '17' , '408' ) ; +test( macro , '-24' , '17' , '-408' ) ; +test( macro , '24' , '-17' , '-408' ) ; +test( macro , '-24' , '-17' , '408' ) ; +test( macro , '24' , '22' , '528' ) ; +test( macro , '-24' , '22' , '-528' ) ; +test( macro , '24' , '-22' , '-528' ) ; +test( macro , '-24' , '-22' , '528' ) ; +test( macro , '24' , '24' , '576' ) ; +test( macro , '-24' , '24' , '-576' ) ; +test( macro , '24' , '-24' , '-576' ) ; +test( macro , '-24' , '-24' , '576' ) ; +test( macro , '24' , '27' , '648' ) ; +test( macro , '-24' , '27' , '-648' ) ; +test( macro , '24' , '-27' , '-648' ) ; +test( macro , '-24' , '-27' , '648' ) ; +test( macro , '24' , '29' , '696' ) ; +test( macro , '-24' , '29' , '-696' ) ; +test( macro , '24' , '-29' , '-696' ) ; +test( macro , '-24' , '-29' , '696' ) ; +test( macro , '24' , '1234' , '29616' ) ; +test( macro , '-24' , '1234' , '-29616' ) ; +test( macro , '24' , '-1234' , '-29616' ) ; +test( macro , '-24' , '-1234' , '29616' ) ; +test( macro , '24' , '5678' , '136272' ) ; +test( macro , '-24' , '5678' , '-136272' ) ; +test( macro , '24' , '-5678' , '-136272' ) ; +test( macro , '-24' , '-5678' , '136272' ) ; +test( macro , '24' , '1073741824' , '25769803776' ) ; +test( macro , '-24' , '1073741824' , '-25769803776' ) ; +test( macro , '24' , '-1073741824' , '-25769803776' ) ; +test( macro , '-24' , '-1073741824' , '25769803776' ) ; +test( macro , '24' , '51676101935731' , '1240226446457544' ) ; +test( macro , '-24' , '51676101935731' , '-1240226446457544' ) ; +test( macro , '24' , '-51676101935731' , '-1240226446457544' ) ; +test( macro , '-24' , '-51676101935731' , '1240226446457544' ) ; +test( macro , '24' , '717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '-24' , '717897987691852588770249' , '-17229551704604462130485976' ) ; +test( macro , '24' , '-717897987691852588770249' , '-17229551704604462130485976' ) ; +test( macro , '-24' , '-717897987691852588770249' , '17229551704604462130485976' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '-1' , '-27' ) ; +test( macro , '-27' , '-1' , '27' ) ; +test( macro , '27' , '3' , '81' ) ; +test( macro , '-27' , '3' , '-81' ) ; +test( macro , '27' , '-3' , '-81' ) ; +test( macro , '-27' , '-3' , '81' ) ; +test( macro , '27' , '7' , '189' ) ; +test( macro , '-27' , '7' , '-189' ) ; +test( macro , '27' , '-7' , '-189' ) ; +test( macro , '-27' , '-7' , '189' ) ; +test( macro , '27' , '9' , '243' ) ; +test( macro , '-27' , '9' , '-243' ) ; +test( macro , '27' , '-9' , '-243' ) ; +test( macro , '-27' , '-9' , '243' ) ; +test( macro , '27' , '11' , '297' ) ; +test( macro , '-27' , '11' , '-297' ) ; +test( macro , '27' , '-11' , '-297' ) ; +test( macro , '-27' , '-11' , '297' ) ; +test( macro , '27' , '17' , '459' ) ; +test( macro , '-27' , '17' , '-459' ) ; +test( macro , '27' , '-17' , '-459' ) ; +test( macro , '-27' , '-17' , '459' ) ; +test( macro , '27' , '22' , '594' ) ; +test( macro , '-27' , '22' , '-594' ) ; +test( macro , '27' , '-22' , '-594' ) ; +test( macro , '-27' , '-22' , '594' ) ; +test( macro , '27' , '24' , '648' ) ; +test( macro , '-27' , '24' , '-648' ) ; +test( macro , '27' , '-24' , '-648' ) ; +test( macro , '-27' , '-24' , '648' ) ; +test( macro , '27' , '27' , '729' ) ; +test( macro , '-27' , '27' , '-729' ) ; +test( macro , '27' , '-27' , '-729' ) ; +test( macro , '-27' , '-27' , '729' ) ; +test( macro , '27' , '29' , '783' ) ; +test( macro , '-27' , '29' , '-783' ) ; +test( macro , '27' , '-29' , '-783' ) ; +test( macro , '-27' , '-29' , '783' ) ; +test( macro , '27' , '1234' , '33318' ) ; +test( macro , '-27' , '1234' , '-33318' ) ; +test( macro , '27' , '-1234' , '-33318' ) ; +test( macro , '-27' , '-1234' , '33318' ) ; +test( macro , '27' , '5678' , '153306' ) ; +test( macro , '-27' , '5678' , '-153306' ) ; +test( macro , '27' , '-5678' , '-153306' ) ; +test( macro , '-27' , '-5678' , '153306' ) ; +test( macro , '27' , '1073741824' , '28991029248' ) ; +test( macro , '-27' , '1073741824' , '-28991029248' ) ; +test( macro , '27' , '-1073741824' , '-28991029248' ) ; +test( macro , '-27' , '-1073741824' , '28991029248' ) ; +test( macro , '27' , '51676101935731' , '1395254752264737' ) ; +test( macro , '-27' , '51676101935731' , '-1395254752264737' ) ; +test( macro , '27' , '-51676101935731' , '-1395254752264737' ) ; +test( macro , '-27' , '-51676101935731' , '1395254752264737' ) ; +test( macro , '27' , '717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '-27' , '717897987691852588770249' , '-19383245667680019896796723' ) ; +test( macro , '27' , '-717897987691852588770249' , '-19383245667680019896796723' ) ; +test( macro , '-27' , '-717897987691852588770249' , '19383245667680019896796723' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '-1' , '-29' ) ; +test( macro , '-29' , '-1' , '29' ) ; +test( macro , '29' , '3' , '87' ) ; +test( macro , '-29' , '3' , '-87' ) ; +test( macro , '29' , '-3' , '-87' ) ; +test( macro , '-29' , '-3' , '87' ) ; +test( macro , '29' , '7' , '203' ) ; +test( macro , '-29' , '7' , '-203' ) ; +test( macro , '29' , '-7' , '-203' ) ; +test( macro , '-29' , '-7' , '203' ) ; +test( macro , '29' , '9' , '261' ) ; +test( macro , '-29' , '9' , '-261' ) ; +test( macro , '29' , '-9' , '-261' ) ; +test( macro , '-29' , '-9' , '261' ) ; +test( macro , '29' , '11' , '319' ) ; +test( macro , '-29' , '11' , '-319' ) ; +test( macro , '29' , '-11' , '-319' ) ; +test( macro , '-29' , '-11' , '319' ) ; +test( macro , '29' , '17' , '493' ) ; +test( macro , '-29' , '17' , '-493' ) ; +test( macro , '29' , '-17' , '-493' ) ; +test( macro , '-29' , '-17' , '493' ) ; +test( macro , '29' , '22' , '638' ) ; +test( macro , '-29' , '22' , '-638' ) ; +test( macro , '29' , '-22' , '-638' ) ; +test( macro , '-29' , '-22' , '638' ) ; +test( macro , '29' , '24' , '696' ) ; +test( macro , '-29' , '24' , '-696' ) ; +test( macro , '29' , '-24' , '-696' ) ; +test( macro , '-29' , '-24' , '696' ) ; +test( macro , '29' , '27' , '783' ) ; +test( macro , '-29' , '27' , '-783' ) ; +test( macro , '29' , '-27' , '-783' ) ; +test( macro , '-29' , '-27' , '783' ) ; +test( macro , '29' , '29' , '841' ) ; +test( macro , '-29' , '29' , '-841' ) ; +test( macro , '29' , '-29' , '-841' ) ; +test( macro , '-29' , '-29' , '841' ) ; +test( macro , '29' , '1234' , '35786' ) ; +test( macro , '-29' , '1234' , '-35786' ) ; +test( macro , '29' , '-1234' , '-35786' ) ; +test( macro , '-29' , '-1234' , '35786' ) ; +test( macro , '29' , '5678' , '164662' ) ; +test( macro , '-29' , '5678' , '-164662' ) ; +test( macro , '29' , '-5678' , '-164662' ) ; +test( macro , '-29' , '-5678' , '164662' ) ; +test( macro , '29' , '1073741824' , '31138512896' ) ; +test( macro , '-29' , '1073741824' , '-31138512896' ) ; +test( macro , '29' , '-1073741824' , '-31138512896' ) ; +test( macro , '-29' , '-1073741824' , '31138512896' ) ; +test( macro , '29' , '51676101935731' , '1498606956136199' ) ; +test( macro , '-29' , '51676101935731' , '-1498606956136199' ) ; +test( macro , '29' , '-51676101935731' , '-1498606956136199' ) ; +test( macro , '-29' , '-51676101935731' , '1498606956136199' ) ; +test( macro , '29' , '717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '-29' , '717897987691852588770249' , '-20819041643063725074337221' ) ; +test( macro , '29' , '-717897987691852588770249' , '-20819041643063725074337221' ) ; +test( macro , '-29' , '-717897987691852588770249' , '20819041643063725074337221' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '-1' , '-1234' ) ; +test( macro , '-1234' , '-1' , '1234' ) ; +test( macro , '1234' , '3' , '3702' ) ; +test( macro , '-1234' , '3' , '-3702' ) ; +test( macro , '1234' , '-3' , '-3702' ) ; +test( macro , '-1234' , '-3' , '3702' ) ; +test( macro , '1234' , '7' , '8638' ) ; +test( macro , '-1234' , '7' , '-8638' ) ; +test( macro , '1234' , '-7' , '-8638' ) ; +test( macro , '-1234' , '-7' , '8638' ) ; +test( macro , '1234' , '9' , '11106' ) ; +test( macro , '-1234' , '9' , '-11106' ) ; +test( macro , '1234' , '-9' , '-11106' ) ; +test( macro , '-1234' , '-9' , '11106' ) ; +test( macro , '1234' , '11' , '13574' ) ; +test( macro , '-1234' , '11' , '-13574' ) ; +test( macro , '1234' , '-11' , '-13574' ) ; +test( macro , '-1234' , '-11' , '13574' ) ; +test( macro , '1234' , '17' , '20978' ) ; +test( macro , '-1234' , '17' , '-20978' ) ; +test( macro , '1234' , '-17' , '-20978' ) ; +test( macro , '-1234' , '-17' , '20978' ) ; +test( macro , '1234' , '22' , '27148' ) ; +test( macro , '-1234' , '22' , '-27148' ) ; +test( macro , '1234' , '-22' , '-27148' ) ; +test( macro , '-1234' , '-22' , '27148' ) ; +test( macro , '1234' , '24' , '29616' ) ; +test( macro , '-1234' , '24' , '-29616' ) ; +test( macro , '1234' , '-24' , '-29616' ) ; +test( macro , '-1234' , '-24' , '29616' ) ; +test( macro , '1234' , '27' , '33318' ) ; +test( macro , '-1234' , '27' , '-33318' ) ; +test( macro , '1234' , '-27' , '-33318' ) ; +test( macro , '-1234' , '-27' , '33318' ) ; +test( macro , '1234' , '29' , '35786' ) ; +test( macro , '-1234' , '29' , '-35786' ) ; +test( macro , '1234' , '-29' , '-35786' ) ; +test( macro , '-1234' , '-29' , '35786' ) ; +test( macro , '1234' , '1234' , '1522756' ) ; +test( macro , '-1234' , '1234' , '-1522756' ) ; +test( macro , '1234' , '-1234' , '-1522756' ) ; +test( macro , '-1234' , '-1234' , '1522756' ) ; +test( macro , '1234' , '5678' , '7006652' ) ; +test( macro , '-1234' , '5678' , '-7006652' ) ; +test( macro , '1234' , '-5678' , '-7006652' ) ; +test( macro , '-1234' , '-5678' , '7006652' ) ; +test( macro , '1234' , '1073741824' , '1324997410816' ) ; +test( macro , '-1234' , '1073741824' , '-1324997410816' ) ; +test( macro , '1234' , '-1073741824' , '-1324997410816' ) ; +test( macro , '-1234' , '-1073741824' , '1324997410816' ) ; +test( macro , '1234' , '51676101935731' , '63768309788692054' ) ; +test( macro , '-1234' , '51676101935731' , '-63768309788692054' ) ; +test( macro , '1234' , '-51676101935731' , '-63768309788692054' ) ; +test( macro , '-1234' , '-51676101935731' , '63768309788692054' ) ; +test( macro , '1234' , '717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-885886116811746094542487266' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-885886116811746094542487266' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '885886116811746094542487266' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '-1' , '-5678' ) ; +test( macro , '-5678' , '-1' , '5678' ) ; +test( macro , '5678' , '3' , '17034' ) ; +test( macro , '-5678' , '3' , '-17034' ) ; +test( macro , '5678' , '-3' , '-17034' ) ; +test( macro , '-5678' , '-3' , '17034' ) ; +test( macro , '5678' , '7' , '39746' ) ; +test( macro , '-5678' , '7' , '-39746' ) ; +test( macro , '5678' , '-7' , '-39746' ) ; +test( macro , '-5678' , '-7' , '39746' ) ; +test( macro , '5678' , '9' , '51102' ) ; +test( macro , '-5678' , '9' , '-51102' ) ; +test( macro , '5678' , '-9' , '-51102' ) ; +test( macro , '-5678' , '-9' , '51102' ) ; +test( macro , '5678' , '11' , '62458' ) ; +test( macro , '-5678' , '11' , '-62458' ) ; +test( macro , '5678' , '-11' , '-62458' ) ; +test( macro , '-5678' , '-11' , '62458' ) ; +test( macro , '5678' , '17' , '96526' ) ; +test( macro , '-5678' , '17' , '-96526' ) ; +test( macro , '5678' , '-17' , '-96526' ) ; +test( macro , '-5678' , '-17' , '96526' ) ; +test( macro , '5678' , '22' , '124916' ) ; +test( macro , '-5678' , '22' , '-124916' ) ; +test( macro , '5678' , '-22' , '-124916' ) ; +test( macro , '-5678' , '-22' , '124916' ) ; +test( macro , '5678' , '24' , '136272' ) ; +test( macro , '-5678' , '24' , '-136272' ) ; +test( macro , '5678' , '-24' , '-136272' ) ; +test( macro , '-5678' , '-24' , '136272' ) ; +test( macro , '5678' , '27' , '153306' ) ; +test( macro , '-5678' , '27' , '-153306' ) ; +test( macro , '5678' , '-27' , '-153306' ) ; +test( macro , '-5678' , '-27' , '153306' ) ; +test( macro , '5678' , '29' , '164662' ) ; +test( macro , '-5678' , '29' , '-164662' ) ; +test( macro , '5678' , '-29' , '-164662' ) ; +test( macro , '-5678' , '-29' , '164662' ) ; +test( macro , '5678' , '1234' , '7006652' ) ; +test( macro , '-5678' , '1234' , '-7006652' ) ; +test( macro , '5678' , '-1234' , '-7006652' ) ; +test( macro , '-5678' , '-1234' , '7006652' ) ; +test( macro , '5678' , '5678' , '32239684' ) ; +test( macro , '-5678' , '5678' , '-32239684' ) ; +test( macro , '5678' , '-5678' , '-32239684' ) ; +test( macro , '-5678' , '-5678' , '32239684' ) ; +test( macro , '5678' , '1073741824' , '6096706076672' ) ; +test( macro , '-5678' , '1073741824' , '-6096706076672' ) ; +test( macro , '5678' , '-1073741824' , '-6096706076672' ) ; +test( macro , '-5678' , '-1073741824' , '6096706076672' ) ; +test( macro , '5678' , '51676101935731' , '293416906791080618' ) ; +test( macro , '-5678' , '51676101935731' , '-293416906791080618' ) ; +test( macro , '5678' , '-51676101935731' , '-293416906791080618' ) ; +test( macro , '-5678' , '-51676101935731' , '293416906791080618' ) ; +test( macro , '5678' , '717897987691852588770249' , '4076224774114338999037473822' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-4076224774114338999037473822' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-4076224774114338999037473822' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '4076224774114338999037473822' ) ; test( macro , '1073741824' , '1' , '1073741824' ) ; test( macro , '-1073741824' , '1' , '-1073741824' ) ; test( macro , '1073741824' , '-1' , '-1073741824' ) ; test( macro , '-1073741824' , '-1' , '1073741824' ) ; +test( macro , '1073741824' , '3' , '3221225472' ) ; +test( macro , '-1073741824' , '3' , '-3221225472' ) ; +test( macro , '1073741824' , '-3' , '-3221225472' ) ; +test( macro , '-1073741824' , '-3' , '3221225472' ) ; +test( macro , '1073741824' , '7' , '7516192768' ) ; +test( macro , '-1073741824' , '7' , '-7516192768' ) ; +test( macro , '1073741824' , '-7' , '-7516192768' ) ; +test( macro , '-1073741824' , '-7' , '7516192768' ) ; +test( macro , '1073741824' , '9' , '9663676416' ) ; +test( macro , '-1073741824' , '9' , '-9663676416' ) ; +test( macro , '1073741824' , '-9' , '-9663676416' ) ; +test( macro , '-1073741824' , '-9' , '9663676416' ) ; +test( macro , '1073741824' , '11' , '11811160064' ) ; +test( macro , '-1073741824' , '11' , '-11811160064' ) ; +test( macro , '1073741824' , '-11' , '-11811160064' ) ; +test( macro , '-1073741824' , '-11' , '11811160064' ) ; test( macro , '1073741824' , '17' , '18253611008' ) ; test( macro , '-1073741824' , '17' , '-18253611008' ) ; test( macro , '1073741824' , '-17' , '-18253611008' ) ; test( macro , '-1073741824' , '-17' , '18253611008' ) ; -test( macro , '1073741824' , '51676101935731' , '55486791949681734713344' ) ; -test( macro , '-1073741824' , '51676101935731' , '-55486791949681734713344' ) ; -test( macro , '1073741824' , '-51676101935731' , '-55486791949681734713344' ) ; -test( macro , '-1073741824' , '-51676101935731' , '55486791949681734713344' ) ; +test( macro , '1073741824' , '22' , '23622320128' ) ; +test( macro , '-1073741824' , '22' , '-23622320128' ) ; +test( macro , '1073741824' , '-22' , '-23622320128' ) ; +test( macro , '-1073741824' , '-22' , '23622320128' ) ; +test( macro , '1073741824' , '24' , '25769803776' ) ; +test( macro , '-1073741824' , '24' , '-25769803776' ) ; +test( macro , '1073741824' , '-24' , '-25769803776' ) ; +test( macro , '-1073741824' , '-24' , '25769803776' ) ; +test( macro , '1073741824' , '27' , '28991029248' ) ; +test( macro , '-1073741824' , '27' , '-28991029248' ) ; +test( macro , '1073741824' , '-27' , '-28991029248' ) ; +test( macro , '-1073741824' , '-27' , '28991029248' ) ; +test( macro , '1073741824' , '29' , '31138512896' ) ; +test( macro , '-1073741824' , '29' , '-31138512896' ) ; +test( macro , '1073741824' , '-29' , '-31138512896' ) ; +test( macro , '-1073741824' , '-29' , '31138512896' ) ; +test( macro , '1073741824' , '1234' , '1324997410816' ) ; +test( macro , '-1073741824' , '1234' , '-1324997410816' ) ; +test( macro , '1073741824' , '-1234' , '-1324997410816' ) ; +test( macro , '-1073741824' , '-1234' , '1324997410816' ) ; +test( macro , '1073741824' , '5678' , '6096706076672' ) ; +test( macro , '-1073741824' , '5678' , '-6096706076672' ) ; +test( macro , '1073741824' , '-5678' , '-6096706076672' ) ; +test( macro , '-1073741824' , '-5678' , '6096706076672' ) ; test( macro , '1073741824' , '1073741824' , '1152921504606846976' ) ; test( macro , '-1073741824' , '1073741824' , '-1152921504606846976' ) ; test( macro , '1073741824' , '-1073741824' , '-1152921504606846976' ) ; test( macro , '-1073741824' , '-1073741824' , '1152921504606846976' ) ; +test( macro , '1073741824' , '51676101935731' , '55486791949681734713344' ) ; +test( macro , '-1073741824' , '51676101935731' , '-55486791949681734713344' ) ; +test( macro , '1073741824' , '-51676101935731' , '-55486791949681734713344' ) ; +test( macro , '-1073741824' , '-51676101935731' , '55486791949681734713344' ) ; test( macro , '1073741824' , '717897987691852588770249' , '770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '-770837094750179348605289078194176' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '770837094750179348605289078194176' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' ) ; +test( macro , '51676101935731' , '3' , '155028305807193' ) ; +test( macro , '-51676101935731' , '3' , '-155028305807193' ) ; +test( macro , '51676101935731' , '-3' , '-155028305807193' ) ; +test( macro , '-51676101935731' , '-3' , '155028305807193' ) ; +test( macro , '51676101935731' , '7' , '361732713550117' ) ; +test( macro , '-51676101935731' , '7' , '-361732713550117' ) ; +test( macro , '51676101935731' , '-7' , '-361732713550117' ) ; +test( macro , '-51676101935731' , '-7' , '361732713550117' ) ; +test( macro , '51676101935731' , '9' , '465084917421579' ) ; +test( macro , '-51676101935731' , '9' , '-465084917421579' ) ; +test( macro , '51676101935731' , '-9' , '-465084917421579' ) ; +test( macro , '-51676101935731' , '-9' , '465084917421579' ) ; +test( macro , '51676101935731' , '11' , '568437121293041' ) ; +test( macro , '-51676101935731' , '11' , '-568437121293041' ) ; +test( macro , '51676101935731' , '-11' , '-568437121293041' ) ; +test( macro , '-51676101935731' , '-11' , '568437121293041' ) ; +test( macro , '51676101935731' , '17' , '878493732907427' ) ; +test( macro , '-51676101935731' , '17' , '-878493732907427' ) ; +test( macro , '51676101935731' , '-17' , '-878493732907427' ) ; +test( macro , '-51676101935731' , '-17' , '878493732907427' ) ; +test( macro , '51676101935731' , '22' , '1136874242586082' ) ; +test( macro , '-51676101935731' , '22' , '-1136874242586082' ) ; +test( macro , '51676101935731' , '-22' , '-1136874242586082' ) ; +test( macro , '-51676101935731' , '-22' , '1136874242586082' ) ; +test( macro , '51676101935731' , '24' , '1240226446457544' ) ; +test( macro , '-51676101935731' , '24' , '-1240226446457544' ) ; +test( macro , '51676101935731' , '-24' , '-1240226446457544' ) ; +test( macro , '-51676101935731' , '-24' , '1240226446457544' ) ; +test( macro , '51676101935731' , '27' , '1395254752264737' ) ; +test( macro , '-51676101935731' , '27' , '-1395254752264737' ) ; +test( macro , '51676101935731' , '-27' , '-1395254752264737' ) ; +test( macro , '-51676101935731' , '-27' , '1395254752264737' ) ; +test( macro , '51676101935731' , '29' , '1498606956136199' ) ; +test( macro , '-51676101935731' , '29' , '-1498606956136199' ) ; +test( macro , '51676101935731' , '-29' , '-1498606956136199' ) ; +test( macro , '-51676101935731' , '-29' , '1498606956136199' ) ; +test( macro , '51676101935731' , '1234' , '63768309788692054' ) ; +test( macro , '-51676101935731' , '1234' , '-63768309788692054' ) ; +test( macro , '51676101935731' , '-1234' , '-63768309788692054' ) ; +test( macro , '-51676101935731' , '-1234' , '63768309788692054' ) ; +test( macro , '51676101935731' , '5678' , '293416906791080618' ) ; +test( macro , '-51676101935731' , '5678' , '-293416906791080618' ) ; +test( macro , '51676101935731' , '-5678' , '-293416906791080618' ) ; +test( macro , '-51676101935731' , '-5678' , '293416906791080618' ) ; +test( macro , '51676101935731' , '1073741824' , '55486791949681734713344' ) ; +test( macro , '-51676101935731' , '1073741824' , '-55486791949681734713344' ) ; +test( macro , '51676101935731' , '-1073741824' , '-55486791949681734713344' ) ; +test( macro , '-51676101935731' , '-1073741824' , '55486791949681734713344' ) ; +test( macro , '51676101935731' , '51676101935731' , '2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-2670419511272061205254504361' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '2670419511272061205254504361' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '37098169591420333175287767861722867019' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-37098169591420333175287767861722867019' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '37098169591420333175287767861722867019' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' ) ; test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' ) ; test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , '3' , '2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , '3' , '-2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , '-3' , '-2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , '-3' , '2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , '7' , '5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , '7' , '-5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , '-7' , '-5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , '-7' , '5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , '9' , '6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , '9' , '-6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , '-9' , '-6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , '-9' , '6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , '11' , '7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , '11' , '-7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , '-11' , '-7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , '-11' , '7896877864610378476472739' ) ; test( macro , '717897987691852588770249' , '17' , '12204265790761494009094233' ) ; test( macro , '-717897987691852588770249' , '17' , '-12204265790761494009094233' ) ; test( macro , '717897987691852588770249' , '-17' , '-12204265790761494009094233' ) ; test( macro , '-717897987691852588770249' , '-17' , '12204265790761494009094233' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '37098169591420333175287767861722867019' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-37098169591420333175287767861722867019' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '-37098169591420333175287767861722867019' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '22' , '15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , '22' , '-15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , '-22' , '-15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , '-22' , '15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , '24' , '17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , '24' , '-17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , '-24' , '-17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , '-24' , '17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , '27' , '19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , '27' , '-19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , '-27' , '-19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , '-27' , '19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , '29' , '20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , '29' , '-20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , '-29' , '-20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , '-29' , '20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , '1234' , '885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , '5678' , '4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '4076224774114338999037473822' ) ; test( macro , '717897987691852588770249' , '1073741824' , '770837094750179348605289078194176' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-770837094750179348605289078194176' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '-770837094750179348605289078194176' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '37098169591420333175287767861722867019' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '515377520732011331036461129765621272702107522001' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-515377520732011331036461129765621272702107522001' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-515377520732011331036461129765621272702107522001' ) ; test( macro , '-717897987691852588770249' , '-717897987691852588770249' , '515377520732011331036461129765621272702107522001' ) ; - -test( macro , '41635564802587630124971701498526931600520671849926893478847011' , '11' , '457991212828463931374688716483796247605727390349195828267317121' ) ; -test( macro , '11', '41635564802587630124971701498526931600520671849926893478847011' , '457991212828463931374688716483796247605727390349195828267317121' ) ; - -test( macro , '9876543210' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' , '3034462179416604768793688956686552932355483365567839449252227083183612930411675701672437624008790570306116707317632272299415570805602889919853107397807785939521235637029831435139442582424582822673499884042396806023515370909434665906228003792919920737748992626049234384939867264094174145421920212378052075282420321655463859897029445221031920927399384206898952813199756808003803389522479326277487573273520665878746716528424522937408546413240193345511993738935410450920748341424611430006528617996510274560607681728175709327989067138885973917233086233454258471176335810153271454390497457920768269050812574589913596378168576578263709928736152143400626284338605649393436789570909976181404363379385203095347694012659761209173194850029890736589802647263427792831538376124035256873493548524429690911549898999054051247537896859770051687326962749295071154962738731518764985250685605884451488894789511831972599871489759543191907357753687342581964687426509714228973643155184428634490693343767794470831836310450171591453479355200904627896246883088571954216024258214050351305060310185515837154493655284351670109787396823490014749396086728596489188609880775089166057168311975101209118773255570345201148439116129062414905861755933812586871015303200674011611691361103520472350898780196518255981772735583036441430919264433662846429383445548364978110690140194233636355499273336713762102979945250948153205612441312899856255872259257762589238542271314935442485846637248061802283856488828997500202367471674080877893474253037346403931107563902051561303370800311637562883532455362163294786268913778981380077303036454369870974076074030681051904423429011715190892283090967895205149180496498652558186877260407513734468770225554119226661051278724991572238199449712804204754436056453578919474153409502892603154395956263663830820969545545846506509687298367417521786739150801943908071497213005999287096524968144567968947358605677900406511484274777623899536030097973275265564547027636354406687843811760284848941149182824113445755793538444137696935914356647989288714556705938157522206852623453565222965885779993400409643832233573545494751767210762977039510278899090183869764144726206843019390751797422138270482280620557853440598749858002242336835882610138152216514775269679789293296590323404714526525932361940987997238932546156770224647349624805065129417416622765948675363781475269901660278923000182555734456711052921430228662517099556273643785462735679777170323779745069518958467328750163264090741133213892533811046332123736616041786015409365745163308759987518821371656775621352482002688979815214803382449858977280343363671724364166067690931326790950937420100884259997492212066158091842657776495617660663726516665886137209711304431393951278425938087866700981563347996749043504607786686746007871063171442551786855155223221388592122897599578280734130970673774245483227395314987709899448290429664676823182267128701019534498321485626084909344727481580375518850494435334341374548550200541518471809878923967751707518148732403734616392165430840195695140983662891186791979280141574598311205016056200507967150107382019021868759224021885129692758887871760085613246714801803827829655205202659066428000120456685168479748759321765628310271027596041733983185311793373906546161938771430903652785366941848187193292582400466352887232229381396429217614962510098879470532951019369837463799769876507309080803178774035534114629582932704347336580764001937491832544090452097831207797788384941866158932653533304242981952749460606924504764586103477323660308312884019547888148041876583544055433406402255294648843801771332183859777422220083722191191808090704336941594219851240092187344419055351025683726105152704264961146614865111584379338013099471513672012388469983099325835088521048401153334226471830257049752613792482565727916252124386145574791182796443481077888156226542478103412794167092405614715030590158983642024239590714762959876016426907833038814612529658411559049665331049914710699503025249898330933089783870957352786871103207658840685311617891319876141830028782024538089997287264121310638422123143148905684291747095893809551640578061043802823200756521502771461042725754850966180314328103317735753040648732005596705851299358469210308863070972220328587025233028374636381374338852760509757785947454767672672364970388379727693207999940436091937380601416629057314176237351864292413766865729516893742270141816385608881799476665938195197406001643199815674127122372831403189120911928091495969730574724834407588919556467169088289708087857122838449198090816583091301876316222665835853432113994712473456346125669809826986519834714593458034311946715854339587149164120678977112933851484040303418757151998615877618244606281895259135419808665914430980320980464657138182343618121011231352722920310617484823585898199219907117514658746147387234279194184733938134771984109826991653921347469749517969770376566558131051841097631936196317691369813894888165692117453692194819325408333760441467007196417882551054413512832958058683268770053804316551936743539873741623936469673882006997938770776445239298330496898179016479117355737033515005325018671271377745721487899264921123889131690338228966851554612846570352251931133072822495179677834318374670644802125021195582766954710410497472301944267922630389894582831761624984885563988524603218794785120141688601275043884399181716184004289391616192820222580138779206826172481131165641386741048950896677688083222532671107416722929968552030142073565706541380270120750973300092199279215234027169855467790015855704705136502531781184133051183067650766022323894690930782351740723382201019891777580382226214345122650479034587170943175943675148314060008177882873950801581516909768181289160597156894690977522623263385891414471742759862037336443926832101104985210693848965899232110006146541632264767573000917552276020117743384167141769215488129436668688414302134986402246681738467469880814464109161078534548214961884018588228574170592853224010230598268410258445694770273887842217147278493674455667092445774836406464520464084020538803772301235865083355130491192088357611567757596641540109991242436195816366693184335513702707724425305939680486045573379977662943775712221261051881210413226075494066414815615935531083256037626718819255333188164311348180406800371059908204728125031358757680127017908342932185906662948102168656879728572667754845354540763925166101032844364825863140306593898967115454967964325600606073668317126555171997994415111705823843330882917313094812253225977941184403394646259137899616839673755594239057835826223737017452396127653019152926302408011643193291820139911780068276251011496120027184808922388024345440269734898633534767847722946928102975603296241409532560009774935886206493976744524043932311445329021469578424153066784285951946560850398362973333633975051631530064649658523495941250467965870448008200193345915160119862277291064462870784738623933176665721972872448188257282844998801412952252553056963667421418490960341395805319814683825452367276341130683559593681164013025687852902749950016658228632710711788555413308666302983417482029905718955216288166844271594539353912593506685440497176923861961053448871835632877645498090896809969358944024675377734743148722053729698869874656276194393516299794712440668995405360049935764971280859397716392736114856527178103931413907446822975939266021152608717479336608417749216539557700807146648324091763279708069825334480375212911788109174483054815143226814277235554182983081550382212916821961799588187917992951866804472031336723966997512444125837301300772796294666370310381308449848210171302694435117530979900264803620137613045587575109355039361113644243517770236336754369701146254788204194404071137673624560895799911762931653949629328889508633107094070366891782192972473312399086695263698973309746409367132645596702890517307274691490325263839111521047100879962843752869013532305035945191586408856877238142223690611519163710983116072869676079059784317160053083292601357293285090487702404742481981272425232845950849125484358802486594368783685889200191678257410718591236665489429746296656001219961786109266121437788979095434484576476963477038904854609239757628726782551604763876946894825347485356284030123606598233446876221692520145432663097571822619543009582048527988017458163209723848962822114193653320791901714640820351389180707618830373811165086649387648760355995165589603149431817370598042157409412986078736340007922666439335243131252662605695037835605701754100212577678909264897402867138873653868570657158259651246271746381050781528703794116690268510691429174041531364582111545306904264356970899109004730523917283051088669915722920644856076402061865749539753730183606613012933133523220344184825914671287764258738470256956854088324450786022327925850224665391273085000123404609607863595153311608011964219618582587101144363979713629628270857552113507613673932448408988742012271427645224528436825158868638202476237297061435471537960882853307976918927116130362284716918566891041512175445497950767339130585256658762393302867340150023204278994037288984001027415581005541327670294384397045082819373156826371991028041543654303320944869103591939822608288936448988391394083958276775310984217759320516889601115954986371788098158193147397319472188337808618311572633653166291109625007208277523596860294170632274814511985047275508053339285984256600780406473392632279649753931463040461899654021667312487635239518020480030629364368305620876510077252377190346784429959028781870776764625075076219416470999708516127057653480399568943981198581194989162418370603103007845648584611368999456470407483858760325229817268702847397806118556913085203241593951902469068070368786940654225623046371435908450927842883211379298788305774211184695527163957798182011219975337200952182731079837141211009477088301957006325285090081380509134820424594025321522349064325858854973846800738571159043041686478074305830396203335338435178223399861607084808647271788883377384988083203609465816390797873380509528357425841739988599712354919209403574008951486225917040008740726530753190176714693583684081082109687314092490944692007671018497798135553122959868054615258849286374657146709373499903301055183915719284185306404508927095410283203989496679656366579461152388314216039814979928627330929196572718418013990821084374810749120097909831812177111866132691388578828542668640599208499555559567032051440861696015887831760167574186032747392282381032605006606678235505109856686964233629331929620828621049385457531309328274663560437308200187406907158150255409023072658887092687009766818866021637172141419297270170600959969215768216283359101034825342899794703914765968325575383815562443809024091008529960321186680828702188059946547801045607147057516307210671117057270287072680677961794548030580823890452258015136501888344980716576358556366050111947960650721591573375198597007994378680374382210738969097133582454693717684103310409946377980734590388513140660723685756369572879011134665660271945659058492717632779531151779937899242428380994844264585629896646946019844773037746167963139337837330234642032393745141304309479229774229871356584319351036761257193851378511095897316083674484577979437330073546491695642500407263442320836902439205893980259897099320165511751000858301783509417257414704963086600123213398217960280110977738554370171773075685126127101053679582337179205713400976427071379600379875592602670378790882842239041118279439552119034301246852039194814998529057552310457742719194254618234425657020189750183504188390689224724139680231233397514609308138947774730137285777528688649958998999490651931300660634665618139302256834658031069388683334880292106238038256074420379159116898285862501690019505729156329995229205214415119153885065863189923571683271579246490859192972592180723085227177124831978277213329710237601846291676593134840235986556422357175708824634046853925934123719195552507343228428964613908514429340456595496255803928665651013176589154126562080276695801698271827611895817270757189556378505796994644342237337976200895677667192544372618125566010698414208558893096557359159665568927281820796491963526833429728555956696567310247654408195377369305284836275997279437505408231085596840494538892048663241014328247260168206305550413951111276058643457481021659548273905739170076312496695018792219262672978810782865354639721607266872817589823214743555222154664602340548280882040286896733209526126610682890550020611277180608521956468733977712416404733806480841463821143698975744703702389761803981670464350752875755487265844217854668048815655367238710969381729171199525722395126967893726428804619488729791534815752209345599227270696486420670887134256394906489074315224995483502224595551262115214258604082348674120098815162840957898331513480243899187144182971286651374834181659018051988252469569010863297677806077651674672772659912158185215371078212008528678905624578377132017748001588176437948237758450999311626683609962784832384468071137622518326470203263841612050871113671152487929552984338182325273042445111642224366450633866651381235714916828923072163155331210171231509372346676520438202265124232161670278339526272977887405994658036232867252233409011712131591352498978811422433044847305137789956247899251346545237359004386318149977353344273162445210878442786076674333291597979584494863589384382600812983616117150787156348613195335688303613332395769364909496149011136138805526635003046514303501206977111812709686950171142621398290444865357923519653697172439672029138523988006391365560970028788529344989334546583343563840785587843586483405884122212224423499792175881591631529263503282003588978721636230756583196125448777136805755299180433988634040261052576351051591945761376363234305775307713433370576373748345401627898419205060123183938172158139609933779045887527524827311175492555488116728485852198821520178192020956709886053455269081170843098543198607585108411977898947414454781163302067503043412567346548735185527870318024428493867786995096751822859955806341111303480583341636291706115399383228851205824874879788008699009394460603617484697601826966915895366454047522022904853521141491455556159396744420497771191135157624754532450380308652628933339829651525434205573237175774553912778916217267976383770272742051929772594317347549441803504491832439714384168038736412062557208838611366425818416401811868307965296016598229085473215144349941623404342551408492978934472311373083473099584117834261769688722620475874454740726390625977768145762872209593829537935382402595255926825701249951272960130551590246174790587767375489416935867631276322918934765294503639656308931695150050700072844285742971185383021121756354487109003355253845604065666433518685438091656768892681968885537355062262991924789016895891841526587485329974425330169209379395250317802448306342538101791946670361656450994786905344429178829602971926867449109071736385475122853152764828170746922041915217061120874211146694941121806122028690240019422838495241807734469355552234483878923437504017444669760678186185955672081827782902342571336739768153812235454072533397267558340809149526292389688511173150149565409925743892385431346855457233522288125398732679503015093839589200121235726878868975421650418472986925310239223103627211865859700180136143693926664602902299387959086624894621232369548644188284952945908743123884310604692623636552149186858079690758626054338071682855645391391506008598841462289245090739736917540414685105114190990367078512174898230485482912031167650258011003182624232983267939331833743206845964541869490814434813560072940354389054564369431185601185200547871111773440811626657270226135575130735494239978206086316858410073153555502129819081471387384814651286096448548603666953350523222709408937802016691205560082635109638742210581669486943201180291315700530069519224810175044541203520613697811126061755260597402760126111535018980569070546066051525039770129889575696767236765013147496530268738428120004195901304685438710604304400933028454816464872909811023285505654555938350886115324440226097360548596566008869086247131594453103254331782017344988050502717232420170701358542712550223516403166115848514500571805945205461572973869529165289590950571645540147563354968702408556810056931740331442521144334006418874070049568409035039425923134205008760475459289012139766311109312587354073306295393645126763106559690951536488737091126883017744714005503673821933151454218374207164124321597690845224375560119956806509350946215530328242170856309724929132731317823853126129937647113552626523776723507223569681944180607933718691180953299753050245107308217891510466050732086207884730832541660897836337698922058075439816100662111117584679270592275171800488797011447332681906970375062927339966349724367211556365796089043697557245812586612905175289191574844333803521878084192920261975034479862244071721535512066703859370391497746677040615581192448136060161917487457105082508840490083084473265441530423434541909753518700168326440977842183062743670334992870792265654419657181617185080300852283517884526181416761919560234954262938027093991904894898959561324388893052610558792354280393997504610896584724428564379717798913904501168560662318376737884071621891968551300322693482431617568724823681515387102103174339669614068512399249169818205013244104416085168290488469170541113416602290660618819372382016917911562680507200057889587514994561917092631690546133327880765949460471959960860780984776253765836520030854234080009213046882650802190066007828725051675494064856797593223038610921828527846775823980381806409430082763904769459830022804760632409715115494831219891205297666799095775198447273119843208871173172583924020827268017624360630212874433049265424004790743101280674102504923365030987385613521736886020664135734662933942108160' ) ; - -test( macro , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' , '9876543210' , '3034462179416604768793688956686552932355483365567839449252227083183612930411675701672437624008790570306116707317632272299415570805602889919853107397807785939521235637029831435139442582424582822673499884042396806023515370909434665906228003792919920737748992626049234384939867264094174145421920212378052075282420321655463859897029445221031920927399384206898952813199756808003803389522479326277487573273520665878746716528424522937408546413240193345511993738935410450920748341424611430006528617996510274560607681728175709327989067138885973917233086233454258471176335810153271454390497457920768269050812574589913596378168576578263709928736152143400626284338605649393436789570909976181404363379385203095347694012659761209173194850029890736589802647263427792831538376124035256873493548524429690911549898999054051247537896859770051687326962749295071154962738731518764985250685605884451488894789511831972599871489759543191907357753687342581964687426509714228973643155184428634490693343767794470831836310450171591453479355200904627896246883088571954216024258214050351305060310185515837154493655284351670109787396823490014749396086728596489188609880775089166057168311975101209118773255570345201148439116129062414905861755933812586871015303200674011611691361103520472350898780196518255981772735583036441430919264433662846429383445548364978110690140194233636355499273336713762102979945250948153205612441312899856255872259257762589238542271314935442485846637248061802283856488828997500202367471674080877893474253037346403931107563902051561303370800311637562883532455362163294786268913778981380077303036454369870974076074030681051904423429011715190892283090967895205149180496498652558186877260407513734468770225554119226661051278724991572238199449712804204754436056453578919474153409502892603154395956263663830820969545545846506509687298367417521786739150801943908071497213005999287096524968144567968947358605677900406511484274777623899536030097973275265564547027636354406687843811760284848941149182824113445755793538444137696935914356647989288714556705938157522206852623453565222965885779993400409643832233573545494751767210762977039510278899090183869764144726206843019390751797422138270482280620557853440598749858002242336835882610138152216514775269679789293296590323404714526525932361940987997238932546156770224647349624805065129417416622765948675363781475269901660278923000182555734456711052921430228662517099556273643785462735679777170323779745069518958467328750163264090741133213892533811046332123736616041786015409365745163308759987518821371656775621352482002688979815214803382449858977280343363671724364166067690931326790950937420100884259997492212066158091842657776495617660663726516665886137209711304431393951278425938087866700981563347996749043504607786686746007871063171442551786855155223221388592122897599578280734130970673774245483227395314987709899448290429664676823182267128701019534498321485626084909344727481580375518850494435334341374548550200541518471809878923967751707518148732403734616392165430840195695140983662891186791979280141574598311205016056200507967150107382019021868759224021885129692758887871760085613246714801803827829655205202659066428000120456685168479748759321765628310271027596041733983185311793373906546161938771430903652785366941848187193292582400466352887232229381396429217614962510098879470532951019369837463799769876507309080803178774035534114629582932704347336580764001937491832544090452097831207797788384941866158932653533304242981952749460606924504764586103477323660308312884019547888148041876583544055433406402255294648843801771332183859777422220083722191191808090704336941594219851240092187344419055351025683726105152704264961146614865111584379338013099471513672012388469983099325835088521048401153334226471830257049752613792482565727916252124386145574791182796443481077888156226542478103412794167092405614715030590158983642024239590714762959876016426907833038814612529658411559049665331049914710699503025249898330933089783870957352786871103207658840685311617891319876141830028782024538089997287264121310638422123143148905684291747095893809551640578061043802823200756521502771461042725754850966180314328103317735753040648732005596705851299358469210308863070972220328587025233028374636381374338852760509757785947454767672672364970388379727693207999940436091937380601416629057314176237351864292413766865729516893742270141816385608881799476665938195197406001643199815674127122372831403189120911928091495969730574724834407588919556467169088289708087857122838449198090816583091301876316222665835853432113994712473456346125669809826986519834714593458034311946715854339587149164120678977112933851484040303418757151998615877618244606281895259135419808665914430980320980464657138182343618121011231352722920310617484823585898199219907117514658746147387234279194184733938134771984109826991653921347469749517969770376566558131051841097631936196317691369813894888165692117453692194819325408333760441467007196417882551054413512832958058683268770053804316551936743539873741623936469673882006997938770776445239298330496898179016479117355737033515005325018671271377745721487899264921123889131690338228966851554612846570352251931133072822495179677834318374670644802125021195582766954710410497472301944267922630389894582831761624984885563988524603218794785120141688601275043884399181716184004289391616192820222580138779206826172481131165641386741048950896677688083222532671107416722929968552030142073565706541380270120750973300092199279215234027169855467790015855704705136502531781184133051183067650766022323894690930782351740723382201019891777580382226214345122650479034587170943175943675148314060008177882873950801581516909768181289160597156894690977522623263385891414471742759862037336443926832101104985210693848965899232110006146541632264767573000917552276020117743384167141769215488129436668688414302134986402246681738467469880814464109161078534548214961884018588228574170592853224010230598268410258445694770273887842217147278493674455667092445774836406464520464084020538803772301235865083355130491192088357611567757596641540109991242436195816366693184335513702707724425305939680486045573379977662943775712221261051881210413226075494066414815615935531083256037626718819255333188164311348180406800371059908204728125031358757680127017908342932185906662948102168656879728572667754845354540763925166101032844364825863140306593898967115454967964325600606073668317126555171997994415111705823843330882917313094812253225977941184403394646259137899616839673755594239057835826223737017452396127653019152926302408011643193291820139911780068276251011496120027184808922388024345440269734898633534767847722946928102975603296241409532560009774935886206493976744524043932311445329021469578424153066784285951946560850398362973333633975051631530064649658523495941250467965870448008200193345915160119862277291064462870784738623933176665721972872448188257282844998801412952252553056963667421418490960341395805319814683825452367276341130683559593681164013025687852902749950016658228632710711788555413308666302983417482029905718955216288166844271594539353912593506685440497176923861961053448871835632877645498090896809969358944024675377734743148722053729698869874656276194393516299794712440668995405360049935764971280859397716392736114856527178103931413907446822975939266021152608717479336608417749216539557700807146648324091763279708069825334480375212911788109174483054815143226814277235554182983081550382212916821961799588187917992951866804472031336723966997512444125837301300772796294666370310381308449848210171302694435117530979900264803620137613045587575109355039361113644243517770236336754369701146254788204194404071137673624560895799911762931653949629328889508633107094070366891782192972473312399086695263698973309746409367132645596702890517307274691490325263839111521047100879962843752869013532305035945191586408856877238142223690611519163710983116072869676079059784317160053083292601357293285090487702404742481981272425232845950849125484358802486594368783685889200191678257410718591236665489429746296656001219961786109266121437788979095434484576476963477038904854609239757628726782551604763876946894825347485356284030123606598233446876221692520145432663097571822619543009582048527988017458163209723848962822114193653320791901714640820351389180707618830373811165086649387648760355995165589603149431817370598042157409412986078736340007922666439335243131252662605695037835605701754100212577678909264897402867138873653868570657158259651246271746381050781528703794116690268510691429174041531364582111545306904264356970899109004730523917283051088669915722920644856076402061865749539753730183606613012933133523220344184825914671287764258738470256956854088324450786022327925850224665391273085000123404609607863595153311608011964219618582587101144363979713629628270857552113507613673932448408988742012271427645224528436825158868638202476237297061435471537960882853307976918927116130362284716918566891041512175445497950767339130585256658762393302867340150023204278994037288984001027415581005541327670294384397045082819373156826371991028041543654303320944869103591939822608288936448988391394083958276775310984217759320516889601115954986371788098158193147397319472188337808618311572633653166291109625007208277523596860294170632274814511985047275508053339285984256600780406473392632279649753931463040461899654021667312487635239518020480030629364368305620876510077252377190346784429959028781870776764625075076219416470999708516127057653480399568943981198581194989162418370603103007845648584611368999456470407483858760325229817268702847397806118556913085203241593951902469068070368786940654225623046371435908450927842883211379298788305774211184695527163957798182011219975337200952182731079837141211009477088301957006325285090081380509134820424594025321522349064325858854973846800738571159043041686478074305830396203335338435178223399861607084808647271788883377384988083203609465816390797873380509528357425841739988599712354919209403574008951486225917040008740726530753190176714693583684081082109687314092490944692007671018497798135553122959868054615258849286374657146709373499903301055183915719284185306404508927095410283203989496679656366579461152388314216039814979928627330929196572718418013990821084374810749120097909831812177111866132691388578828542668640599208499555559567032051440861696015887831760167574186032747392282381032605006606678235505109856686964233629331929620828621049385457531309328274663560437308200187406907158150255409023072658887092687009766818866021637172141419297270170600959969215768216283359101034825342899794703914765968325575383815562443809024091008529960321186680828702188059946547801045607147057516307210671117057270287072680677961794548030580823890452258015136501888344980716576358556366050111947960650721591573375198597007994378680374382210738969097133582454693717684103310409946377980734590388513140660723685756369572879011134665660271945659058492717632779531151779937899242428380994844264585629896646946019844773037746167963139337837330234642032393745141304309479229774229871356584319351036761257193851378511095897316083674484577979437330073546491695642500407263442320836902439205893980259897099320165511751000858301783509417257414704963086600123213398217960280110977738554370171773075685126127101053679582337179205713400976427071379600379875592602670378790882842239041118279439552119034301246852039194814998529057552310457742719194254618234425657020189750183504188390689224724139680231233397514609308138947774730137285777528688649958998999490651931300660634665618139302256834658031069388683334880292106238038256074420379159116898285862501690019505729156329995229205214415119153885065863189923571683271579246490859192972592180723085227177124831978277213329710237601846291676593134840235986556422357175708824634046853925934123719195552507343228428964613908514429340456595496255803928665651013176589154126562080276695801698271827611895817270757189556378505796994644342237337976200895677667192544372618125566010698414208558893096557359159665568927281820796491963526833429728555956696567310247654408195377369305284836275997279437505408231085596840494538892048663241014328247260168206305550413951111276058643457481021659548273905739170076312496695018792219262672978810782865354639721607266872817589823214743555222154664602340548280882040286896733209526126610682890550020611277180608521956468733977712416404733806480841463821143698975744703702389761803981670464350752875755487265844217854668048815655367238710969381729171199525722395126967893726428804619488729791534815752209345599227270696486420670887134256394906489074315224995483502224595551262115214258604082348674120098815162840957898331513480243899187144182971286651374834181659018051988252469569010863297677806077651674672772659912158185215371078212008528678905624578377132017748001588176437948237758450999311626683609962784832384468071137622518326470203263841612050871113671152487929552984338182325273042445111642224366450633866651381235714916828923072163155331210171231509372346676520438202265124232161670278339526272977887405994658036232867252233409011712131591352498978811422433044847305137789956247899251346545237359004386318149977353344273162445210878442786076674333291597979584494863589384382600812983616117150787156348613195335688303613332395769364909496149011136138805526635003046514303501206977111812709686950171142621398290444865357923519653697172439672029138523988006391365560970028788529344989334546583343563840785587843586483405884122212224423499792175881591631529263503282003588978721636230756583196125448777136805755299180433988634040261052576351051591945761376363234305775307713433370576373748345401627898419205060123183938172158139609933779045887527524827311175492555488116728485852198821520178192020956709886053455269081170843098543198607585108411977898947414454781163302067503043412567346548735185527870318024428493867786995096751822859955806341111303480583341636291706115399383228851205824874879788008699009394460603617484697601826966915895366454047522022904853521141491455556159396744420497771191135157624754532450380308652628933339829651525434205573237175774553912778916217267976383770272742051929772594317347549441803504491832439714384168038736412062557208838611366425818416401811868307965296016598229085473215144349941623404342551408492978934472311373083473099584117834261769688722620475874454740726390625977768145762872209593829537935382402595255926825701249951272960130551590246174790587767375489416935867631276322918934765294503639656308931695150050700072844285742971185383021121756354487109003355253845604065666433518685438091656768892681968885537355062262991924789016895891841526587485329974425330169209379395250317802448306342538101791946670361656450994786905344429178829602971926867449109071736385475122853152764828170746922041915217061120874211146694941121806122028690240019422838495241807734469355552234483878923437504017444669760678186185955672081827782902342571336739768153812235454072533397267558340809149526292389688511173150149565409925743892385431346855457233522288125398732679503015093839589200121235726878868975421650418472986925310239223103627211865859700180136143693926664602902299387959086624894621232369548644188284952945908743123884310604692623636552149186858079690758626054338071682855645391391506008598841462289245090739736917540414685105114190990367078512174898230485482912031167650258011003182624232983267939331833743206845964541869490814434813560072940354389054564369431185601185200547871111773440811626657270226135575130735494239978206086316858410073153555502129819081471387384814651286096448548603666953350523222709408937802016691205560082635109638742210581669486943201180291315700530069519224810175044541203520613697811126061755260597402760126111535018980569070546066051525039770129889575696767236765013147496530268738428120004195901304685438710604304400933028454816464872909811023285505654555938350886115324440226097360548596566008869086247131594453103254331782017344988050502717232420170701358542712550223516403166115848514500571805945205461572973869529165289590950571645540147563354968702408556810056931740331442521144334006418874070049568409035039425923134205008760475459289012139766311109312587354073306295393645126763106559690951536488737091126883017744714005503673821933151454218374207164124321597690845224375560119956806509350946215530328242170856309724929132731317823853126129937647113552626523776723507223569681944180607933718691180953299753050245107308217891510466050732086207884730832541660897836337698922058075439816100662111117584679270592275171800488797011447332681906970375062927339966349724367211556365796089043697557245812586612905175289191574844333803521878084192920261975034479862244071721535512066703859370391497746677040615581192448136060161917487457105082508840490083084473265441530423434541909753518700168326440977842183062743670334992870792265654419657181617185080300852283517884526181416761919560234954262938027093991904894898959561324388893052610558792354280393997504610896584724428564379717798913904501168560662318376737884071621891968551300322693482431617568724823681515387102103174339669614068512399249169818205013244104416085168290488469170541113416602290660618819372382016917911562680507200057889587514994561917092631690546133327880765949460471959960860780984776253765836520030854234080009213046882650802190066007828725051675494064856797593223038610921828527846775823980381806409430082763904769459830022804760632409715115494831219891205297666799095775198447273119843208871173172583924020827268017624360630212874433049265424004790743101280674102504923365030987385613521736886020664135734662933942108160' ) ; diff --git a/test/src/integer/arithmetic/muln.js b/test/src/integer/arithmetic/muln.js new file mode 100644 index 0000000..cbeb57b --- /dev/null +++ b/test/src/integer/arithmetic/muln.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , muln } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = muln( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `muln(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , -1 , '-1' ) ; +test( macro , '-1' , -1 , '1' ) ; +test( macro , '1' , 3 , '3' ) ; +test( macro , '-1' , 3 , '-3' ) ; +test( macro , '1' , -3 , '-3' ) ; +test( macro , '-1' , -3 , '3' ) ; +test( macro , '1' , 7 , '7' ) ; +test( macro , '-1' , 7 , '-7' ) ; +test( macro , '1' , -7 , '-7' ) ; +test( macro , '-1' , -7 , '7' ) ; +test( macro , '1' , 9 , '9' ) ; +test( macro , '-1' , 9 , '-9' ) ; +test( macro , '1' , -9 , '-9' ) ; +test( macro , '-1' , -9 , '9' ) ; +test( macro , '1' , 11 , '11' ) ; +test( macro , '-1' , 11 , '-11' ) ; +test( macro , '1' , -11 , '-11' ) ; +test( macro , '-1' , -11 , '11' ) ; +test( macro , '1' , 17 , '17' ) ; +test( macro , '-1' , 17 , '-17' ) ; +test( macro , '1' , -17 , '-17' ) ; +test( macro , '-1' , -17 , '17' ) ; +test( macro , '1' , 22 , '22' ) ; +test( macro , '-1' , 22 , '-22' ) ; +test( macro , '1' , -22 , '-22' ) ; +test( macro , '-1' , -22 , '22' ) ; +test( macro , '1' , 24 , '24' ) ; +test( macro , '-1' , 24 , '-24' ) ; +test( macro , '1' , -24 , '-24' ) ; +test( macro , '-1' , -24 , '24' ) ; +test( macro , '1' , 27 , '27' ) ; +test( macro , '-1' , 27 , '-27' ) ; +test( macro , '1' , -27 , '-27' ) ; +test( macro , '-1' , -27 , '27' ) ; +test( macro , '1' , 29 , '29' ) ; +test( macro , '-1' , 29 , '-29' ) ; +test( macro , '1' , -29 , '-29' ) ; +test( macro , '-1' , -29 , '29' ) ; +test( macro , '1' , 1234 , '1234' ) ; +test( macro , '-1' , 1234 , '-1234' ) ; +test( macro , '1' , -1234 , '-1234' ) ; +test( macro , '-1' , -1234 , '1234' ) ; +test( macro , '1' , 5678 , '5678' ) ; +test( macro , '-1' , 5678 , '-5678' ) ; +test( macro , '1' , -5678 , '-5678' ) ; +test( macro , '-1' , -5678 , '5678' ) ; +test( macro , '1' , 1073741824 , '1073741824' ) ; +test( macro , '-1' , 1073741824 , '-1073741824' ) ; +test( macro , '1' , -1073741824 , '-1073741824' ) ; +test( macro , '-1' , -1073741824 , '1073741824' ) ; +test( macro , '1' , 51676101935731 , '51676101935731' ) ; +test( macro , '-1' , 51676101935731 , '-51676101935731' ) ; +test( macro , '1' , -51676101935731 , '-51676101935731' ) ; +test( macro , '-1' , -51676101935731 , '51676101935731' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , -1 , '-3' ) ; +test( macro , '-3' , -1 , '3' ) ; +test( macro , '3' , 3 , '9' ) ; +test( macro , '-3' , 3 , '-9' ) ; +test( macro , '3' , -3 , '-9' ) ; +test( macro , '-3' , -3 , '9' ) ; +test( macro , '3' , 7 , '21' ) ; +test( macro , '-3' , 7 , '-21' ) ; +test( macro , '3' , -7 , '-21' ) ; +test( macro , '-3' , -7 , '21' ) ; +test( macro , '3' , 9 , '27' ) ; +test( macro , '-3' , 9 , '-27' ) ; +test( macro , '3' , -9 , '-27' ) ; +test( macro , '-3' , -9 , '27' ) ; +test( macro , '3' , 11 , '33' ) ; +test( macro , '-3' , 11 , '-33' ) ; +test( macro , '3' , -11 , '-33' ) ; +test( macro , '-3' , -11 , '33' ) ; +test( macro , '3' , 17 , '51' ) ; +test( macro , '-3' , 17 , '-51' ) ; +test( macro , '3' , -17 , '-51' ) ; +test( macro , '-3' , -17 , '51' ) ; +test( macro , '3' , 22 , '66' ) ; +test( macro , '-3' , 22 , '-66' ) ; +test( macro , '3' , -22 , '-66' ) ; +test( macro , '-3' , -22 , '66' ) ; +test( macro , '3' , 24 , '72' ) ; +test( macro , '-3' , 24 , '-72' ) ; +test( macro , '3' , -24 , '-72' ) ; +test( macro , '-3' , -24 , '72' ) ; +test( macro , '3' , 27 , '81' ) ; +test( macro , '-3' , 27 , '-81' ) ; +test( macro , '3' , -27 , '-81' ) ; +test( macro , '-3' , -27 , '81' ) ; +test( macro , '3' , 29 , '87' ) ; +test( macro , '-3' , 29 , '-87' ) ; +test( macro , '3' , -29 , '-87' ) ; +test( macro , '-3' , -29 , '87' ) ; +test( macro , '3' , 1234 , '3702' ) ; +test( macro , '-3' , 1234 , '-3702' ) ; +test( macro , '3' , -1234 , '-3702' ) ; +test( macro , '-3' , -1234 , '3702' ) ; +test( macro , '3' , 5678 , '17034' ) ; +test( macro , '-3' , 5678 , '-17034' ) ; +test( macro , '3' , -5678 , '-17034' ) ; +test( macro , '-3' , -5678 , '17034' ) ; +test( macro , '3' , 1073741824 , '3221225472' ) ; +test( macro , '-3' , 1073741824 , '-3221225472' ) ; +test( macro , '3' , -1073741824 , '-3221225472' ) ; +test( macro , '-3' , -1073741824 , '3221225472' ) ; +test( macro , '3' , 51676101935731 , '155028305807193' ) ; +test( macro , '-3' , 51676101935731 , '-155028305807193' ) ; +test( macro , '3' , -51676101935731 , '-155028305807193' ) ; +test( macro , '-3' , -51676101935731 , '155028305807193' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , -1 , '-7' ) ; +test( macro , '-7' , -1 , '7' ) ; +test( macro , '7' , 3 , '21' ) ; +test( macro , '-7' , 3 , '-21' ) ; +test( macro , '7' , -3 , '-21' ) ; +test( macro , '-7' , -3 , '21' ) ; +test( macro , '7' , 7 , '49' ) ; +test( macro , '-7' , 7 , '-49' ) ; +test( macro , '7' , -7 , '-49' ) ; +test( macro , '-7' , -7 , '49' ) ; +test( macro , '7' , 9 , '63' ) ; +test( macro , '-7' , 9 , '-63' ) ; +test( macro , '7' , -9 , '-63' ) ; +test( macro , '-7' , -9 , '63' ) ; +test( macro , '7' , 11 , '77' ) ; +test( macro , '-7' , 11 , '-77' ) ; +test( macro , '7' , -11 , '-77' ) ; +test( macro , '-7' , -11 , '77' ) ; +test( macro , '7' , 17 , '119' ) ; +test( macro , '-7' , 17 , '-119' ) ; +test( macro , '7' , -17 , '-119' ) ; +test( macro , '-7' , -17 , '119' ) ; +test( macro , '7' , 22 , '154' ) ; +test( macro , '-7' , 22 , '-154' ) ; +test( macro , '7' , -22 , '-154' ) ; +test( macro , '-7' , -22 , '154' ) ; +test( macro , '7' , 24 , '168' ) ; +test( macro , '-7' , 24 , '-168' ) ; +test( macro , '7' , -24 , '-168' ) ; +test( macro , '-7' , -24 , '168' ) ; +test( macro , '7' , 27 , '189' ) ; +test( macro , '-7' , 27 , '-189' ) ; +test( macro , '7' , -27 , '-189' ) ; +test( macro , '-7' , -27 , '189' ) ; +test( macro , '7' , 29 , '203' ) ; +test( macro , '-7' , 29 , '-203' ) ; +test( macro , '7' , -29 , '-203' ) ; +test( macro , '-7' , -29 , '203' ) ; +test( macro , '7' , 1234 , '8638' ) ; +test( macro , '-7' , 1234 , '-8638' ) ; +test( macro , '7' , -1234 , '-8638' ) ; +test( macro , '-7' , -1234 , '8638' ) ; +test( macro , '7' , 5678 , '39746' ) ; +test( macro , '-7' , 5678 , '-39746' ) ; +test( macro , '7' , -5678 , '-39746' ) ; +test( macro , '-7' , -5678 , '39746' ) ; +test( macro , '7' , 1073741824 , '7516192768' ) ; +test( macro , '-7' , 1073741824 , '-7516192768' ) ; +test( macro , '7' , -1073741824 , '-7516192768' ) ; +test( macro , '-7' , -1073741824 , '7516192768' ) ; +test( macro , '7' , 51676101935731 , '361732713550117' ) ; +test( macro , '-7' , 51676101935731 , '-361732713550117' ) ; +test( macro , '7' , -51676101935731 , '-361732713550117' ) ; +test( macro , '-7' , -51676101935731 , '361732713550117' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , -1 , '-9' ) ; +test( macro , '-9' , -1 , '9' ) ; +test( macro , '9' , 3 , '27' ) ; +test( macro , '-9' , 3 , '-27' ) ; +test( macro , '9' , -3 , '-27' ) ; +test( macro , '-9' , -3 , '27' ) ; +test( macro , '9' , 7 , '63' ) ; +test( macro , '-9' , 7 , '-63' ) ; +test( macro , '9' , -7 , '-63' ) ; +test( macro , '-9' , -7 , '63' ) ; +test( macro , '9' , 9 , '81' ) ; +test( macro , '-9' , 9 , '-81' ) ; +test( macro , '9' , -9 , '-81' ) ; +test( macro , '-9' , -9 , '81' ) ; +test( macro , '9' , 11 , '99' ) ; +test( macro , '-9' , 11 , '-99' ) ; +test( macro , '9' , -11 , '-99' ) ; +test( macro , '-9' , -11 , '99' ) ; +test( macro , '9' , 17 , '153' ) ; +test( macro , '-9' , 17 , '-153' ) ; +test( macro , '9' , -17 , '-153' ) ; +test( macro , '-9' , -17 , '153' ) ; +test( macro , '9' , 22 , '198' ) ; +test( macro , '-9' , 22 , '-198' ) ; +test( macro , '9' , -22 , '-198' ) ; +test( macro , '-9' , -22 , '198' ) ; +test( macro , '9' , 24 , '216' ) ; +test( macro , '-9' , 24 , '-216' ) ; +test( macro , '9' , -24 , '-216' ) ; +test( macro , '-9' , -24 , '216' ) ; +test( macro , '9' , 27 , '243' ) ; +test( macro , '-9' , 27 , '-243' ) ; +test( macro , '9' , -27 , '-243' ) ; +test( macro , '-9' , -27 , '243' ) ; +test( macro , '9' , 29 , '261' ) ; +test( macro , '-9' , 29 , '-261' ) ; +test( macro , '9' , -29 , '-261' ) ; +test( macro , '-9' , -29 , '261' ) ; +test( macro , '9' , 1234 , '11106' ) ; +test( macro , '-9' , 1234 , '-11106' ) ; +test( macro , '9' , -1234 , '-11106' ) ; +test( macro , '-9' , -1234 , '11106' ) ; +test( macro , '9' , 5678 , '51102' ) ; +test( macro , '-9' , 5678 , '-51102' ) ; +test( macro , '9' , -5678 , '-51102' ) ; +test( macro , '-9' , -5678 , '51102' ) ; +test( macro , '9' , 1073741824 , '9663676416' ) ; +test( macro , '-9' , 1073741824 , '-9663676416' ) ; +test( macro , '9' , -1073741824 , '-9663676416' ) ; +test( macro , '-9' , -1073741824 , '9663676416' ) ; +test( macro , '9' , 51676101935731 , '465084917421579' ) ; +test( macro , '-9' , 51676101935731 , '-465084917421579' ) ; +test( macro , '9' , -51676101935731 , '-465084917421579' ) ; +test( macro , '-9' , -51676101935731 , '465084917421579' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , -1 , '-11' ) ; +test( macro , '-11' , -1 , '11' ) ; +test( macro , '11' , 3 , '33' ) ; +test( macro , '-11' , 3 , '-33' ) ; +test( macro , '11' , -3 , '-33' ) ; +test( macro , '-11' , -3 , '33' ) ; +test( macro , '11' , 7 , '77' ) ; +test( macro , '-11' , 7 , '-77' ) ; +test( macro , '11' , -7 , '-77' ) ; +test( macro , '-11' , -7 , '77' ) ; +test( macro , '11' , 9 , '99' ) ; +test( macro , '-11' , 9 , '-99' ) ; +test( macro , '11' , -9 , '-99' ) ; +test( macro , '-11' , -9 , '99' ) ; +test( macro , '11' , 11 , '121' ) ; +test( macro , '-11' , 11 , '-121' ) ; +test( macro , '11' , -11 , '-121' ) ; +test( macro , '-11' , -11 , '121' ) ; +test( macro , '11' , 17 , '187' ) ; +test( macro , '-11' , 17 , '-187' ) ; +test( macro , '11' , -17 , '-187' ) ; +test( macro , '-11' , -17 , '187' ) ; +test( macro , '11' , 22 , '242' ) ; +test( macro , '-11' , 22 , '-242' ) ; +test( macro , '11' , -22 , '-242' ) ; +test( macro , '-11' , -22 , '242' ) ; +test( macro , '11' , 24 , '264' ) ; +test( macro , '-11' , 24 , '-264' ) ; +test( macro , '11' , -24 , '-264' ) ; +test( macro , '-11' , -24 , '264' ) ; +test( macro , '11' , 27 , '297' ) ; +test( macro , '-11' , 27 , '-297' ) ; +test( macro , '11' , -27 , '-297' ) ; +test( macro , '-11' , -27 , '297' ) ; +test( macro , '11' , 29 , '319' ) ; +test( macro , '-11' , 29 , '-319' ) ; +test( macro , '11' , -29 , '-319' ) ; +test( macro , '-11' , -29 , '319' ) ; +test( macro , '11' , 1234 , '13574' ) ; +test( macro , '-11' , 1234 , '-13574' ) ; +test( macro , '11' , -1234 , '-13574' ) ; +test( macro , '-11' , -1234 , '13574' ) ; +test( macro , '11' , 5678 , '62458' ) ; +test( macro , '-11' , 5678 , '-62458' ) ; +test( macro , '11' , -5678 , '-62458' ) ; +test( macro , '-11' , -5678 , '62458' ) ; +test( macro , '11' , 1073741824 , '11811160064' ) ; +test( macro , '-11' , 1073741824 , '-11811160064' ) ; +test( macro , '11' , -1073741824 , '-11811160064' ) ; +test( macro , '-11' , -1073741824 , '11811160064' ) ; +test( macro , '11' , 51676101935731 , '568437121293041' ) ; +test( macro , '-11' , 51676101935731 , '-568437121293041' ) ; +test( macro , '11' , -51676101935731 , '-568437121293041' ) ; +test( macro , '-11' , -51676101935731 , '568437121293041' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , -1 , '-17' ) ; +test( macro , '-17' , -1 , '17' ) ; +test( macro , '17' , 3 , '51' ) ; +test( macro , '-17' , 3 , '-51' ) ; +test( macro , '17' , -3 , '-51' ) ; +test( macro , '-17' , -3 , '51' ) ; +test( macro , '17' , 7 , '119' ) ; +test( macro , '-17' , 7 , '-119' ) ; +test( macro , '17' , -7 , '-119' ) ; +test( macro , '-17' , -7 , '119' ) ; +test( macro , '17' , 9 , '153' ) ; +test( macro , '-17' , 9 , '-153' ) ; +test( macro , '17' , -9 , '-153' ) ; +test( macro , '-17' , -9 , '153' ) ; +test( macro , '17' , 11 , '187' ) ; +test( macro , '-17' , 11 , '-187' ) ; +test( macro , '17' , -11 , '-187' ) ; +test( macro , '-17' , -11 , '187' ) ; +test( macro , '17' , 17 , '289' ) ; +test( macro , '-17' , 17 , '-289' ) ; +test( macro , '17' , -17 , '-289' ) ; +test( macro , '-17' , -17 , '289' ) ; +test( macro , '17' , 22 , '374' ) ; +test( macro , '-17' , 22 , '-374' ) ; +test( macro , '17' , -22 , '-374' ) ; +test( macro , '-17' , -22 , '374' ) ; +test( macro , '17' , 24 , '408' ) ; +test( macro , '-17' , 24 , '-408' ) ; +test( macro , '17' , -24 , '-408' ) ; +test( macro , '-17' , -24 , '408' ) ; +test( macro , '17' , 27 , '459' ) ; +test( macro , '-17' , 27 , '-459' ) ; +test( macro , '17' , -27 , '-459' ) ; +test( macro , '-17' , -27 , '459' ) ; +test( macro , '17' , 29 , '493' ) ; +test( macro , '-17' , 29 , '-493' ) ; +test( macro , '17' , -29 , '-493' ) ; +test( macro , '-17' , -29 , '493' ) ; +test( macro , '17' , 1234 , '20978' ) ; +test( macro , '-17' , 1234 , '-20978' ) ; +test( macro , '17' , -1234 , '-20978' ) ; +test( macro , '-17' , -1234 , '20978' ) ; +test( macro , '17' , 5678 , '96526' ) ; +test( macro , '-17' , 5678 , '-96526' ) ; +test( macro , '17' , -5678 , '-96526' ) ; +test( macro , '-17' , -5678 , '96526' ) ; +test( macro , '17' , 1073741824 , '18253611008' ) ; +test( macro , '-17' , 1073741824 , '-18253611008' ) ; +test( macro , '17' , -1073741824 , '-18253611008' ) ; +test( macro , '-17' , -1073741824 , '18253611008' ) ; +test( macro , '17' , 51676101935731 , '878493732907427' ) ; +test( macro , '-17' , 51676101935731 , '-878493732907427' ) ; +test( macro , '17' , -51676101935731 , '-878493732907427' ) ; +test( macro , '-17' , -51676101935731 , '878493732907427' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , -1 , '-22' ) ; +test( macro , '-22' , -1 , '22' ) ; +test( macro , '22' , 3 , '66' ) ; +test( macro , '-22' , 3 , '-66' ) ; +test( macro , '22' , -3 , '-66' ) ; +test( macro , '-22' , -3 , '66' ) ; +test( macro , '22' , 7 , '154' ) ; +test( macro , '-22' , 7 , '-154' ) ; +test( macro , '22' , -7 , '-154' ) ; +test( macro , '-22' , -7 , '154' ) ; +test( macro , '22' , 9 , '198' ) ; +test( macro , '-22' , 9 , '-198' ) ; +test( macro , '22' , -9 , '-198' ) ; +test( macro , '-22' , -9 , '198' ) ; +test( macro , '22' , 11 , '242' ) ; +test( macro , '-22' , 11 , '-242' ) ; +test( macro , '22' , -11 , '-242' ) ; +test( macro , '-22' , -11 , '242' ) ; +test( macro , '22' , 17 , '374' ) ; +test( macro , '-22' , 17 , '-374' ) ; +test( macro , '22' , -17 , '-374' ) ; +test( macro , '-22' , -17 , '374' ) ; +test( macro , '22' , 22 , '484' ) ; +test( macro , '-22' , 22 , '-484' ) ; +test( macro , '22' , -22 , '-484' ) ; +test( macro , '-22' , -22 , '484' ) ; +test( macro , '22' , 24 , '528' ) ; +test( macro , '-22' , 24 , '-528' ) ; +test( macro , '22' , -24 , '-528' ) ; +test( macro , '-22' , -24 , '528' ) ; +test( macro , '22' , 27 , '594' ) ; +test( macro , '-22' , 27 , '-594' ) ; +test( macro , '22' , -27 , '-594' ) ; +test( macro , '-22' , -27 , '594' ) ; +test( macro , '22' , 29 , '638' ) ; +test( macro , '-22' , 29 , '-638' ) ; +test( macro , '22' , -29 , '-638' ) ; +test( macro , '-22' , -29 , '638' ) ; +test( macro , '22' , 1234 , '27148' ) ; +test( macro , '-22' , 1234 , '-27148' ) ; +test( macro , '22' , -1234 , '-27148' ) ; +test( macro , '-22' , -1234 , '27148' ) ; +test( macro , '22' , 5678 , '124916' ) ; +test( macro , '-22' , 5678 , '-124916' ) ; +test( macro , '22' , -5678 , '-124916' ) ; +test( macro , '-22' , -5678 , '124916' ) ; +test( macro , '22' , 1073741824 , '23622320128' ) ; +test( macro , '-22' , 1073741824 , '-23622320128' ) ; +test( macro , '22' , -1073741824 , '-23622320128' ) ; +test( macro , '-22' , -1073741824 , '23622320128' ) ; +test( macro , '22' , 51676101935731 , '1136874242586082' ) ; +test( macro , '-22' , 51676101935731 , '-1136874242586082' ) ; +test( macro , '22' , -51676101935731 , '-1136874242586082' ) ; +test( macro , '-22' , -51676101935731 , '1136874242586082' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , -1 , '-24' ) ; +test( macro , '-24' , -1 , '24' ) ; +test( macro , '24' , 3 , '72' ) ; +test( macro , '-24' , 3 , '-72' ) ; +test( macro , '24' , -3 , '-72' ) ; +test( macro , '-24' , -3 , '72' ) ; +test( macro , '24' , 7 , '168' ) ; +test( macro , '-24' , 7 , '-168' ) ; +test( macro , '24' , -7 , '-168' ) ; +test( macro , '-24' , -7 , '168' ) ; +test( macro , '24' , 9 , '216' ) ; +test( macro , '-24' , 9 , '-216' ) ; +test( macro , '24' , -9 , '-216' ) ; +test( macro , '-24' , -9 , '216' ) ; +test( macro , '24' , 11 , '264' ) ; +test( macro , '-24' , 11 , '-264' ) ; +test( macro , '24' , -11 , '-264' ) ; +test( macro , '-24' , -11 , '264' ) ; +test( macro , '24' , 17 , '408' ) ; +test( macro , '-24' , 17 , '-408' ) ; +test( macro , '24' , -17 , '-408' ) ; +test( macro , '-24' , -17 , '408' ) ; +test( macro , '24' , 22 , '528' ) ; +test( macro , '-24' , 22 , '-528' ) ; +test( macro , '24' , -22 , '-528' ) ; +test( macro , '-24' , -22 , '528' ) ; +test( macro , '24' , 24 , '576' ) ; +test( macro , '-24' , 24 , '-576' ) ; +test( macro , '24' , -24 , '-576' ) ; +test( macro , '-24' , -24 , '576' ) ; +test( macro , '24' , 27 , '648' ) ; +test( macro , '-24' , 27 , '-648' ) ; +test( macro , '24' , -27 , '-648' ) ; +test( macro , '-24' , -27 , '648' ) ; +test( macro , '24' , 29 , '696' ) ; +test( macro , '-24' , 29 , '-696' ) ; +test( macro , '24' , -29 , '-696' ) ; +test( macro , '-24' , -29 , '696' ) ; +test( macro , '24' , 1234 , '29616' ) ; +test( macro , '-24' , 1234 , '-29616' ) ; +test( macro , '24' , -1234 , '-29616' ) ; +test( macro , '-24' , -1234 , '29616' ) ; +test( macro , '24' , 5678 , '136272' ) ; +test( macro , '-24' , 5678 , '-136272' ) ; +test( macro , '24' , -5678 , '-136272' ) ; +test( macro , '-24' , -5678 , '136272' ) ; +test( macro , '24' , 1073741824 , '25769803776' ) ; +test( macro , '-24' , 1073741824 , '-25769803776' ) ; +test( macro , '24' , -1073741824 , '-25769803776' ) ; +test( macro , '-24' , -1073741824 , '25769803776' ) ; +test( macro , '24' , 51676101935731 , '1240226446457544' ) ; +test( macro , '-24' , 51676101935731 , '-1240226446457544' ) ; +test( macro , '24' , -51676101935731 , '-1240226446457544' ) ; +test( macro , '-24' , -51676101935731 , '1240226446457544' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , -1 , '-27' ) ; +test( macro , '-27' , -1 , '27' ) ; +test( macro , '27' , 3 , '81' ) ; +test( macro , '-27' , 3 , '-81' ) ; +test( macro , '27' , -3 , '-81' ) ; +test( macro , '-27' , -3 , '81' ) ; +test( macro , '27' , 7 , '189' ) ; +test( macro , '-27' , 7 , '-189' ) ; +test( macro , '27' , -7 , '-189' ) ; +test( macro , '-27' , -7 , '189' ) ; +test( macro , '27' , 9 , '243' ) ; +test( macro , '-27' , 9 , '-243' ) ; +test( macro , '27' , -9 , '-243' ) ; +test( macro , '-27' , -9 , '243' ) ; +test( macro , '27' , 11 , '297' ) ; +test( macro , '-27' , 11 , '-297' ) ; +test( macro , '27' , -11 , '-297' ) ; +test( macro , '-27' , -11 , '297' ) ; +test( macro , '27' , 17 , '459' ) ; +test( macro , '-27' , 17 , '-459' ) ; +test( macro , '27' , -17 , '-459' ) ; +test( macro , '-27' , -17 , '459' ) ; +test( macro , '27' , 22 , '594' ) ; +test( macro , '-27' , 22 , '-594' ) ; +test( macro , '27' , -22 , '-594' ) ; +test( macro , '-27' , -22 , '594' ) ; +test( macro , '27' , 24 , '648' ) ; +test( macro , '-27' , 24 , '-648' ) ; +test( macro , '27' , -24 , '-648' ) ; +test( macro , '-27' , -24 , '648' ) ; +test( macro , '27' , 27 , '729' ) ; +test( macro , '-27' , 27 , '-729' ) ; +test( macro , '27' , -27 , '-729' ) ; +test( macro , '-27' , -27 , '729' ) ; +test( macro , '27' , 29 , '783' ) ; +test( macro , '-27' , 29 , '-783' ) ; +test( macro , '27' , -29 , '-783' ) ; +test( macro , '-27' , -29 , '783' ) ; +test( macro , '27' , 1234 , '33318' ) ; +test( macro , '-27' , 1234 , '-33318' ) ; +test( macro , '27' , -1234 , '-33318' ) ; +test( macro , '-27' , -1234 , '33318' ) ; +test( macro , '27' , 5678 , '153306' ) ; +test( macro , '-27' , 5678 , '-153306' ) ; +test( macro , '27' , -5678 , '-153306' ) ; +test( macro , '-27' , -5678 , '153306' ) ; +test( macro , '27' , 1073741824 , '28991029248' ) ; +test( macro , '-27' , 1073741824 , '-28991029248' ) ; +test( macro , '27' , -1073741824 , '-28991029248' ) ; +test( macro , '-27' , -1073741824 , '28991029248' ) ; +test( macro , '27' , 51676101935731 , '1395254752264737' ) ; +test( macro , '-27' , 51676101935731 , '-1395254752264737' ) ; +test( macro , '27' , -51676101935731 , '-1395254752264737' ) ; +test( macro , '-27' , -51676101935731 , '1395254752264737' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , -1 , '-29' ) ; +test( macro , '-29' , -1 , '29' ) ; +test( macro , '29' , 3 , '87' ) ; +test( macro , '-29' , 3 , '-87' ) ; +test( macro , '29' , -3 , '-87' ) ; +test( macro , '-29' , -3 , '87' ) ; +test( macro , '29' , 7 , '203' ) ; +test( macro , '-29' , 7 , '-203' ) ; +test( macro , '29' , -7 , '-203' ) ; +test( macro , '-29' , -7 , '203' ) ; +test( macro , '29' , 9 , '261' ) ; +test( macro , '-29' , 9 , '-261' ) ; +test( macro , '29' , -9 , '-261' ) ; +test( macro , '-29' , -9 , '261' ) ; +test( macro , '29' , 11 , '319' ) ; +test( macro , '-29' , 11 , '-319' ) ; +test( macro , '29' , -11 , '-319' ) ; +test( macro , '-29' , -11 , '319' ) ; +test( macro , '29' , 17 , '493' ) ; +test( macro , '-29' , 17 , '-493' ) ; +test( macro , '29' , -17 , '-493' ) ; +test( macro , '-29' , -17 , '493' ) ; +test( macro , '29' , 22 , '638' ) ; +test( macro , '-29' , 22 , '-638' ) ; +test( macro , '29' , -22 , '-638' ) ; +test( macro , '-29' , -22 , '638' ) ; +test( macro , '29' , 24 , '696' ) ; +test( macro , '-29' , 24 , '-696' ) ; +test( macro , '29' , -24 , '-696' ) ; +test( macro , '-29' , -24 , '696' ) ; +test( macro , '29' , 27 , '783' ) ; +test( macro , '-29' , 27 , '-783' ) ; +test( macro , '29' , -27 , '-783' ) ; +test( macro , '-29' , -27 , '783' ) ; +test( macro , '29' , 29 , '841' ) ; +test( macro , '-29' , 29 , '-841' ) ; +test( macro , '29' , -29 , '-841' ) ; +test( macro , '-29' , -29 , '841' ) ; +test( macro , '29' , 1234 , '35786' ) ; +test( macro , '-29' , 1234 , '-35786' ) ; +test( macro , '29' , -1234 , '-35786' ) ; +test( macro , '-29' , -1234 , '35786' ) ; +test( macro , '29' , 5678 , '164662' ) ; +test( macro , '-29' , 5678 , '-164662' ) ; +test( macro , '29' , -5678 , '-164662' ) ; +test( macro , '-29' , -5678 , '164662' ) ; +test( macro , '29' , 1073741824 , '31138512896' ) ; +test( macro , '-29' , 1073741824 , '-31138512896' ) ; +test( macro , '29' , -1073741824 , '-31138512896' ) ; +test( macro , '-29' , -1073741824 , '31138512896' ) ; +test( macro , '29' , 51676101935731 , '1498606956136199' ) ; +test( macro , '-29' , 51676101935731 , '-1498606956136199' ) ; +test( macro , '29' , -51676101935731 , '-1498606956136199' ) ; +test( macro , '-29' , -51676101935731 , '1498606956136199' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , -1 , '-1234' ) ; +test( macro , '-1234' , -1 , '1234' ) ; +test( macro , '1234' , 3 , '3702' ) ; +test( macro , '-1234' , 3 , '-3702' ) ; +test( macro , '1234' , -3 , '-3702' ) ; +test( macro , '-1234' , -3 , '3702' ) ; +test( macro , '1234' , 7 , '8638' ) ; +test( macro , '-1234' , 7 , '-8638' ) ; +test( macro , '1234' , -7 , '-8638' ) ; +test( macro , '-1234' , -7 , '8638' ) ; +test( macro , '1234' , 9 , '11106' ) ; +test( macro , '-1234' , 9 , '-11106' ) ; +test( macro , '1234' , -9 , '-11106' ) ; +test( macro , '-1234' , -9 , '11106' ) ; +test( macro , '1234' , 11 , '13574' ) ; +test( macro , '-1234' , 11 , '-13574' ) ; +test( macro , '1234' , -11 , '-13574' ) ; +test( macro , '-1234' , -11 , '13574' ) ; +test( macro , '1234' , 17 , '20978' ) ; +test( macro , '-1234' , 17 , '-20978' ) ; +test( macro , '1234' , -17 , '-20978' ) ; +test( macro , '-1234' , -17 , '20978' ) ; +test( macro , '1234' , 22 , '27148' ) ; +test( macro , '-1234' , 22 , '-27148' ) ; +test( macro , '1234' , -22 , '-27148' ) ; +test( macro , '-1234' , -22 , '27148' ) ; +test( macro , '1234' , 24 , '29616' ) ; +test( macro , '-1234' , 24 , '-29616' ) ; +test( macro , '1234' , -24 , '-29616' ) ; +test( macro , '-1234' , -24 , '29616' ) ; +test( macro , '1234' , 27 , '33318' ) ; +test( macro , '-1234' , 27 , '-33318' ) ; +test( macro , '1234' , -27 , '-33318' ) ; +test( macro , '-1234' , -27 , '33318' ) ; +test( macro , '1234' , 29 , '35786' ) ; +test( macro , '-1234' , 29 , '-35786' ) ; +test( macro , '1234' , -29 , '-35786' ) ; +test( macro , '-1234' , -29 , '35786' ) ; +test( macro , '1234' , 1234 , '1522756' ) ; +test( macro , '-1234' , 1234 , '-1522756' ) ; +test( macro , '1234' , -1234 , '-1522756' ) ; +test( macro , '-1234' , -1234 , '1522756' ) ; +test( macro , '1234' , 5678 , '7006652' ) ; +test( macro , '-1234' , 5678 , '-7006652' ) ; +test( macro , '1234' , -5678 , '-7006652' ) ; +test( macro , '-1234' , -5678 , '7006652' ) ; +test( macro , '1234' , 1073741824 , '1324997410816' ) ; +test( macro , '-1234' , 1073741824 , '-1324997410816' ) ; +test( macro , '1234' , -1073741824 , '-1324997410816' ) ; +test( macro , '-1234' , -1073741824 , '1324997410816' ) ; +test( macro , '1234' , 51676101935731 , '63768309788692054' ) ; +test( macro , '-1234' , 51676101935731 , '-63768309788692054' ) ; +test( macro , '1234' , -51676101935731 , '-63768309788692054' ) ; +test( macro , '-1234' , -51676101935731 , '63768309788692054' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , -1 , '-5678' ) ; +test( macro , '-5678' , -1 , '5678' ) ; +test( macro , '5678' , 3 , '17034' ) ; +test( macro , '-5678' , 3 , '-17034' ) ; +test( macro , '5678' , -3 , '-17034' ) ; +test( macro , '-5678' , -3 , '17034' ) ; +test( macro , '5678' , 7 , '39746' ) ; +test( macro , '-5678' , 7 , '-39746' ) ; +test( macro , '5678' , -7 , '-39746' ) ; +test( macro , '-5678' , -7 , '39746' ) ; +test( macro , '5678' , 9 , '51102' ) ; +test( macro , '-5678' , 9 , '-51102' ) ; +test( macro , '5678' , -9 , '-51102' ) ; +test( macro , '-5678' , -9 , '51102' ) ; +test( macro , '5678' , 11 , '62458' ) ; +test( macro , '-5678' , 11 , '-62458' ) ; +test( macro , '5678' , -11 , '-62458' ) ; +test( macro , '-5678' , -11 , '62458' ) ; +test( macro , '5678' , 17 , '96526' ) ; +test( macro , '-5678' , 17 , '-96526' ) ; +test( macro , '5678' , -17 , '-96526' ) ; +test( macro , '-5678' , -17 , '96526' ) ; +test( macro , '5678' , 22 , '124916' ) ; +test( macro , '-5678' , 22 , '-124916' ) ; +test( macro , '5678' , -22 , '-124916' ) ; +test( macro , '-5678' , -22 , '124916' ) ; +test( macro , '5678' , 24 , '136272' ) ; +test( macro , '-5678' , 24 , '-136272' ) ; +test( macro , '5678' , -24 , '-136272' ) ; +test( macro , '-5678' , -24 , '136272' ) ; +test( macro , '5678' , 27 , '153306' ) ; +test( macro , '-5678' , 27 , '-153306' ) ; +test( macro , '5678' , -27 , '-153306' ) ; +test( macro , '-5678' , -27 , '153306' ) ; +test( macro , '5678' , 29 , '164662' ) ; +test( macro , '-5678' , 29 , '-164662' ) ; +test( macro , '5678' , -29 , '-164662' ) ; +test( macro , '-5678' , -29 , '164662' ) ; +test( macro , '5678' , 1234 , '7006652' ) ; +test( macro , '-5678' , 1234 , '-7006652' ) ; +test( macro , '5678' , -1234 , '-7006652' ) ; +test( macro , '-5678' , -1234 , '7006652' ) ; +test( macro , '5678' , 5678 , '32239684' ) ; +test( macro , '-5678' , 5678 , '-32239684' ) ; +test( macro , '5678' , -5678 , '-32239684' ) ; +test( macro , '-5678' , -5678 , '32239684' ) ; +test( macro , '5678' , 1073741824 , '6096706076672' ) ; +test( macro , '-5678' , 1073741824 , '-6096706076672' ) ; +test( macro , '5678' , -1073741824 , '-6096706076672' ) ; +test( macro , '-5678' , -1073741824 , '6096706076672' ) ; +test( macro , '5678' , 51676101935731 , '293416906791080618' ) ; +test( macro , '-5678' , 51676101935731 , '-293416906791080618' ) ; +test( macro , '5678' , -51676101935731 , '-293416906791080618' ) ; +test( macro , '-5678' , -51676101935731 , '293416906791080618' ) ; +test( macro , '1073741824' , 1 , '1073741824' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' ) ; +test( macro , '1073741824' , -1 , '-1073741824' ) ; +test( macro , '-1073741824' , -1 , '1073741824' ) ; +test( macro , '1073741824' , 3 , '3221225472' ) ; +test( macro , '-1073741824' , 3 , '-3221225472' ) ; +test( macro , '1073741824' , -3 , '-3221225472' ) ; +test( macro , '-1073741824' , -3 , '3221225472' ) ; +test( macro , '1073741824' , 7 , '7516192768' ) ; +test( macro , '-1073741824' , 7 , '-7516192768' ) ; +test( macro , '1073741824' , -7 , '-7516192768' ) ; +test( macro , '-1073741824' , -7 , '7516192768' ) ; +test( macro , '1073741824' , 9 , '9663676416' ) ; +test( macro , '-1073741824' , 9 , '-9663676416' ) ; +test( macro , '1073741824' , -9 , '-9663676416' ) ; +test( macro , '-1073741824' , -9 , '9663676416' ) ; +test( macro , '1073741824' , 11 , '11811160064' ) ; +test( macro , '-1073741824' , 11 , '-11811160064' ) ; +test( macro , '1073741824' , -11 , '-11811160064' ) ; +test( macro , '-1073741824' , -11 , '11811160064' ) ; +test( macro , '1073741824' , 17 , '18253611008' ) ; +test( macro , '-1073741824' , 17 , '-18253611008' ) ; +test( macro , '1073741824' , -17 , '-18253611008' ) ; +test( macro , '-1073741824' , -17 , '18253611008' ) ; +test( macro , '1073741824' , 22 , '23622320128' ) ; +test( macro , '-1073741824' , 22 , '-23622320128' ) ; +test( macro , '1073741824' , -22 , '-23622320128' ) ; +test( macro , '-1073741824' , -22 , '23622320128' ) ; +test( macro , '1073741824' , 24 , '25769803776' ) ; +test( macro , '-1073741824' , 24 , '-25769803776' ) ; +test( macro , '1073741824' , -24 , '-25769803776' ) ; +test( macro , '-1073741824' , -24 , '25769803776' ) ; +test( macro , '1073741824' , 27 , '28991029248' ) ; +test( macro , '-1073741824' , 27 , '-28991029248' ) ; +test( macro , '1073741824' , -27 , '-28991029248' ) ; +test( macro , '-1073741824' , -27 , '28991029248' ) ; +test( macro , '1073741824' , 29 , '31138512896' ) ; +test( macro , '-1073741824' , 29 , '-31138512896' ) ; +test( macro , '1073741824' , -29 , '-31138512896' ) ; +test( macro , '-1073741824' , -29 , '31138512896' ) ; +test( macro , '1073741824' , 1234 , '1324997410816' ) ; +test( macro , '-1073741824' , 1234 , '-1324997410816' ) ; +test( macro , '1073741824' , -1234 , '-1324997410816' ) ; +test( macro , '-1073741824' , -1234 , '1324997410816' ) ; +test( macro , '1073741824' , 5678 , '6096706076672' ) ; +test( macro , '-1073741824' , 5678 , '-6096706076672' ) ; +test( macro , '1073741824' , -5678 , '-6096706076672' ) ; +test( macro , '-1073741824' , -5678 , '6096706076672' ) ; +test( macro , '1073741824' , 1073741824 , '1152921504606846976' ) ; +test( macro , '-1073741824' , 1073741824 , '-1152921504606846976' ) ; +test( macro , '1073741824' , -1073741824 , '-1152921504606846976' ) ; +test( macro , '-1073741824' , -1073741824 , '1152921504606846976' ) ; +test( macro , '1073741824' , 51676101935731 , '55486791949681734713344' ) ; +test( macro , '-1073741824' , 51676101935731 , '-55486791949681734713344' ) ; +test( macro , '1073741824' , -51676101935731 , '-55486791949681734713344' ) ; +test( macro , '-1073741824' , -51676101935731 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' ) ; +test( macro , '51676101935731' , 3 , '155028305807193' ) ; +test( macro , '-51676101935731' , 3 , '-155028305807193' ) ; +test( macro , '51676101935731' , -3 , '-155028305807193' ) ; +test( macro , '-51676101935731' , -3 , '155028305807193' ) ; +test( macro , '51676101935731' , 7 , '361732713550117' ) ; +test( macro , '-51676101935731' , 7 , '-361732713550117' ) ; +test( macro , '51676101935731' , -7 , '-361732713550117' ) ; +test( macro , '-51676101935731' , -7 , '361732713550117' ) ; +test( macro , '51676101935731' , 9 , '465084917421579' ) ; +test( macro , '-51676101935731' , 9 , '-465084917421579' ) ; +test( macro , '51676101935731' , -9 , '-465084917421579' ) ; +test( macro , '-51676101935731' , -9 , '465084917421579' ) ; +test( macro , '51676101935731' , 11 , '568437121293041' ) ; +test( macro , '-51676101935731' , 11 , '-568437121293041' ) ; +test( macro , '51676101935731' , -11 , '-568437121293041' ) ; +test( macro , '-51676101935731' , -11 , '568437121293041' ) ; +test( macro , '51676101935731' , 17 , '878493732907427' ) ; +test( macro , '-51676101935731' , 17 , '-878493732907427' ) ; +test( macro , '51676101935731' , -17 , '-878493732907427' ) ; +test( macro , '-51676101935731' , -17 , '878493732907427' ) ; +test( macro , '51676101935731' , 22 , '1136874242586082' ) ; +test( macro , '-51676101935731' , 22 , '-1136874242586082' ) ; +test( macro , '51676101935731' , -22 , '-1136874242586082' ) ; +test( macro , '-51676101935731' , -22 , '1136874242586082' ) ; +test( macro , '51676101935731' , 24 , '1240226446457544' ) ; +test( macro , '-51676101935731' , 24 , '-1240226446457544' ) ; +test( macro , '51676101935731' , -24 , '-1240226446457544' ) ; +test( macro , '-51676101935731' , -24 , '1240226446457544' ) ; +test( macro , '51676101935731' , 27 , '1395254752264737' ) ; +test( macro , '-51676101935731' , 27 , '-1395254752264737' ) ; +test( macro , '51676101935731' , -27 , '-1395254752264737' ) ; +test( macro , '-51676101935731' , -27 , '1395254752264737' ) ; +test( macro , '51676101935731' , 29 , '1498606956136199' ) ; +test( macro , '-51676101935731' , 29 , '-1498606956136199' ) ; +test( macro , '51676101935731' , -29 , '-1498606956136199' ) ; +test( macro , '-51676101935731' , -29 , '1498606956136199' ) ; +test( macro , '51676101935731' , 1234 , '63768309788692054' ) ; +test( macro , '-51676101935731' , 1234 , '-63768309788692054' ) ; +test( macro , '51676101935731' , -1234 , '-63768309788692054' ) ; +test( macro , '-51676101935731' , -1234 , '63768309788692054' ) ; +test( macro , '51676101935731' , 5678 , '293416906791080618' ) ; +test( macro , '-51676101935731' , 5678 , '-293416906791080618' ) ; +test( macro , '51676101935731' , -5678 , '-293416906791080618' ) ; +test( macro , '-51676101935731' , -5678 , '293416906791080618' ) ; +test( macro , '51676101935731' , 1073741824 , '55486791949681734713344' ) ; +test( macro , '-51676101935731' , 1073741824 , '-55486791949681734713344' ) ; +test( macro , '51676101935731' , -1073741824 , '-55486791949681734713344' ) ; +test( macro , '-51676101935731' , -1073741824 , '55486791949681734713344' ) ; +test( macro , '51676101935731' , 51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-2670419511272061205254504361' ) ; +test( macro , '51676101935731' , -51676101935731 , '-2670419511272061205254504361' ) ; +test( macro , '-51676101935731' , -51676101935731 , '2670419511272061205254504361' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' ) ; +test( macro , '717897987691852588770249' , 3 , '2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , 3 , '-2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , -3 , '-2153693963075557766310747' ) ; +test( macro , '-717897987691852588770249' , -3 , '2153693963075557766310747' ) ; +test( macro , '717897987691852588770249' , 7 , '5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , 7 , '-5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , -7 , '-5025285913842968121391743' ) ; +test( macro , '-717897987691852588770249' , -7 , '5025285913842968121391743' ) ; +test( macro , '717897987691852588770249' , 9 , '6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , 9 , '-6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , -9 , '-6461081889226673298932241' ) ; +test( macro , '-717897987691852588770249' , -9 , '6461081889226673298932241' ) ; +test( macro , '717897987691852588770249' , 11 , '7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , 11 , '-7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , -11 , '-7896877864610378476472739' ) ; +test( macro , '-717897987691852588770249' , -11 , '7896877864610378476472739' ) ; +test( macro , '717897987691852588770249' , 17 , '12204265790761494009094233' ) ; +test( macro , '-717897987691852588770249' , 17 , '-12204265790761494009094233' ) ; +test( macro , '717897987691852588770249' , -17 , '-12204265790761494009094233' ) ; +test( macro , '-717897987691852588770249' , -17 , '12204265790761494009094233' ) ; +test( macro , '717897987691852588770249' , 22 , '15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , 22 , '-15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , -22 , '-15793755729220756952945478' ) ; +test( macro , '-717897987691852588770249' , -22 , '15793755729220756952945478' ) ; +test( macro , '717897987691852588770249' , 24 , '17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , 24 , '-17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , -24 , '-17229551704604462130485976' ) ; +test( macro , '-717897987691852588770249' , -24 , '17229551704604462130485976' ) ; +test( macro , '717897987691852588770249' , 27 , '19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , 27 , '-19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , -27 , '-19383245667680019896796723' ) ; +test( macro , '-717897987691852588770249' , -27 , '19383245667680019896796723' ) ; +test( macro , '717897987691852588770249' , 29 , '20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , 29 , '-20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , -29 , '-20819041643063725074337221' ) ; +test( macro , '-717897987691852588770249' , -29 , '20819041643063725074337221' ) ; +test( macro , '717897987691852588770249' , 1234 , '885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , -1234 , '-885886116811746094542487266' ) ; +test( macro , '-717897987691852588770249' , -1234 , '885886116811746094542487266' ) ; +test( macro , '717897987691852588770249' , 5678 , '4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , -5678 , '-4076224774114338999037473822' ) ; +test( macro , '-717897987691852588770249' , -5678 , '4076224774114338999037473822' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '770837094750179348605289078194176' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-770837094750179348605289078194176' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '770837094750179348605289078194176' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-37098169591420333175287767861722867019' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-37098169591420333175287767861722867019' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '37098169591420333175287767861722867019' ) ; diff --git a/test/src/integer/arithmetic/pow.js b/test/src/integer/arithmetic/pow.js index 31e17cc..2fc62d6 100644 --- a/test/src/integer/arithmetic/pow.js +++ b/test/src/integer/arithmetic/pow.js @@ -3,214 +3,300 @@ import { parse , stringify , pow } from '../../../../src' ; function macro ( t , A , B , C ) { const a = parse( A ) ; - const c = pow( a , B ) ; + const b = parse( B ) ; + const c = pow( a , b ) ; t.is( stringify( a ) , A ) ; + t.is( stringify( b ) , B ) ; t.is( stringify( c ) , C ) ; } -const s = x => x.length <= 30 ? x : x.slice(0,37) + '...' ; +macro.title = ( _ , A , B , C ) => `pow(${A},${B}) = ${C}` ; -macro.title = ( _ , A , B , C ) => `pow(${A},${B}) = ${s(C)}` ; - -test( macro , '1' , 1 , '1' ) ; -test( macro , '-1' , 1 , '-1' ) ; -test( macro , '1' , 3 , '1' ) ; -test( macro , '-1' , 3 , '-1' ) ; -test( macro , '1' , 7 , '1' ) ; -test( macro , '-1' , 7 , '-1' ) ; -test( macro , '1' , 9 , '1' ) ; -test( macro , '-1' , 9 , '-1' ) ; -test( macro , '1' , 11 , '1' ) ; -test( macro , '-1' , 11 , '-1' ) ; -test( macro , '1' , 17 , '1' ) ; -test( macro , '-1' , 17 , '-1' ) ; -test( macro , '1' , 22 , '1' ) ; -test( macro , '-1' , 22 , '1' ) ; -test( macro , '1' , 24 , '1' ) ; -test( macro , '-1' , 24 , '1' ) ; -test( macro , '1' , 27 , '1' ) ; -test( macro , '-1' , 27 , '-1' ) ; -test( macro , '1' , 29 , '1' ) ; -test( macro , '-1' , 29 , '-1' ) ; -test( macro , '3' , 1 , '3' ) ; -test( macro , '-3' , 1 , '-3' ) ; -test( macro , '3' , 3 , '27' ) ; -test( macro , '-3' , 3 , '-27' ) ; -test( macro , '3' , 7 , '2187' ) ; -test( macro , '-3' , 7 , '-2187' ) ; -test( macro , '3' , 9 , '19683' ) ; -test( macro , '-3' , 9 , '-19683' ) ; -test( macro , '3' , 11 , '177147' ) ; -test( macro , '-3' , 11 , '-177147' ) ; -test( macro , '3' , 17 , '129140163' ) ; -test( macro , '-3' , 17 , '-129140163' ) ; -test( macro , '3' , 22 , '31381059609' ) ; -test( macro , '-3' , 22 , '31381059609' ) ; -test( macro , '3' , 24 , '282429536481' ) ; -test( macro , '-3' , 24 , '282429536481' ) ; -test( macro , '3' , 27 , '7625597484987' ) ; -test( macro , '-3' , 27 , '-7625597484987' ) ; -test( macro , '3' , 29 , '68630377364883' ) ; -test( macro , '-3' , 29 , '-68630377364883' ) ; -test( macro , '7' , 1 , '7' ) ; -test( macro , '-7' , 1 , '-7' ) ; -test( macro , '7' , 3 , '343' ) ; -test( macro , '-7' , 3 , '-343' ) ; -test( macro , '7' , 7 , '823543' ) ; -test( macro , '-7' , 7 , '-823543' ) ; -test( macro , '7' , 9 , '40353607' ) ; -test( macro , '-7' , 9 , '-40353607' ) ; -test( macro , '7' , 11 , '1977326743' ) ; -test( macro , '-7' , 11 , '-1977326743' ) ; -test( macro , '7' , 17 , '232630513987207' ) ; -test( macro , '-7' , 17 , '-232630513987207' ) ; -test( macro , '7' , 22 , '3909821048582988049' ) ; -test( macro , '-7' , 22 , '3909821048582988049' ) ; -test( macro , '7' , 24 , '191581231380566414401' ) ; -test( macro , '-7' , 24 , '191581231380566414401' ) ; -test( macro , '7' , 27 , '65712362363534280139543' ) ; -test( macro , '-7' , 27 , '-65712362363534280139543' ) ; -test( macro , '7' , 29 , '3219905755813179726837607' ) ; -test( macro , '-7' , 29 , '-3219905755813179726837607' ) ; -test( macro , '9' , 1 , '9' ) ; -test( macro , '-9' , 1 , '-9' ) ; -test( macro , '9' , 3 , '729' ) ; -test( macro , '-9' , 3 , '-729' ) ; -test( macro , '9' , 7 , '4782969' ) ; -test( macro , '-9' , 7 , '-4782969' ) ; -test( macro , '9' , 9 , '387420489' ) ; -test( macro , '-9' , 9 , '-387420489' ) ; -test( macro , '9' , 11 , '31381059609' ) ; -test( macro , '-9' , 11 , '-31381059609' ) ; -test( macro , '9' , 17 , '16677181699666569' ) ; -test( macro , '-9' , 17 , '-16677181699666569' ) ; -test( macro , '9' , 22 , '984770902183611232881' ) ; -test( macro , '-9' , 22 , '984770902183611232881' ) ; -test( macro , '9' , 24 , '79766443076872509863361' ) ; -test( macro , '-9' , 24 , '79766443076872509863361' ) ; -test( macro , '9' , 27 , '58149737003040059690390169' ) ; -test( macro , '-9' , 27 , '-58149737003040059690390169' ) ; -test( macro , '9' , 29 , '4710128697246244834921603689' ) ; -test( macro , '-9' , 29 , '-4710128697246244834921603689' ) ; -test( macro , '11' , 1 , '11' ) ; -test( macro , '-11' , 1 , '-11' ) ; -test( macro , '11' , 3 , '1331' ) ; -test( macro , '-11' , 3 , '-1331' ) ; -test( macro , '11' , 7 , '19487171' ) ; -test( macro , '-11' , 7 , '-19487171' ) ; -test( macro , '11' , 9 , '2357947691' ) ; -test( macro , '-11' , 9 , '-2357947691' ) ; -test( macro , '11' , 11 , '285311670611' ) ; -test( macro , '-11' , 11 , '-285311670611' ) ; -test( macro , '11' , 17 , '505447028499293771' ) ; -test( macro , '-11' , 17 , '-505447028499293771' ) ; -test( macro , '11' , 22 , '81402749386839761113321' ) ; -test( macro , '-11' , 22 , '81402749386839761113321' ) ; -test( macro , '11' , 24 , '9849732675807611094711841' ) ; -test( macro , '-11' , 24 , '9849732675807611094711841' ) ; -test( macro , '11' , 27 , '13109994191499930367061460371' ) ; -test( macro , '-11' , 27 , '-13109994191499930367061460371' ) ; -test( macro , '11' , 29 , '1586309297171491574414436704891' ) ; -test( macro , '-11' , 29 , '-1586309297171491574414436704891' ) ; -test( macro , '17' , 1 , '17' ) ; -test( macro , '-17' , 1 , '-17' ) ; -test( macro , '17' , 3 , '4913' ) ; -test( macro , '-17' , 3 , '-4913' ) ; -test( macro , '17' , 7 , '410338673' ) ; -test( macro , '-17' , 7 , '-410338673' ) ; -test( macro , '17' , 9 , '118587876497' ) ; -test( macro , '-17' , 9 , '-118587876497' ) ; -test( macro , '17' , 11 , '34271896307633' ) ; -test( macro , '-17' , 11 , '-34271896307633' ) ; -test( macro , '17' , 17 , '827240261886336764177' ) ; -test( macro , '-17' , 17 , '-827240261886336764177' ) ; -test( macro , '17' , 22 , '1174562876521148458974062689' ) ; -test( macro , '-17' , 22 , '1174562876521148458974062689' ) ; -test( macro , '17' , 24 , '339448671314611904643504117121' ) ; -test( macro , '-17' , 24 , '339448671314611904643504117121' ) ; -test( macro , '17' , 27 , '1667711322168688287513535727415473' ) ; -test( macro , '-17' , 27 , '-1667711322168688287513535727415473' ) ; -test( macro , '17' , 29 , '481968572106750915091411825223071697' ) ; -test( macro , '-17' , 29 , '-481968572106750915091411825223071697' ) ; -test( macro , '22' , 1 , '22' ) ; -test( macro , '-22' , 1 , '-22' ) ; -test( macro , '22' , 3 , '10648' ) ; -test( macro , '-22' , 3 , '-10648' ) ; -test( macro , '22' , 7 , '2494357888' ) ; -test( macro , '-22' , 7 , '-2494357888' ) ; -test( macro , '22' , 9 , '1207269217792' ) ; -test( macro , '-22' , 9 , '-1207269217792' ) ; -test( macro , '22' , 11 , '584318301411328' ) ; -test( macro , '-22' , 11 , '-584318301411328' ) ; -test( macro , '22' , 17 , '66249952919459433152512' ) ; -test( macro , '-22' , 17 , '-66249952919459433152512' ) ; -test( macro , '22' , 22 , '341427877364219557396646723584' ) ; -test( macro , '-22' , 22 , '341427877364219557396646723584' ) ; -test( macro , '22' , 24 , '165251092644282265779977014214656' ) ; -test( macro , '-22' , 24 , '165251092644282265779977014214656' ) ; -test( macro , '22' , 27 , '1759593634476317566025195247357657088' ) ; -test( macro , '-22' , 27 , '-1759593634476317566025195247357657088' ) ; -test( macro , '22' , 29 , '851643319086537701956194499721106030592' ) ; -test( macro , '-22' , 29 , '-851643319086537701956194499721106030592' ) ; -test( macro , '24' , 1 , '24' ) ; -test( macro , '-24' , 1 , '-24' ) ; -test( macro , '24' , 3 , '13824' ) ; -test( macro , '-24' , 3 , '-13824' ) ; -test( macro , '24' , 7 , '4586471424' ) ; -test( macro , '-24' , 7 , '-4586471424' ) ; -test( macro , '24' , 9 , '2641807540224' ) ; -test( macro , '-24' , 9 , '-2641807540224' ) ; -test( macro , '24' , 11 , '1521681143169024' ) ; -test( macro , '-24' , 11 , '-1521681143169024' ) ; -test( macro , '24' , 17 , '290797794982682557415424' ) ; -test( macro , '-24' , 17 , '-290797794982682557415424' ) ; -test( macro , '24' , 22 , '2315513501476187716057433112576' ) ; -test( macro , '-24' , 22 , '2315513501476187716057433112576' ) ; -test( macro , '24' , 24 , '1333735776850284124449081472843776' ) ; -test( macro , '-24' , 24 , '1333735776850284124449081472843776' ) ; -test( macro , '24' , 27 , '18437563379178327736384102280592359424' ) ; -test( macro , '-24' , 27 , '-18437563379178327736384102280592359424' ) ; -test( macro , '24' , 29 , '10620036506406716776157242913621199028224' ) ; -test( macro , '-24' , 29 , '-10620036506406716776157242913621199028224' ) ; -test( macro , '27' , 1 , '27' ) ; -test( macro , '-27' , 1 , '-27' ) ; -test( macro , '27' , 3 , '19683' ) ; -test( macro , '-27' , 3 , '-19683' ) ; -test( macro , '27' , 7 , '10460353203' ) ; -test( macro , '-27' , 7 , '-10460353203' ) ; -test( macro , '27' , 9 , '7625597484987' ) ; -test( macro , '-27' , 9 , '-7625597484987' ) ; -test( macro , '27' , 11 , '5559060566555523' ) ; -test( macro , '-27' , 11 , '-5559060566555523' ) ; -test( macro , '27' , 17 , '2153693963075557766310747' ) ; -test( macro , '-27' , 17 , '-2153693963075557766310747' ) ; -test( macro , '27' , 22 , '30903154382632612361920641803529' ) ; -test( macro , '-27' , 22 , '30903154382632612361920641803529' ) ; -test( macro , '27' , 24 , '22528399544939174411840147874772641' ) ; -test( macro , '-27' , 24 , '22528399544939174411840147874772641' ) ; -test( macro , '27' , 27 , '443426488243037769948249630619149892803' ) ; -test( macro , '-27' , 27 , '-443426488243037769948249630619149892803' ) ; -test( macro , '27' , 29 , '323257909929174534292273980721360271853387' ) ; -test( macro , '-27' , 29 , '-323257909929174534292273980721360271853387' ) ; -test( macro , '29' , 1 , '29' ) ; -test( macro , '-29' , 1 , '-29' ) ; -test( macro , '29' , 3 , '24389' ) ; -test( macro , '-29' , 3 , '-24389' ) ; -test( macro , '29' , 7 , '17249876309' ) ; -test( macro , '-29' , 7 , '-17249876309' ) ; -test( macro , '29' , 9 , '14507145975869' ) ; -test( macro , '-29' , 9 , '-14507145975869' ) ; -test( macro , '29' , 11 , '12200509765705829' ) ; -test( macro , '-29' , 11 , '-12200509765705829' ) ; -test( macro , '29' , 17 , '7257147736730073114838109' ) ; -test( macro , '-29' , 17 , '-7257147736730073114838109' ) ; -test( macro , '29' , 22 , '148852438543083302439338564577241' ) ; -test( macro , '-29' , 22 , '148852438543083302439338564577241' ) ; -test( macro , '29' , 24 , '125184900814733057351483732809459681' ) ; -test( macro , '-29' , 24 , '125184900814733057351483732809459681' ) ; -test( macro , '29' , 27 , '3053134545970524535745336759489912159909' ) ; -test( macro , '-29' , 27 , '-3053134545970524535745336759489912159909' ) ; -test( macro , '29' , 29 , '2567686153161211134561828214731016126483469' ) ; -test( macro , '-29' , 29 , '-2567686153161211134561828214731016126483469' ) ; - -test( macro , '-1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096') ; +test( macro , '1' , '1' , '1' ) ; +test( macro , '-1' , '1' , '-1' ) ; +test( macro , '1' , '3' , '1' ) ; +test( macro , '-1' , '3' , '-1' ) ; +test( macro , '1' , '7' , '1' ) ; +test( macro , '-1' , '7' , '-1' ) ; +test( macro , '1' , '9' , '1' ) ; +test( macro , '-1' , '9' , '-1' ) ; +test( macro , '1' , '11' , '1' ) ; +test( macro , '-1' , '11' , '-1' ) ; +test( macro , '1' , '17' , '1' ) ; +test( macro , '-1' , '17' , '-1' ) ; +test( macro , '1' , '22' , '1' ) ; +test( macro , '-1' , '22' , '1' ) ; +test( macro , '1' , '24' , '1' ) ; +test( macro , '-1' , '24' , '1' ) ; +test( macro , '1' , '27' , '1' ) ; +test( macro , '-1' , '27' , '-1' ) ; +test( macro , '1' , '29' , '1' ) ; +test( macro , '-1' , '29' , '-1' ) ; +test( macro , '1' , '1234' , '1' ) ; +test( macro , '-1' , '1234' , '1' ) ; +test( macro , '1' , '5678' , '1' ) ; +test( macro , '-1' , '5678' , '1' ) ; +test( macro , '3' , '1' , '3' ) ; +test( macro , '-3' , '1' , '-3' ) ; +test( macro , '3' , '3' , '27' ) ; +test( macro , '-3' , '3' , '-27' ) ; +test( macro , '3' , '7' , '2187' ) ; +test( macro , '-3' , '7' , '-2187' ) ; +test( macro , '3' , '9' , '19683' ) ; +test( macro , '-3' , '9' , '-19683' ) ; +test( macro , '3' , '11' , '177147' ) ; +test( macro , '-3' , '11' , '-177147' ) ; +test( macro , '3' , '17' , '129140163' ) ; +test( macro , '-3' , '17' , '-129140163' ) ; +test( macro , '3' , '22' , '31381059609' ) ; +test( macro , '-3' , '22' , '31381059609' ) ; +test( macro , '3' , '24' , '282429536481' ) ; +test( macro , '-3' , '24' , '282429536481' ) ; +test( macro , '3' , '27' , '7625597484987' ) ; +test( macro , '-3' , '27' , '-7625597484987' ) ; +test( macro , '3' , '29' , '68630377364883' ) ; +test( macro , '-3' , '29' , '-68630377364883' ) ; +test( macro , '3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '-3' , '1234' , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '-3' , '5678' , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , '1' , '7' ) ; +test( macro , '-7' , '1' , '-7' ) ; +test( macro , '7' , '3' , '343' ) ; +test( macro , '-7' , '3' , '-343' ) ; +test( macro , '7' , '7' , '823543' ) ; +test( macro , '-7' , '7' , '-823543' ) ; +test( macro , '7' , '9' , '40353607' ) ; +test( macro , '-7' , '9' , '-40353607' ) ; +test( macro , '7' , '11' , '1977326743' ) ; +test( macro , '-7' , '11' , '-1977326743' ) ; +test( macro , '7' , '17' , '232630513987207' ) ; +test( macro , '-7' , '17' , '-232630513987207' ) ; +test( macro , '7' , '22' , '3909821048582988049' ) ; +test( macro , '-7' , '22' , '3909821048582988049' ) ; +test( macro , '7' , '24' , '191581231380566414401' ) ; +test( macro , '-7' , '24' , '191581231380566414401' ) ; +test( macro , '7' , '27' , '65712362363534280139543' ) ; +test( macro , '-7' , '27' , '-65712362363534280139543' ) ; +test( macro , '7' , '29' , '3219905755813179726837607' ) ; +test( macro , '-7' , '29' , '-3219905755813179726837607' ) ; +test( macro , '7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '-7' , '1234' , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '-7' , '5678' , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , '1' , '9' ) ; +test( macro , '-9' , '1' , '-9' ) ; +test( macro , '9' , '3' , '729' ) ; +test( macro , '-9' , '3' , '-729' ) ; +test( macro , '9' , '7' , '4782969' ) ; +test( macro , '-9' , '7' , '-4782969' ) ; +test( macro , '9' , '9' , '387420489' ) ; +test( macro , '-9' , '9' , '-387420489' ) ; +test( macro , '9' , '11' , '31381059609' ) ; +test( macro , '-9' , '11' , '-31381059609' ) ; +test( macro , '9' , '17' , '16677181699666569' ) ; +test( macro , '-9' , '17' , '-16677181699666569' ) ; +test( macro , '9' , '22' , '984770902183611232881' ) ; +test( macro , '-9' , '22' , '984770902183611232881' ) ; +test( macro , '9' , '24' , '79766443076872509863361' ) ; +test( macro , '-9' , '24' , '79766443076872509863361' ) ; +test( macro , '9' , '27' , '58149737003040059690390169' ) ; +test( macro , '-9' , '27' , '-58149737003040059690390169' ) ; +test( macro , '9' , '29' , '4710128697246244834921603689' ) ; +test( macro , '-9' , '29' , '-4710128697246244834921603689' ) ; +test( macro , '9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '-9' , '1234' , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '-9' , '5678' , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , '1' , '11' ) ; +test( macro , '-11' , '1' , '-11' ) ; +test( macro , '11' , '3' , '1331' ) ; +test( macro , '-11' , '3' , '-1331' ) ; +test( macro , '11' , '7' , '19487171' ) ; +test( macro , '-11' , '7' , '-19487171' ) ; +test( macro , '11' , '9' , '2357947691' ) ; +test( macro , '-11' , '9' , '-2357947691' ) ; +test( macro , '11' , '11' , '285311670611' ) ; +test( macro , '-11' , '11' , '-285311670611' ) ; +test( macro , '11' , '17' , '505447028499293771' ) ; +test( macro , '-11' , '17' , '-505447028499293771' ) ; +test( macro , '11' , '22' , '81402749386839761113321' ) ; +test( macro , '-11' , '22' , '81402749386839761113321' ) ; +test( macro , '11' , '24' , '9849732675807611094711841' ) ; +test( macro , '-11' , '24' , '9849732675807611094711841' ) ; +test( macro , '11' , '27' , '13109994191499930367061460371' ) ; +test( macro , '-11' , '27' , '-13109994191499930367061460371' ) ; +test( macro , '11' , '29' , '1586309297171491574414436704891' ) ; +test( macro , '-11' , '29' , '-1586309297171491574414436704891' ) ; +test( macro , '11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '-11' , '1234' , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '-11' , '5678' , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , '1' , '17' ) ; +test( macro , '-17' , '1' , '-17' ) ; +test( macro , '17' , '3' , '4913' ) ; +test( macro , '-17' , '3' , '-4913' ) ; +test( macro , '17' , '7' , '410338673' ) ; +test( macro , '-17' , '7' , '-410338673' ) ; +test( macro , '17' , '9' , '118587876497' ) ; +test( macro , '-17' , '9' , '-118587876497' ) ; +test( macro , '17' , '11' , '34271896307633' ) ; +test( macro , '-17' , '11' , '-34271896307633' ) ; +test( macro , '17' , '17' , '827240261886336764177' ) ; +test( macro , '-17' , '17' , '-827240261886336764177' ) ; +test( macro , '17' , '22' , '1174562876521148458974062689' ) ; +test( macro , '-17' , '22' , '1174562876521148458974062689' ) ; +test( macro , '17' , '24' , '339448671314611904643504117121' ) ; +test( macro , '-17' , '24' , '339448671314611904643504117121' ) ; +test( macro , '17' , '27' , '1667711322168688287513535727415473' ) ; +test( macro , '-17' , '27' , '-1667711322168688287513535727415473' ) ; +test( macro , '17' , '29' , '481968572106750915091411825223071697' ) ; +test( macro , '-17' , '29' , '-481968572106750915091411825223071697' ) ; +test( macro , '17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '-17' , '1234' , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '-17' , '5678' , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , '1' , '22' ) ; +test( macro , '-22' , '1' , '-22' ) ; +test( macro , '22' , '3' , '10648' ) ; +test( macro , '-22' , '3' , '-10648' ) ; +test( macro , '22' , '7' , '2494357888' ) ; +test( macro , '-22' , '7' , '-2494357888' ) ; +test( macro , '22' , '9' , '1207269217792' ) ; +test( macro , '-22' , '9' , '-1207269217792' ) ; +test( macro , '22' , '11' , '584318301411328' ) ; +test( macro , '-22' , '11' , '-584318301411328' ) ; +test( macro , '22' , '17' , '66249952919459433152512' ) ; +test( macro , '-22' , '17' , '-66249952919459433152512' ) ; +test( macro , '22' , '22' , '341427877364219557396646723584' ) ; +test( macro , '-22' , '22' , '341427877364219557396646723584' ) ; +test( macro , '22' , '24' , '165251092644282265779977014214656' ) ; +test( macro , '-22' , '24' , '165251092644282265779977014214656' ) ; +test( macro , '22' , '27' , '1759593634476317566025195247357657088' ) ; +test( macro , '-22' , '27' , '-1759593634476317566025195247357657088' ) ; +test( macro , '22' , '29' , '851643319086537701956194499721106030592' ) ; +test( macro , '-22' , '29' , '-851643319086537701956194499721106030592' ) ; +test( macro , '22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '-22' , '1234' , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '-22' , '5678' , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , '1' , '24' ) ; +test( macro , '-24' , '1' , '-24' ) ; +test( macro , '24' , '3' , '13824' ) ; +test( macro , '-24' , '3' , '-13824' ) ; +test( macro , '24' , '7' , '4586471424' ) ; +test( macro , '-24' , '7' , '-4586471424' ) ; +test( macro , '24' , '9' , '2641807540224' ) ; +test( macro , '-24' , '9' , '-2641807540224' ) ; +test( macro , '24' , '11' , '1521681143169024' ) ; +test( macro , '-24' , '11' , '-1521681143169024' ) ; +test( macro , '24' , '17' , '290797794982682557415424' ) ; +test( macro , '-24' , '17' , '-290797794982682557415424' ) ; +test( macro , '24' , '22' , '2315513501476187716057433112576' ) ; +test( macro , '-24' , '22' , '2315513501476187716057433112576' ) ; +test( macro , '24' , '24' , '1333735776850284124449081472843776' ) ; +test( macro , '-24' , '24' , '1333735776850284124449081472843776' ) ; +test( macro , '24' , '27' , '18437563379178327736384102280592359424' ) ; +test( macro , '-24' , '27' , '-18437563379178327736384102280592359424' ) ; +test( macro , '24' , '29' , '10620036506406716776157242913621199028224' ) ; +test( macro , '-24' , '29' , '-10620036506406716776157242913621199028224' ) ; +test( macro , '24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '-24' , '1234' , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '-24' , '5678' , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , '1' , '27' ) ; +test( macro , '-27' , '1' , '-27' ) ; +test( macro , '27' , '3' , '19683' ) ; +test( macro , '-27' , '3' , '-19683' ) ; +test( macro , '27' , '7' , '10460353203' ) ; +test( macro , '-27' , '7' , '-10460353203' ) ; +test( macro , '27' , '9' , '7625597484987' ) ; +test( macro , '-27' , '9' , '-7625597484987' ) ; +test( macro , '27' , '11' , '5559060566555523' ) ; +test( macro , '-27' , '11' , '-5559060566555523' ) ; +test( macro , '27' , '17' , '2153693963075557766310747' ) ; +test( macro , '-27' , '17' , '-2153693963075557766310747' ) ; +test( macro , '27' , '22' , '30903154382632612361920641803529' ) ; +test( macro , '-27' , '22' , '30903154382632612361920641803529' ) ; +test( macro , '27' , '24' , '22528399544939174411840147874772641' ) ; +test( macro , '-27' , '24' , '22528399544939174411840147874772641' ) ; +test( macro , '27' , '27' , '443426488243037769948249630619149892803' ) ; +test( macro , '-27' , '27' , '-443426488243037769948249630619149892803' ) ; +test( macro , '27' , '29' , '323257909929174534292273980721360271853387' ) ; +test( macro , '-27' , '29' , '-323257909929174534292273980721360271853387' ) ; +test( macro , '27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '-27' , '1234' , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '-27' , '5678' , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , '1' , '29' ) ; +test( macro , '-29' , '1' , '-29' ) ; +test( macro , '29' , '3' , '24389' ) ; +test( macro , '-29' , '3' , '-24389' ) ; +test( macro , '29' , '7' , '17249876309' ) ; +test( macro , '-29' , '7' , '-17249876309' ) ; +test( macro , '29' , '9' , '14507145975869' ) ; +test( macro , '-29' , '9' , '-14507145975869' ) ; +test( macro , '29' , '11' , '12200509765705829' ) ; +test( macro , '-29' , '11' , '-12200509765705829' ) ; +test( macro , '29' , '17' , '7257147736730073114838109' ) ; +test( macro , '-29' , '17' , '-7257147736730073114838109' ) ; +test( macro , '29' , '22' , '148852438543083302439338564577241' ) ; +test( macro , '-29' , '22' , '148852438543083302439338564577241' ) ; +test( macro , '29' , '24' , '125184900814733057351483732809459681' ) ; +test( macro , '-29' , '24' , '125184900814733057351483732809459681' ) ; +test( macro , '29' , '27' , '3053134545970524535745336759489912159909' ) ; +test( macro , '-29' , '27' , '-3053134545970524535745336759489912159909' ) ; +test( macro , '29' , '29' , '2567686153161211134561828214731016126483469' ) ; +test( macro , '-29' , '29' , '-2567686153161211134561828214731016126483469' ) ; +test( macro , '29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '-29' , '1234' , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '-29' , '5678' , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , '1' , '1234' ) ; +test( macro , '-1234' , '1' , '-1234' ) ; +test( macro , '1234' , '3' , '1879080904' ) ; +test( macro , '-1234' , '3' , '-1879080904' ) ; +test( macro , '1234' , '7' , '4357186184021382204544' ) ; +test( macro , '-1234' , '7' , '-4357186184021382204544' ) ; +test( macro , '1234' , '9' , '6634931404835663880262603264' ) ; +test( macro , '-1234' , '9' , '-6634931404835663880262603264' ) ; +test( macro , '1234' , '11' , '10103381606301936187653160695875584' ) ; +test( macro , '-1234' , '11' , '-10103381606301936187653160695875584' ) ; +test( macro , '1234' , '17' , '35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '-1234' , '17' , '-35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '1234' , '22' , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '-1234' , '22' , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '1234' , '24' , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '-1234' , '24' , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '1234' , '27' , '292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '-1234' , '27' , '-292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '1234' , '29' , '444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '-1234' , '29' , '-444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '-1234' , '1234' , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '-1234' , '5678' , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , '1' , '5678' ) ; +test( macro , '-5678' , '1' , '-5678' ) ; +test( macro , '5678' , '3' , '183056925752' ) ; +test( macro , '-5678' , '3' , '-183056925752' ) ; +test( macro , '5678' , '7' , '190268860537460461066531712' ) ; +test( macro , '-5678' , '7' , '-190268860537460461066531712' ) ; +test( macro , '5678' , '9' , '6134207938767795427279285370859008' ) ; +test( macro , '-5678' , '9' , '-6134207938767795427279285370859008' ) ; +test( macro , '5678' , '11' , '197764925536165073952129140102317226473472' ) ; +test( macro , '-5678' , '11' , '-197764925536165073952129140102317226473472' ) ; +test( macro , '5678' , '17' , '6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '-5678' , '17' , '-6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '5678' , '22' , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '-5678' , '22' , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '5678' , '24' , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '-5678' , '24' , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '5678' , '27' , '230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '-5678' , '27' , '-230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '5678' , '29' , '7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '-5678' , '29' , '-7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '-5678' , '1234' , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '-5678' , '5678' , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; diff --git a/test/src/integer/arithmetic/pown.js b/test/src/integer/arithmetic/pown.js new file mode 100644 index 0000000..442ed7f --- /dev/null +++ b/test/src/integer/arithmetic/pown.js @@ -0,0 +1,300 @@ +import test from 'ava' ; +import { parse , stringify , pown } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = pown( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `pown(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '1' ) ; +test( macro , '-1' , 1 , '-1' ) ; +test( macro , '1' , 3 , '1' ) ; +test( macro , '-1' , 3 , '-1' ) ; +test( macro , '1' , 7 , '1' ) ; +test( macro , '-1' , 7 , '-1' ) ; +test( macro , '1' , 9 , '1' ) ; +test( macro , '-1' , 9 , '-1' ) ; +test( macro , '1' , 11 , '1' ) ; +test( macro , '-1' , 11 , '-1' ) ; +test( macro , '1' , 17 , '1' ) ; +test( macro , '-1' , 17 , '-1' ) ; +test( macro , '1' , 22 , '1' ) ; +test( macro , '-1' , 22 , '1' ) ; +test( macro , '1' , 24 , '1' ) ; +test( macro , '-1' , 24 , '1' ) ; +test( macro , '1' , 27 , '1' ) ; +test( macro , '-1' , 27 , '-1' ) ; +test( macro , '1' , 29 , '1' ) ; +test( macro , '-1' , 29 , '-1' ) ; +test( macro , '1' , 1234 , '1' ) ; +test( macro , '-1' , 1234 , '1' ) ; +test( macro , '1' , 5678 , '1' ) ; +test( macro , '-1' , 5678 , '1' ) ; +test( macro , '3' , 1 , '3' ) ; +test( macro , '-3' , 1 , '-3' ) ; +test( macro , '3' , 3 , '27' ) ; +test( macro , '-3' , 3 , '-27' ) ; +test( macro , '3' , 7 , '2187' ) ; +test( macro , '-3' , 7 , '-2187' ) ; +test( macro , '3' , 9 , '19683' ) ; +test( macro , '-3' , 9 , '-19683' ) ; +test( macro , '3' , 11 , '177147' ) ; +test( macro , '-3' , 11 , '-177147' ) ; +test( macro , '3' , 17 , '129140163' ) ; +test( macro , '-3' , 17 , '-129140163' ) ; +test( macro , '3' , 22 , '31381059609' ) ; +test( macro , '-3' , 22 , '31381059609' ) ; +test( macro , '3' , 24 , '282429536481' ) ; +test( macro , '-3' , 24 , '282429536481' ) ; +test( macro , '3' , 27 , '7625597484987' ) ; +test( macro , '-3' , 27 , '-7625597484987' ) ; +test( macro , '3' , 29 , '68630377364883' ) ; +test( macro , '-3' , 29 , '-68630377364883' ) ; +test( macro , '3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '-3' , 1234 , '5856367529932071269049608726415028439757143623443063785468784843536946634255003858796842453459905186846046851774292445753149532138648409140561593823222428559200283816367593571556942770711203894947318922509986128995034233177140247221695941679146171215675158154358685224309073135481486540427499644363484815218991488230440687359021965115067678545212365725678242878485920885436927030372580147256775788882374301866845441065076726499613479868210410548366056401445912760529623658838510267592199677099676046090140514526228797525926977514932394954796457727416398081482661262807288229389463819882569' ) ; +test( macro , '3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '-3' , 5678 , '1243037693463227949112091519279672492044687354501434200945857669926116693806746194857301400780233995488733257302119315313384942062399372466241771979139200777946071311247293019863313186668415340857975663750784195666817545404528999322911175416479945350848509815821523649497472945192185204394061354208077647593251971659190791580018094752316074849512115300952408135740274415868364936851842971492114222395071837019898407594635391436897273675376020860228061632238135757402157534256820528991141884997213617990932313869139157767548368622729617821353870622703296087570908735603155999125081727743790083245652659362145288136145004020964445403739551815349944634978429930196370344630107979223204102936646371908266047485583735925127513544821868443751038578347212600335097321876283836508599321409432666223344497759612113922437886158316317309321756691709644342882638785970256967423622312748711462021869668719494868133737340936529693827973449768289569618616959110477938348069764446874172549277166445629673389323537570721499025892871401583780718566334141146891444372056720167238580106004294588023983408110949068925676634600934614407326236494754543604668091196426889487866586253683006497687344805244551116811415322677755309138100217606582159711957778349675405780924725098248165734440609725859923557227882624090733819954748607788759286778393117307486567713449414531253242799336048793898512587416922351072249862379979496346075333842525402457713987512962241151801408088747602541118319602580139543049458650772613553099704696427391659934847692973786316292223944739381848786388556341954241622083310642850447813219607073326408041563486733069853816257896789324045551319755037088618442131331146423713621289638493891684978150596496763780207895660476795481533699694118004797315688020850843758776485972938923432434495440069418445343215420341280042711847572084403785495272596239611718358057479206763407758265413312407824846381133395192898456506473229225136787314930144756882252451305634473881426309641144171713785689008872861781376574439959633987648643018576130215542337839481438388884082264677560703461771690165647753395118399310441168972645259556152700302308180192341217336414601260891209846568563921259501135353991491621201855991355185034869242032403371115547965465483990269048544429538087341589568713744694551680574689237237491011280632994211265728601046457084272149460827390761878382623695568170089082824214781471624419349859426165335950948736550329484315091462220430038109528301488465151597001587458695626672091775630841370920667673089484634221309873986915635179460410766176505308693753040761858823435567699379069230334377993680841390907035222598330539569286394567432603810064443684500211286790765380067016868875864059604528460045303289' ) ; +test( macro , '7' , 1 , '7' ) ; +test( macro , '-7' , 1 , '-7' ) ; +test( macro , '7' , 3 , '343' ) ; +test( macro , '-7' , 3 , '-343' ) ; +test( macro , '7' , 7 , '823543' ) ; +test( macro , '-7' , 7 , '-823543' ) ; +test( macro , '7' , 9 , '40353607' ) ; +test( macro , '-7' , 9 , '-40353607' ) ; +test( macro , '7' , 11 , '1977326743' ) ; +test( macro , '-7' , 11 , '-1977326743' ) ; +test( macro , '7' , 17 , '232630513987207' ) ; +test( macro , '-7' , 17 , '-232630513987207' ) ; +test( macro , '7' , 22 , '3909821048582988049' ) ; +test( macro , '-7' , 22 , '3909821048582988049' ) ; +test( macro , '7' , 24 , '191581231380566414401' ) ; +test( macro , '-7' , 24 , '191581231380566414401' ) ; +test( macro , '7' , 27 , '65712362363534280139543' ) ; +test( macro , '-7' , 27 , '-65712362363534280139543' ) ; +test( macro , '7' , 29 , '3219905755813179726837607' ) ; +test( macro , '-7' , 29 , '-3219905755813179726837607' ) ; +test( macro , '7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '-7' , 1234 , '70954734215028011240104595141498929070420289200365254864883100224459061531095964535961424752183918983389834714345883085722594630104327570484382813454950959834721299254363358098967399048133489131401375954827777487240689332659684949614116231197346793510695402301156840458057925504143947679213040737846060014251249690928324441226158708348216074516368113070768675494487327714367821662938661080440834970823376650216081882744143161592962823478851621834726159007802788609981541818975600270503709811145869971874252832721423453899821462438727851069669041332053765106227148570291872998008674128627485981069824533343176007316751497280494057995201432198045575691194828311578763776024467116028227768366827683004790939265568398432923069244698164607404132404210543306184313774389935234011995625090611727226388755028092996618090667295922698497975515840710550500258575437750076719351206138149202280453034232757583405474400100672191700332560347912741669538744924043142095605796598736664375513698661239721232174697654768024941266796370339939780641017369634940849' ) ; +test( macro , '7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '-7' , 5678 , '29286751415147620247012304773980453114296677803073891717128731934016701215974044080405159393233326470923575961142799138193074871298378636445798628179207951349293982721295278501959247567396219037376513091082530976510046931578018252332911963395881855502229529277894696192062382498205446451330821264508660060350680978703632399146027439892583747910260252573283992801340972629278229559465911897286605725711901509827250224363194810593341410557007928980446292059141174553339348167116022054072976080669663383423876445574623259565705649860557328656767872910853528973163262527221058274477371143012479363191542123347184358086644971892976333589967255121778587469470892635729379036729236304281800433959466187506663459515828468608307875018665592185468341433713422202882333951754002984232398322608180776700835785085017756319924590206151470700716667835012667869936677506199082647415474168800484943151012348606524534006652121876222361977658821488777239683223567987622345303322949601239794141770292343853950382720459690070362230065991442547398307358472021289622300608069384246841369764420640724519271620643375180877746823736826186226120840335052438117942436533089511127752752776144826427488391781629757387931931866819313611113838895192595153612697562710052857839705947750975715806160854609794879295166494370393332625817992461823676698792102936528543520961016844260805703577116507427610889086939384974782917847235365828889115833315047177125587286162340061433341091371954086793250119039573579409345450985100916248737095737635113804291080478497302622719151600453447616115190282792195268648972132196212717229671264933006034401449925954728380766566809709129051085718977633841056681750845701567687767262960074466629251941876310059953363356531903058045532738271892988757147772703584798866501751770352083540196100803611978925296332203675077547295577020941062653460756395909170345723103094148861314777405742548532625701646810183666329500365537037837796381818770012342811563068087864026587087965941993420061262519506075499730518978585216724282264266842476339924360204070092387081062271166294076464986173214296883414741128262228746457873862297729461562411250198067094652357764260127419648002555197136786444971264851853928282497021712573900531648560775269275620991652740780298232021457075682576160866924920643357459760230060837118671529811745348483144053263057167731433439790093453587845785289839653966318286353544985756786138017559281729742760365436559566020930901853363600729656253961774820405787066019640729410826090870703799290454880306581230282510738087113753806619350425640320369895844610395585664858869947128190822130577054035661501630309320241329765059393323789228824376116472207943909200787598356625424332899455771232035169336714551998000090274179880982976417171021168670556482314198238096787861626550887693327061858177712413982165608873492233854569701565615054215981574912415571024874796636058468882371352130950473473787764998548443335260725529010774114177855533290850946155316766268951403608859645495518354455415922245608492259889927964017924837101397067268070099225030817739186510992894635323450695473383790259049745811723535604236057509473976199273919932581197631717736843031016857549306106108894545373734030577486454218738603892987604028992432585288674498003102110839666180973964000647771786878484450905268467447862314262776221757175689654294334472018305832948254130011534914626821150798633758257956359485409097758800820518855504265570934089990834849940809640817750881113810307074278330447454706136884709705076100153948256437849665146298178253907766151956875148887880704088418959235408519102084994845764532487122261171084690258639078929318849083005320788264786818741497152218531813309049735082217246480998356792356423468690812689741878405570775329789967268544118775265597533519971689880183688879583268069589841484628003686747384622711287138558207298669062173888449730536222746981830761436411638918704083993605529775430511215721624379386418171517300661716804853921368534386259059328549100166544678556092078039125431284837120330424638877929381377386822642410570351497645327464806551308709476717189758730145852636898776648068485630182784186320600350425256211486828867199336911598081431699804028420689319751310314229065511569912938919887605558610237415833117670117720398090281760742873925225005809250637733443636498423237903430070501472467711563994554631346830772764419040383097667651843091497767178561922112757100189347867151512651676504135813782377307832677229924200900337767048640550254889564573280195779350492199790482755320611128427773224927972518754103462948342397056029050310063164777386764680047944172099837029881521262503568821175159785856887995352684696513864645799309539055373624021324611634320733523909093966797454147058520418465164134584379979514639416027197229802081214558290831868642024962672375789914449' ) ; +test( macro , '9' , 1 , '9' ) ; +test( macro , '-9' , 1 , '-9' ) ; +test( macro , '9' , 3 , '729' ) ; +test( macro , '-9' , 3 , '-729' ) ; +test( macro , '9' , 7 , '4782969' ) ; +test( macro , '-9' , 7 , '-4782969' ) ; +test( macro , '9' , 9 , '387420489' ) ; +test( macro , '-9' , 9 , '-387420489' ) ; +test( macro , '9' , 11 , '31381059609' ) ; +test( macro , '-9' , 11 , '-31381059609' ) ; +test( macro , '9' , 17 , '16677181699666569' ) ; +test( macro , '-9' , 17 , '-16677181699666569' ) ; +test( macro , '9' , 22 , '984770902183611232881' ) ; +test( macro , '-9' , 22 , '984770902183611232881' ) ; +test( macro , '9' , 24 , '79766443076872509863361' ) ; +test( macro , '-9' , 24 , '79766443076872509863361' ) ; +test( macro , '9' , 27 , '58149737003040059690390169' ) ; +test( macro , '-9' , 27 , '-58149737003040059690390169' ) ; +test( macro , '9' , 29 , '4710128697246244834921603689' ) ; +test( macro , '-9' , 29 , '-4710128697246244834921603689' ) ; +test( macro , '9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '-9' , 1234 , '34297040645642669671420659321651782362579256907010306825298584320017224909034295065159266732166824736588968016033381896847023243099736344433210097854593507161679850671932155017203599500044609298345843661231598352934672574000630755280719247078658076071069504371210453795997193380141459822909472292250049962822082559318856309665763195373936160408297178132724501864611562349337209033935902601202229170588203644970751513231529370646017342084334943445632338625406001819417100075123659123153934372275946883429572960429182400235833979860757127508599030945874737763438221696224240363286973695769026948553357192210469914347532288838793872337455361841599848707950096810738215169875752378946944496071085184269469689190048414428631904103213703000348839546159132360494448224371361413782868923322232033859714664315449006669237525993661192066307764695656412997620762143868465614936957887460078238297229855499508020184426374192732713213787351302551235717525464575349122336444905826195262672337776865803043472081042136085365758586709594709588874980188963624351301943558778230597943000313246648597648327615323559497393534626812152826795197456515853598831232826676446660986298958124148320950039761' ) ; +test( macro , '9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '-9' , 5678 , '1545142707370381851609411413899132682778575844549055737803770782486638374123987237714505350031063863696419362246215324259025872807818706708567475641777221524486469451542665562456475991411669945011588061933033043990285593410736303684531491655090341501196320194664020232558795638543041629641355998266033548545684015858096482700688284981448066016292615109699224816361227721744941140103885809784889737995411688872156490144707451483247506723486569306623432455131502484848152542555905761267826576308873877093265177335466304892722841390706005314223149855304965697484723009003003632083696007411617084581327217056398066426605090819508953675656967992469076739615155228601392777535817633074609994606291164127882587611790074634314684395235695951310867816046457022429685001454352432479391043233372844749832834475133612310166159430096724033853202779978343792803241815105520473343882963270232006318108101172487652645037890933800756420196027281412374330156942298809917864681543862000700290148757672140417762608153842991450104537691398458724848347134986905461646720926318916004759872555232117444680320721345188614171935657721162922772487571124238457660530591028220098993082424798607063347980184136709298769413926930349712815088173558675750389256644773436235100564071786607781876607264630905026348034479999782657445944748011068965501487523392800451597712231719881642976802003901339999399734075058637765277161028644547435177576795907751332319356126994328383614000959809721439665568650348697207647555316250229874630972224221714533827025501634911141684146186203253767040684930463940464377863490189848093370410257333803061200409882588601608120045438839772858741664177165757415118862088960994925276210066381127080570557851385479331042246570187178836367072105659557298025995994432154607547760881911528513006072722679351100800384912243076415109378562053413427675008822161639569146618213571005063105134152183592318763191892403562862300332002443513358137733609305717552536116534529456800098568792487873742228833784937429502805597130286226862975217006199009586805130712898326268708779958470992748082915469591083119179614842245665430602770992134692732918676506143472628731074803946929989696665115780648730022856841984172068021565899431168771658079365019826787122767864320410003659006630243236082123473778365296923504448099879355899093296587407124679743539714668629739203451409169220276915270710072344374154805355451447610334870077107520916084363778625558453362830867729338005614696548674280966101030920025275289509398227466089735040095294432049245365579301293649947590752813026695775305108512549093425827168709309153164964518435002803203260297748051469146218834794141288192941465904821437732646224427502122761116109084100303184096830143400182874440330465783102621606891257024121143498202107903258018086176991251634730153737114344138284105389641830312676972930646347797776529968734739053219753095634106865389392731865073020060739843556848436924296264365174038915119777825322849472657573916448107560433792653801959610188502511534981700386973496144694841422884340132779103883906981191026922867395953990063126834152580234552204739961906926767894178052760711620116507790314554396528396871813365687210073019525832824479961834155693623848039441214108218991798316931852715586106991173419636671902754236049107585921303060877716511803128895869667091654139705002524900507762082934568975954418238682291841910718982426145152686903351718809457762642345982881924850372358154935832556134320066020200965922897806724341248914397224558268067799442480589425192305345138246146351317529543861709892659099510408182947241066305485992782013056611600088525469992301128153504386277775010761258678532453273506462144848662004743034850060677824385240850588592267171443255754150565279560373497193659947780285389694817090742653506541905415465147664245703555755319506569259093273234477472175250215865923275863458053491886242823523838048453699851299857579772170676938286642988817887754472081798505839390455625598352142445901032306662849749227441402540484189893049732970070242662289545041240186274540855527695224386798038802847716909643228838071712328328843306868604223267430082476250031289111386554075507235619140890749226586960627425891165027575773899527151843957100604729050655499468273965365676635425643512622568877104991613143416548361882289872531929492966266589241390435796283886856494108038015908593659759442649289267891231233370864787216502985947587427499976015148867290521443540972183144322560989287993403276257505450903566910878200950050498748138177006078421885399215834679055363231796024572637313051142809997975829383113593886842905030615548365187334414986576626572709945335218302316974585860218354236627526789998871983242318007851112973254711384763164130812368517530397568357211122447291577632411868201330873749770649724664584931910689209273266716237972155094521293509679679188639121028673703592870439365985904787534978888232064234185884332728603718178498587929582594411733908808682843871136010409164159211147954735782608477209486374278676903968217823052983733854225085207900133055681775964179915225898467500534275504778286018191192185134700062560159814398118843013372902422075816271217441168393867803438088703366735453642092957869537542911086888294098076857636181045592676382529427459580323398060295400592579156848598273806304984575515978899816201496154375306741429141182134037640643883635820658781752675039083634856662576936007793352035809688183925957066262267994217521' ) ; +test( macro , '11' , 1 , '11' ) ; +test( macro , '-11' , 1 , '-11' ) ; +test( macro , '11' , 3 , '1331' ) ; +test( macro , '-11' , 3 , '-1331' ) ; +test( macro , '11' , 7 , '19487171' ) ; +test( macro , '-11' , 7 , '-19487171' ) ; +test( macro , '11' , 9 , '2357947691' ) ; +test( macro , '-11' , 9 , '-2357947691' ) ; +test( macro , '11' , 11 , '285311670611' ) ; +test( macro , '-11' , 11 , '-285311670611' ) ; +test( macro , '11' , 17 , '505447028499293771' ) ; +test( macro , '-11' , 17 , '-505447028499293771' ) ; +test( macro , '11' , 22 , '81402749386839761113321' ) ; +test( macro , '-11' , 22 , '81402749386839761113321' ) ; +test( macro , '11' , 24 , '9849732675807611094711841' ) ; +test( macro , '-11' , 24 , '9849732675807611094711841' ) ; +test( macro , '11' , 27 , '13109994191499930367061460371' ) ; +test( macro , '-11' , 27 , '-13109994191499930367061460371' ) ; +test( macro , '11' , 29 , '1586309297171491574414436704891' ) ; +test( macro , '-11' , 29 , '-1586309297171491574414436704891' ) ; +test( macro , '11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '-11' , 1234 , '11983218693353866267692684359194000502433893845480769112172251205188147262289354049461429172488569661122876033605557421170789272790102054304092511689341645557874249802952871767405284987003806187594928847518777345850099915863264078051816617440620669835924344622459557434141694081118718006962588499405658476477809584051185924057025464163718833076869861008662963948775457304791091957146272768229564713967630639094659383688489828857998385412406001934065445969895732784144880158564496904866299896753946773061123748947095350178138399329492711931118102507186743010708942286629969813642204878306198565914755078983880064808436574100979762259478493960140042607880569732036310833444310215790281432505720437714904537904767412626253808859682743392379188494787465177304942343204339576610614978528053711125948630650946573610344095512008508992625585490923211491629695497720992580178320146672152256706875056491678710723022609578354722578101061602454247010516142562468962308895384683137775859149496917496435957009023897662611266558969297452444733968450168403551460556237438931715240285963118359275426150086656493777954817140258639584026557409436805416478575578840073580647683266895284248911727092735184253994397858925804638577468716770187699083797737507027525458211673613162334364880959262660197607632441' ) ; +test( macro , '11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '-11' , 5678 , '1065776962422733390099998701350852375306774582971639100309613498738018463297402426284028524738823271322985272649725948115092991253107878527781609210894707854772049951003472314067831553881895690939206687522352568657440321602968389543267780665609966988582230996295164519798616549566676379590692798762716905683941763340478583251178705357020162093767335382720674351919299433767565974669460608726103203480874707475235760946929885758550631464242176556080700621170771150306343987986469041228052005627284421145796887853536588932524692770319694218582474445761213162153365490914843340179888987594736119906310580976352820314588543355972619484459495220871689392023112857825597955459918887431929154224173483293504587547665399509030344942605272570136172447400900121488107719512383240606334221292626608823849332333400482253520345477235442179195426136234693064612259799609047549032234897003107500108465053915738728979810144514094776056483728190563804640721019604885909118861940983487407937039944554294878572669564050159687664895605736084313761462824024676968707517184596167351978713169868322481182055851502456062238802586269146612231272427522079499528515959498333263466983785280259161881502475046417048213519584900610678927089224215919039112968768072827818708306560616332850558578446752780273726465248390043011232866170085126505517422418551900039852406583243467144607754086873525143407052846262179499389679942347532000823560325207132685549949066558071494494427946598444312782804755853495210071597142876358782604358201649556061239418307323404601244967442012437515731329817926308824617354000382199156471760900683632471277324956810127590967837960592617262960312465376355316455915879176664759553277776308042310559423721792898442749222107490339293940127243016498854242115145167447996864142048792438738560578225455082147842584858075118284318490977553362786437651112857419381043628238857484819676978075445230762210380626626912004719898874366572155465547173520667309054225283981508791442674778656040035468907369752869408514185313704067350389223145645763194281830994949130563721534905420232142720998287316636023688674050985251378185009914925807988317225071216640027871716722483316868791467166847104807602861728042597469553982173934183881854721408118637488166739219019898807239930452080477028419451221482169218590941548470167987081105665128401656215589475541679937253196949254758234290186798375277113144758530616146671086378878587968488456069580463733501978709324650086157580838543304059737187837840172970261310651170220832783959402177878176227431050767112633358910621278034506978615256025290080266327386921789544837403448128169941411317755734221724534993423771737584328270941785681037187637148965847831330028884230742250527433592894233763159902534751780862175154629552102145945586119235764832272990067006647822901592710351066659902000064017329218952050761426811476157880640667065247449451972208247978421550456277234547741925058712547416503369256196211239680164366047864051968708570583351534285698926517869625895514771976844313520579796558965092576627465235658048719487760146348808931495565346847366003973304701007063054233684522192162343464740701950442784465797167708293183479944132342976405589996322951258093432243177899159394041673341432298028719356007636825480992284923970510736838942942304796113387801478681602920972896373837595385277191717576279392952761700936522637224711546691229425008983033605153229822416869513005954335605693170930885249832778368398645533597288302148018420434619254347639616385151984552960650830068954346104302987832610586471252692718122275927836615526059882116390127451028052550923092000111263140958227160206219707410977980611517826815099866318452865266839478499873605810527128458400682829266213047212490751292505412839799091839878790386710181065160084894230231280531312918673011117069898789068313484780627491574837836376088397252997015833464534344451570629480561635620053916519436130021805563621848179479920844707168181116371097043308074403627884022121921874913710872985556815638427086651333779751907556934770310989869843884425304798400423634711778163856020448720206496290069493745603962153577775093497572698365374594076591461904206049396452233781439591258104765917225718355977433822381572720392535330998593120939566841352057738311318719931927026631838006769672045108443992445284929970269294270278680743013077174180453305089917742058685731225366141765610284466364224239657923316122018028323771071925305776184392902004619136458183176936490831946840938417871887775288789743276992617406109612755025092558440576560761222878309756084815155667190192960921003385227785262941734093931704345512521132798515611547442925571295279505831931283715748549845669395353133931794747206486070337327303879615849380818093267141506586465834431904895759614006956917248763890815129377994441625824333049728355566141085538225755137382489951163889065597959637090364281160499433447909053653936224421624718741987104354218067585258083011422152546594719663896981399037561028385236732212486414059132101618529606220469363058220156329055224342467340925139139929630506131648767286858276792072149267144670692471130323158321566298623976468399937857216321372392619400998408839149950057518963808345869653309993310768299116776379707325175676054902275922736269241390641779960744489235538753789112847068524247966967539956729499733460342777803955793449997285158138613067762195702203432660309455273766440576594246410536265644453872508630612565356986609709760894462294180493818840739169368085369286699229156832130169858213118001196840078980080715876252447472429116934369285480649794242527428955233670068043503668172668283633933776143476087412305215113096021310601587105393061779999730415570592566016145834001225399284902644145953391096153151308606014346031294960654945643001133160678398141361376867996289493175381235832216759220680742166229263430190948116635508223815277449847445410032258317401960451466607747028200896253295257428236276899079754883495683081' ) ; +test( macro , '17' , 1 , '17' ) ; +test( macro , '-17' , 1 , '-17' ) ; +test( macro , '17' , 3 , '4913' ) ; +test( macro , '-17' , 3 , '-4913' ) ; +test( macro , '17' , 7 , '410338673' ) ; +test( macro , '-17' , 7 , '-410338673' ) ; +test( macro , '17' , 9 , '118587876497' ) ; +test( macro , '-17' , 9 , '-118587876497' ) ; +test( macro , '17' , 11 , '34271896307633' ) ; +test( macro , '-17' , 11 , '-34271896307633' ) ; +test( macro , '17' , 17 , '827240261886336764177' ) ; +test( macro , '-17' , 17 , '-827240261886336764177' ) ; +test( macro , '17' , 22 , '1174562876521148458974062689' ) ; +test( macro , '-17' , 22 , '1174562876521148458974062689' ) ; +test( macro , '17' , 24 , '339448671314611904643504117121' ) ; +test( macro , '-17' , 24 , '339448671314611904643504117121' ) ; +test( macro , '17' , 27 , '1667711322168688287513535727415473' ) ; +test( macro , '-17' , 27 , '-1667711322168688287513535727415473' ) ; +test( macro , '17' , 29 , '481968572106750915091411825223071697' ) ; +test( macro , '-17' , 29 , '-481968572106750915091411825223071697' ) ; +test( macro , '17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '-17' , 1234 , '2365750719195418700959936173439221488331849554433443272309037789270912117133978206777246165583614280813095899236078594286552848472860457643580615017539717857048793304325119681053421007826013802905479250885212839793760101742612296877478711932287387420109262614158330630362237192202151123468592153560375572873151822947436950242912080157786888545384847518810574795754691976973525697429044294851654461713242307440541746159573098284837473930094049306091573440131975480886198509578012017892791103610676499734889373927818577887242310104551008535893775377108954649457429588226369074071331951078940909959401201709240381177136083510255280740550175339832084572676328794889199725393235934601424964165016988318210336776289444267654575587266337284861333685818972410304844379843215873568783484299285855710739185984313729162892241201484427793478780366719828354369198742105822244711994746358620164097425507697349511284930229811697252220792819650825560346717292110648932265899796733644188721108873119505172872099646531092906043987147572277125354950545394615532850018465975565730363029206743959014462690377536775695776234592924640448812639061038539121473894456471681658974744379159553490945761899997224178778022075766625329855978704429033291722506766694214979844269409520158332260044608648267713490710210601126307243035021020433002092628988274703326841291915973218749244960354639698612598420531573152776417281665548298330678827921029701549454503621900176615327265802134551424622450618795022965384601079468969005231566796416059429914871329' ) ; +test( macro , '17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '-17' , 5678 , '308301463160662792592974191225677550213805858865919919735981762675623786601714250489696698804852341045297420123063243922100400196696349793305072692507353336241216967013579955338321444377099377319922539877186220868052446496202732277247371505550502651392252286935974933884151213108283554369258213425365822337513947069960567344400310797289631047757394436944996398072856708476570135250826251807398908611346753721594187395239741456589520555880152964355709918481651414281037119345031864349473612190232783371634279010028835470052200853299387882937134502672486160490325572916770961984349270782004601755602396869480289583861432077292039522042728544628472407886559019506167070189042096361924625145764203394220016152058200833752782786135860272071163220664632628957715045743868317244354995167227549385742687044952230405548258021083955544683907569599512046698283062653360884689200605347962098694683370357258724260056117352725577527325470851942851786836586694378752609414985480451815306391204834718631347771140575410484669506656818267247739857567770208151137491950666879071411531164773778999066561543024242136809243170757624965045375519201614760897620552430403133361040466722500087079354845734867920025285926879314249326848120872229945829401869885167283900122714895079076317869209094125931991982545556531488000512974612556335371838867029549796298764189897495724664237888752067198837966134423345547661571313151671040573897238403514602328827651572079820723701139609625952452387726428497198778814867224019443231895553458612781145096614872436875589042063008282687051858429092860711826018500930659407306718573155390037651077626487553235826051751992178074784247327240446763311187915496267026614485771849109815253713934148711216787298996520671468152820643885099705983302989002284908552857617520501529946390075868206425878082496708806322673513995979106164216776193616172985959907688824822708649852983817019144075028883180470899174789547764945602382526461092533221644053611458447978077780558970501641646067073622734477217735505282263211128124481305514353186357540419010992434002107768783355740756446187324942325654652625852412169287153813508608016280113952446920176296614253376950196475669316351020403077722724490519629898377036323360129820529281045109963371249894530276099561144042482626338772593989844316087710972792550257456128886470019096822479564940726737877698151825386119418309553408271231027478809647742899313908009933334462963092648575508695193735333743379173370627653867407320126715177974457764503548774713620560056196952152990116210197349898408972339742529128594321078656213131646113348021113593500434299052367891502628806326549121118207042607447479186463436915417026432303558853528036464975473796918542444020373057871946369301364258538966068868254352995619682873466974346238932655967123889634837113714800967760011350882223310353543059601985301931618545990512349177473607469589077686942177079271505612848872737004531036693137411376221188948435205746764410417572244552151115770898205429797968294734548429417278840745724261982834336050319128899682414411262548690370173790043028979845800173387057519576117961404309649305131253106853311405290729585498843142932710693864698111280652528337779798996371020065243801932085317018569183094721517622383953097502437063509905231723076848695664475891217676900061772996514510444773379828633675940309305355017384694473467108649959260135277673044625735731445353762845612054986937722179046658335121624623887140876084354281345305162356789678255300384384362221940169560849412314449721012605468584753472048939293608001304951329291978795373421372496969569792459269771201979081563170756324976549131692045507222783153489641325969541556371425701402301211477683080268682892338248206661170350045844352061951383330942281351775350666794898243271686809285942972250079237128202766005910057022811233073148416980300503195301226425284939582119267754559346938405839108209948260224741026519729353522763156183432819133601211163851967797956224605731130210254259956239010777634280103656590161967025286273834863275135448484296586047436588377498080471091688749259494163596420313099632079876409348525630028055176035711873634035464870888160379725751723195018099253375258568577967864792488387641817874998840468383878650374885021482953160299619530112289571703664629650689171966549636405214013448300445958738210047255092576641861296921647468062688837053654674936187674808709795653883608126278103976777614235428024410406774617308906840440399533093675542694404899247309187944909110631946845342610548908241677763415814807299529431331306295147372426206682600091831666916348144604753853633093752578611067563482135824231785498536893195996043663278185036145372756479240008651658799543396796498313843752029567365904330978277771584083764680985424357979370673048412336161600105590795221468539510721486414696405244842077338791619491047555626214572469854774642809583879845753149299202220239018392390206481186381875779757172402492713818647299968359129028554409153515978523967576074137219417098042854838667104016609738651022464948341424258581649824364793277410362004657346730312486772187893045818208465017592301709242049247100206034557497898122997305711805266614983374701841598496819251246442389163596781052495386660654519709452526951157596940799622382556542978303127167636912967999455236012568054985444079556177250723837365747957344490952925271966201701550593265443332902956508294939313094240833285876555046619359268191001846635259161706865131541180784321186186894945212300349221818709758522540187015314739189058530961568234354902922125914842193133460218438518962244238370699624523924419568327136723141811138403931677301481592189660339567894761665454562699685520993156044186932965753836572801390460509640488798964928095419008854900677851241358987176646501215201974659363616049261017603457999596184581511549579905438019185941637728665384585389583535891202008231419334008863423647112514312757047826028932882729541950746057232359164344651932902110039997136484675561126583054833776169478582845219207488207389196029054365227406667723162110887854915641006891303598854753903506554856041472945272356941328283818164784067726584990924119024325130661086148657987548771738842769797564552756354942918282971676618299580653036928287938534922839104145089706750975511251679142746672018472326704754194244955633025397110493863802050335540295002732461604260398261242352490448735856721475625306260022338327634579483863218960189713021604374058340162879817478268896311320400935427024907872299937115878667674458494570901082210791903147151206004364128850910892512190179733983576746853124510692834110403304378183988508805646983947420299974549209519662950763156097018733065661357905142120460779273146947254095926981543175326111475835364495732470677817188832146552441552139930332238086701277874221108259025888256128861209127658043159023987114966310186989910006136268267279080051772647893114806659477299459033328734671642634822948069793513975896907315793907807201218951810262212834206364838330104666470691976814742557318317590520995786209' ) ; +test( macro , '22' , 1 , '22' ) ; +test( macro , '-22' , 1 , '-22' ) ; +test( macro , '22' , 3 , '10648' ) ; +test( macro , '-22' , 3 , '-10648' ) ; +test( macro , '22' , 7 , '2494357888' ) ; +test( macro , '-22' , 7 , '-2494357888' ) ; +test( macro , '22' , 9 , '1207269217792' ) ; +test( macro , '-22' , 9 , '-1207269217792' ) ; +test( macro , '22' , 11 , '584318301411328' ) ; +test( macro , '-22' , 11 , '-584318301411328' ) ; +test( macro , '22' , 17 , '66249952919459433152512' ) ; +test( macro , '-22' , 17 , '-66249952919459433152512' ) ; +test( macro , '22' , 22 , '341427877364219557396646723584' ) ; +test( macro , '-22' , 22 , '341427877364219557396646723584' ) ; +test( macro , '22' , 24 , '165251092644282265779977014214656' ) ; +test( macro , '-22' , 24 , '165251092644282265779977014214656' ) ; +test( macro , '22' , 27 , '1759593634476317566025195247357657088' ) ; +test( macro , '-22' , 27 , '-1759593634476317566025195247357657088' ) ; +test( macro , '22' , 29 , '851643319086537701956194499721106030592' ) ; +test( macro , '-22' , 29 , '-851643319086537701956194499721106030592' ) ; +test( macro , '22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '-22' , 1234 , '3544770596427666704933670825514058656840289167033434034813245091750883162270446675859397841986880345238161021960809170374322988214534191585053363506454126462213757244784862172250548800355120891239982462620296434675754206726427100313150523472266151826654642293138772262710079764335312817589977974888511704681598808553789636057965795110640986410281597921902662990963638641278281253781683699119666661945433104346601274970659774893661365968347766707077408549681767565454620843792569318870542401828729517938364411892509820193464655128629664809734022850771731500407885408815335930002147542787627415049845408189806745107445132307539157002401311183617949986742914159513317593667951549591942294545010053084686720365553135398975223690151357594502438362943103211174888290826883518964968656962099365383745446040058868947352605005471883468803102923319135160194367582819156826127917537651473185148386098880353425069599001396856273342875688276177114278359156141134393159654758637663041409089129911594364800818125391217718986756939362789014002086984204053324062930069928284955781180175025313587891151051182531528712430068603601480445127763661852050046817311966022046189931948955290807404661752447837636846919052423707195121151844536365697282035619507227238494415828142354268295050195101293247644044457267714935452707723243836958166570458923766194943739329318567831418083291367602614610628703776858094904109993034272453854415127335371407800891291417423473199819581953311554881626790599515656538382928587235599730899217327975918421664202906795230685640597210322674275525454392606193005351353121325240801341129111396762030413616120113277356128432334929643219670987389108486144' ) ; +test( macro , '22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '-22' , 5678 , '188791183279459428032979917309231847200926168850386143505884770467168693375931895922274556902557057349070006829787284038833847205657221323086778299516173672693704766555252528139265360902778722183082662200078678453997329891537034422822575803367053904655840627755946766693757142547502052565953996363335560763158268551572751512866106778431138820615713754627823698314270698590631138259164788157389001919104523833942391091963057065922406993273787102400618472074518275818851551644852629873956788856970633475366447672782530547865741999862312938533203178291710002234858638631656516476317172691637416817888111298556457298999099751473928302529193993166300867967794207259256002142542750751106986007283388678487258401453058580610853029932752094378405105178931730860876546015936460719383487738652762837137015685750382657573311754947701500407222582281566094817174073472144811366744070419797423798544094403873094199877877853150049457040475968921734523430878675521293370360945777794830877356184006978877091885754906917991440962876015220987468233257346287046662479844768237469373754719329682306024899040352120465381043236796342435914139828201123414926711331244145922850129403791095391423842253313316894102060772814826064451102647169447140443080993464221839521726629053885287095964136013255179000177247350196068604054496565177879080513643431866167726634133898846619131635347475126027711691279901001090402999384232358268658557899584767972188754606811562218767608264930824961710835118809206445233999791639003838245009290187741328535591220360093897367352614744829186871911800346161094937089356183566076527889043149104246450652971623538711614388121183532572879725745001292012401206003161879654577991659939731216517542635503622655459132088797820236545384884194315725633695427351662866125654652037894893851700035152604437639749253793788001370984215018294940417131355604149159082298240255347039270323737033829938556652804213810754530366216244627359047801328010962028910363918606863009301850889578079483970837777414556113020756651244678945855588115566911935996323508669528384387516643242397299023508751043526450954773213552893031292302108980643471326696435902444257202942430483248169515243504400730148395387415129983474005341937524404093610934807837061631884341923871640332973833712473410511352497840950354717471207835203039728832245686598798557108303180717754281741624836460482499750093903647140024989550279346101803707104317524947924300904078402788855449767432346556247835035384556446005558861060448421141387365651441511783999354650683395274128594606161258833809729090469884846090442597192736831693121095035897380375918668414251031197753973301724588916035485541075323904538088914655589426133179024612467018336059489439900282543046314110365187230735791452277032816340183238147712040823773524149282426416491420492939282622735636049912086266615529452977045894296591781274478366606588824311816021589425349467712419121696503212958985567622927656183375686142819491308359745612172611203958699633657019779838962795602648062265858350278662630718999151751658417214897098590866440999092201908970405217151181916677531588126391148866486355596584519721899405760444541383544962722489875114029357216033135513811415437737779643777561247514270920525940156015070057021445589556923682615671082792479847690833002924073136137432397339370513067790302967340822556367795292986667622422991835236165285127792424630052345714281497090373958007873533009712803180058310323179851564088273446186130049950558067667847928286576209829335469946077179104819764051749338467796811081169318581581642850701153588880097116565036806635144191514941671379189491284471206062525996710209192630982325515553569877748865098007911563238370520552779962974699534249328592557597174798475291743896129283115647913205511724485683652165879255348366405023438903433484562441296977463064589755118577364288557833533525712147910220705629283320345221392498374920388002113076781370533887021362629864905597326338617774056928683324516257011958993549660242683378628080041274187041027497798834136787655367653313087762082861764871834770591798602251128431476037857054662472011944666943267798513485310853118021197803091306619087873370818101335777419097062662406323667850528298645645659705841302522876053300363978267616708413039423577121433189797240232888355212252359572984976125208566821140812480736284072108352440262297665734819819192122502735544582352754969285563661193235781572915221488949701772581090470157333949943304303258562699351706132291487263002827565568137178391760246763425471476903399001677140103838451942491852797942220150718465024075126021867404930949262237514847293928201986505952400034942909184404021589066392741316625432520165649180730478556845798056299390529868233644331355976433410122475395339372683857077054367193114853723272384165320308359895327456012695111158341679642973786987974118879672101864000622440671637727905844446346659140267379540618189466479973512691352669908635579670046572643071543414288852945575507001364000587388365403163906923211010169649609787771443144617832964226341728880822040252791050573628058886465561125429540997997868877363781470212869288169031000314873670199023295575975029256888216051199783236003631198408646449546200837126408047806205375568516286244938833513923703107122664057553162916061895211874413026882293647396162003729561243896593367071601927468297455059908329773843490942712555322638331213927467737996161390460580291397428087241641827588245090045532168071664305848368946557531242866689515860672755630196510501059011076815782465524313305009301928730197566296410986829702452451693715022525438145214864666547710131393893422930433170192612410872699695903278923467086552431305253131022041442224030817136355438528522927710943963127661600938420524965868054868420789110281366652020715320237791007498809737701793479928444775909635220385965554432486139403818709288893492972588178924163488669440430698055258217332383878998815578776861203408118636769740672061660441927713102293878635124860434685746066579552625545433283636852639248738646856738605099028379736959929344991408860138578579292810759278795009828170173218117855426563489356914140296451669797511966308454520777982547536269136517098058706965105246074767227371117788844144579058151777933868930309861162765115846938463381459853947747275772776398557035107245698846181277540908832896814422527395488764190929404319672627395382255601482932675915638164367605784383912597789157118099369129866134453961147524445310724935291432570358456707042196935301261866358927798468810349341142291611156159359534617856444941265047694063906146162911324572161847512820145217043951957402547150640394819164257476384755090115583219631277624937601796185647361374464816722286079605798681157282804842881477768712666527405194818777681881080754221642693036637898043597600173291293530540776397593912983219493509839629946441187964692468617078532810433116136093659551535138860229829786694832025732595062223913257013909834336129848617643821876714991430811032042401672948443617106295564657838664397093430728751201194167005351810695181731189639616620396686825283143974008053920667467718924710366948369410543884199762061772961627365614073985761451542908159022475474594645453428260577023270323956122594107262708230204278635766614607705687764981980866116553659699581936921712862570741253541801805383105858152652730146528763628550254584923431153812726414403489380619446609235095663174700659695093931838433555356529154564055522469749278362012539004460570850761165655051971287648503799979759701767311217436978364357210522552286818202064756315420591610749979193377628867887418264504475624922321666517244630230702755729863166168476152067458807632513614287747416064' ) ; +test( macro , '24' , 1 , '24' ) ; +test( macro , '-24' , 1 , '-24' ) ; +test( macro , '24' , 3 , '13824' ) ; +test( macro , '-24' , 3 , '-13824' ) ; +test( macro , '24' , 7 , '4586471424' ) ; +test( macro , '-24' , 7 , '-4586471424' ) ; +test( macro , '24' , 9 , '2641807540224' ) ; +test( macro , '-24' , 9 , '-2641807540224' ) ; +test( macro , '24' , 11 , '1521681143169024' ) ; +test( macro , '-24' , 11 , '-1521681143169024' ) ; +test( macro , '24' , 17 , '290797794982682557415424' ) ; +test( macro , '-24' , 17 , '-290797794982682557415424' ) ; +test( macro , '24' , 22 , '2315513501476187716057433112576' ) ; +test( macro , '-24' , 22 , '2315513501476187716057433112576' ) ; +test( macro , '24' , 24 , '1333735776850284124449081472843776' ) ; +test( macro , '-24' , 24 , '1333735776850284124449081472843776' ) ; +test( macro , '24' , 27 , '18437563379178327736384102280592359424' ) ; +test( macro , '-24' , 27 , '-18437563379178327736384102280592359424' ) ; +test( macro , '24' , 29 , '10620036506406716776157242913621199028224' ) ; +test( macro , '-24' , 29 , '-10620036506406716776157242913621199028224' ) ; +test( macro , '24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '-24' , 1234 , '151590600073425387047449072838201737923790545622778515405542489295365280374802003092345748753681766769342781749881287249346464958055559009581857595198530089819230481306713155507019243375785757736393010981297487306518434496622971579086045332205893329146303230768285811255525374621247345141815714309058936253285898983419720608226966436915189967268919455309262250618242751360361248909034678867178267283386443504378478143195886936482599662011569578168577981039494263767900563281750273077550310292671674973097829744745890473331477918697103083690536733167341918362953786259364594330084180149751256516756030378850936663791973239733978417672189517102102223884258181339830461602957890003315317105400603981501400219540598427784828262715802695138377182060865841593833485720205274139142676664443049548450410277812263367703519777502927932788452627831274636998616672291216489574557549335055172197580577132711118453026428882649878235139444805201982069512799047951007377619920034219848761549071361411729427628794049204602980944425540332659900016630759739316868023749785700349807321646264995322781924302276013058208345925931493883895500465669887594678839788578637461303074752727476500990640364376722701859400316730559885693050235239674548455869510362677791910042980988146640583541719495331021584874341075294784062883967560447377347188388603280434006674600263225696860648015867438392697049466565415507219522458255386701717251429282388492292922044650917640291089769306296653188826596134691225361787940784064160312363042310597352769798472903809450672123731170381463659456013676278088123310449702495131987916252551416683646406232220563855513976356100126013273624446723135664155744771247145879322648352616000381514511103819776' ) ; +test( macro , '24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '-24' , 5678 , '6909242543227743353809302095921095536524473561057165844581679410386766748488604299037026802190036290972523220194842752741485565945649373120593235468335848253481678944344897925015389714826413349410177631790045031943248773428879772739522827289604213275638780181896952443263073559712416131489957618900530740123400118237435413354649143060792875091318278585372437653470273949962335683216876622997736142741297958867176104235205056075719300228586105300420306369433989133325438387954921091906656969473369516356480833865066363304713540618192703365037455056012113960923122124179128736981338610956142771571808684231131105687569641388188446317730999584880794042484851478768133389844980164151720217542320262939508347691682342138522778060463084758675137561278861799859513960422378371775012031341809600887021827399844120518619103264164650677563352321974137647628478200600886109391143827381751378326104568910362334391415559848713463581352282420781294283758639369444314274599463207309901919833477647095250455332103956624216723089194770241296308302890710708138463591594108491375387092442160498438129101391736935004797211781736084624679135725046642935877005904500941008512545713383636775910913769118763901254831863898567559039792892496993193767213865404695189447620717191889574607271221253734214207606509303815710653198438402041521568515611813364721395336273048987799371934481049393697436377986134414568848925779333002134965587464106528152928197340289146528067712765151185247134251516207138782552793628345378997820905660194178001186994530020474952912269460972371580105721313532384574354540871635624041776046333388469745473028713013516683096356715177489532374407329471698695330614689214238225012907430432633909454857348989628051205236149551583947299465167194467668846336660944015180433931614586767779054115885111857540745528169992322163207044044488670657531868958992608214820354213074535958852759290564716927478198823333373374937720003672027398087124135343370691960382869258899427129220320143902491278793813238430465235860186960018237027526759813434944109474246741949527335246220480560254865111600632880608044682824898931874699864943855203431042365227377620680321459660987508307256592281727918306852635765535692503733218735444193207821083815581499399442219650000118107924012043499451238573570094079990109299190701814648807629227553766337073738504785496741973216586368345759189450452701067651649687981494044123926355817855226945627140031748054123594178696095671207794087457165269491338522780645313431934736643701650275328610821351006893740759674097541752357384338680350586790224882237683629538804015848469557782536191568984440803205429574817416905810035999083705208747035308838067377457376573948667705334690478735291850144203728342247634285563284902811919599506802960145211594874021503961512312094455587567697236904427829310783955019968993798633410220915273077833273759995480078554390567958801041571463441272562445362793890427049722892579012150812992897784399765836371711342270697399079409268621338465141537827604272596264561524757775919137279622148165105100726581985370376533708520083031902822380651049138314828258157760660361052917356148361076858029197983199714799549388753138873630163899577287697011072200217713083219980223308329072386564251855404194759034472140811253397135777998749327737590240550674739896553325406340850660822401505867952863442378032198550214676960873593184653003702714053785570797139346858405632080994993407154375607762459908870347788282713628065134448424324925307478350063149225594053973115267392759652869926859055261981795715793911665450618835722442776629043819843412433877325397811994145386781513794026045770684736082651288118224886713369764471121039811165405122248681255438916750835952141059316087666360985121458782402604238437689336401689176904961406119640521283036564242883812119616205627240236429984215840153559625562378652590836660740334768903772785794796630784565702603904128880950290899077458848713352239690752094902536139625944326846369933673626859584112711752192959568868026727635227118775593609034554724305741667971932241251649212234621343015740929858616626107670522527456130285503983446125409978068781856751731806377464920495450984236307279195922116693350211579310114468642544808587506381899146228392160338911761298983523394475914069925661336317688601614635176466936516650628457951262007237173667306984959634154161894116260039666735252234838350152349621573967073004378209996258899425957230823935962484203146411470794692397709720438221504023967184703626974385880417280024680786833273012433711625620042440253039851842539066103583671616276204858517722243909738410395578467951278134847051746601519549418794912211694740522839231762718034975617793333279450013015728897326891841305278169840750523025407888699660353086878542323408902020520745137853306948470924526832755671922980299901111454489829178447374350297734241924593197533476648287362705907326587903971144933195960309922016559115259145542602390960186986114826396112061139400167607740086448386211148049775587962761029591347975930271748327096753101637755673736334797475756177782477162997340502006754139409837932248709217588171272019845846608674183857309614487497423529281774820812855625200995143972487433890984243531847462852919240554641115522799596773636837906026144057598069511617898449948350572214384921080971973902502402211568802750379122998511274466017974941804703068336349215856446000530541951506765590932187755221324429657770293929726963214364914920312944839250592743611686981542097230343416941015181738191936768424805774791532673824342775520989922696032234542390090970378211787898110639660594600049631415764918868664882579924419113193629865077574463611875775532515680395533801486247525366388744886221612290889104531414904759924423276133269774474452875660758985017677276475305727162499245682784233172420800860481499133924145865006672545584647252606595826412236376706363585768675313853908404643815973889284292155410703372372413690775754902752855223760995153783326936793360537270982814844058735862825288469622833678311343943432205861271223777059946323093642457760026188705359296753808062709160061509562758124516997994361930873438768495782976556725650123698976773727667700766538233502587452020369593449922805037117490069737863202092655675092095120263618908362070898189610949764500023308769612177756951169777556263087771050269419640346318095925480284387495101736136602935813966818000418340535260863387002103707013222602870150906297763302008471389096475403406466296868498675202862934711769313692649420019010134057017438532712341527913711423268858441655875081926096567951606219719933592384316299968711193818524843736420584441099884547446077376494324792588069639621837526038238059880241227778527626618221494264760180657732801612348589103290695260992552373632950395780820971888676534078241816018476901814022905750537014600909836985401547164897051750176229167184596483534227572123935968337358752623038645346798033051576788492613747977196321371756084172394656509906994497839796532944821661702141307321688426555797056528768304358309636187850354312111960227634944375652263825013063956181739704664262214737743372154205999348652610776761883817832581027315985029870825344987010322787125818214235132013611644153949859858447569681743008753567948866312695912331296212062406828770679518938594754011864087516302762316464021883336600792442268009755925214689196103335236650748927588009005181069463851717820411294243164434618318426347580730703078170070907659408761721872488572982052027987813740488362497448333259178540819360984769894490609499528923446089556631606201168915777672445957547945071192408471582321347458393347744642123820014403943301956456199036248285841251751630923650699885800543144864303330551321206054023250603498937703173818262472928828604335469562756457727795232009580481882359659372911042201823035731975439128565006789723919934319797028003654293808085441085447766777266176' ) ; +test( macro , '27' , 1 , '27' ) ; +test( macro , '-27' , 1 , '-27' ) ; +test( macro , '27' , 3 , '19683' ) ; +test( macro , '-27' , 3 , '-19683' ) ; +test( macro , '27' , 7 , '10460353203' ) ; +test( macro , '-27' , 7 , '-10460353203' ) ; +test( macro , '27' , 9 , '7625597484987' ) ; +test( macro , '-27' , 9 , '-7625597484987' ) ; +test( macro , '27' , 11 , '5559060566555523' ) ; +test( macro , '-27' , 11 , '-5559060566555523' ) ; +test( macro , '27' , 17 , '2153693963075557766310747' ) ; +test( macro , '-27' , 17 , '-2153693963075557766310747' ) ; +test( macro , '27' , 22 , '30903154382632612361920641803529' ) ; +test( macro , '-27' , 22 , '30903154382632612361920641803529' ) ; +test( macro , '27' , 24 , '22528399544939174411840147874772641' ) ; +test( macro , '-27' , 24 , '22528399544939174411840147874772641' ) ; +test( macro , '27' , 27 , '443426488243037769948249630619149892803' ) ; +test( macro , '-27' , 27 , '-443426488243037769948249630619149892803' ) ; +test( macro , '27' , 29 , '323257909929174534292273980721360271853387' ) ; +test( macro , '-27' , 29 , '-323257909929174534292273980721360271853387' ) ; +test( macro , '27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '-27' , 1234 , '200856075209902212199811223498516329401019153294330654484899457135661710831649025094793443576863417869675999053574959337346792532217485737202817800641723197630343724422691567676966750017719674361721564299756255063995170624987815873886816573528036690980712399472082918987467608319915320632750007215671073941033733822406638067457070592416925055525002249965214978226439419675794443664397992725836030753072150525500182271105668883387299438014566998450801673929744863349108063057027323538841038850392906331064754828529624866950550712400849201192591205142296901842010465055290151680972126095024443830456846851602321575873316021498267598562024770678289890230706320997870461736064158216930272006483331205888383426585499224333788304253250735446206878459830691428518801804316734865056012563110060177249063533223360212951908142458456167777780005320459640618276526423350311574957115723697862633038912990076590485058168720523332363832907739630745212612829631298739740918292687323963984732777515115303964140679392026532299969353302111690876222512591852054954749110470134966527453125805201071472068728012702260328777663337721407575454838256471452852284288283640249611394712320213997254539391537655386427263371372214172403860536953046790124191276197581019979325589039334200287751090718265018203205058843589368322867283544158866611521312017186795565242663733214746314148048347376472660469372081324221562030477828367398702782252799482995882978202357840004609118497407774448098166472475681019210778338607385302368427582889110199771043940039384173696648402793417875142304690934448344767850874922126620454594771669567183452729544713864889437820573063999170931037181075406666631149358312284169719891882097692840499902508546688352472767932029187479332141883194288344509584921993462900826009' ) ; +test( macro , '27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '-27' , 5678 , '1920670627041206840774317663061948531951548392586808036968655466513575530956212975774514238251197579090763349520005051835865042160772589169624476421706202590867860836690838786680450886141750404308408100197254742949071761592216668354595970793821666614574491628116021852490928266530039402274346603263915374906973045214520217579266276548940290197959870301983972948179342634336579386358378974195640173820826951706289068255636419593014486343794593987163856420064173623896766989137738772776377427442097331419584717293530596353658978697049818315083325917184148323246870360758039957677823155528069256344361615958925614299682556146381515609616001741477538909124857988462042152583475858959708352329078738601094623969648315977840331485254209899871646649972472372095452648168794559531587891304723383377106143342610066593596322450066346593064250164293612171399887948611723002687714633034005580022925175850122398245122163141238188056618415646875743299757508586238824342158406775418269157574948228511042170075383701360380600119963052883698603996010908136679734984191666988039630564578030822333416473331686176299575683617183902279297306358801915764702865246245093148511987518794036684029774730705063803579378907496553385221304907007953529232866068390828615106548652525036824065996249327562337880011776639185551336530505634619418517450596528181304358633713465477039574138461504506994233623242585354356605524242258852820324114074452649908604782399002596550916153410839185516390213358357834548623096143445732587215823810288043211299034382028751910218222923967466149776778576877664248973225249782758952557190800287368177398454902378376415868362035425615655624682981455869051819800859456132732320054055510566958251135161043336938045009646963245189593774509479550785046075894792169710218139317967718680527440283599846493280581066859320369808514616618064316610685296144379483228881158978531428541323976687007318478840124238398533801496097297015071332134452660846054421428149909225409769221839051449083375270329899898374485884886887125190469494156954015355114580948849208785046347459412975637271976882114713062112330537331127876640249342310281450813349286664902834009007280339950648850700440708748555487997305797417944284640312847154412547496220096692340189416832210466282566649332925837995666008798051378581959040498954085132477390853383093481176129650878445248789958824391345493197569531442806979176311248211412871040845844736158339923712459547591539550415996003282072387219018911765803789518884827791568134984700358743507239288171453633843763592103578573012447420761597931062446196749823913274155393819970124816742398443420049898048112792722620849282590853010364704986150303874501432870838621770926441069468404770404373890675534844221570867260548530639691411361203218650846445492626294997020128545271334888747901443583519313242322333157269016724544126555722125271718466441377338744197144665139930690040364724035268720548346016327799586536627059546835935892111936009551045577780871821958233775831514715738552477848906407293516034093463840649146923172863395128138438835433544718807766062278768770741451744867618368286602135404656520890155890101238524261112587615907631923684591193938770711298726617459834584716577454226046024456280984368570829122148771541978532132344153800979821391341346004725017526699171610089317393609489521109593485218609778690258066523564081395391334194325940849299429508434537825642151593153347775123712329348554222878530900249479115866329061956089475067568518232744646491234812061940598193564767933639294691752620290371604670392024822794195223184833997452082017311737450285129468363744078154728675038628714333873175144570204913129267965199303431706858336186755042226231183468843385119778696375795488511428939963856300359813082019502017643381504199506863718337397994274997752254757708272367666078675965040032039655925062247707075636789805274539053194840259610422752138553537725180597167371438930229420783619411928005931473865400477223675968308708249216344281666556496504984085949177728422334819418475038623078588714141499380129463420875932101260033375811625528931966565505132882422386608325523560248190689939207313386561886327643980713525129761663096753770390758712896499116510493355246860369384153391737470406874172921606838934727403098744014663071565032303777192174084122582946730008756106536993815320872157236729317634745631667114394136303705919618073684341874403244980777746281597675723918499517754138950341742429841628648421346110812738800865692526985004078449939939783096689246579006137481593969321838858087486685024934605209896758266277194033480123936439845801365328872002053460702803079717583034058121243760136910286949853216903677522250905510392566713879118017180689421758716319873286365642344743985956630970396015789433527653341599927766716994599791600982672311972370893852024580742922038592291822037985280439374076859860760447456227214570107076713441371110040481866528520446919136604157813535069283884957393825645814464806264277503491404782371252976040724254957145667674092298268073285259823296618873217871906591552510862582155404488921608024654326375619469231209031828858072396365212385640204416236746788303867620644842086149794597453008219491687259712252301584276458360737524420726294591150435186990238809185847919451252123489656372496043613842279955888472720044814213508941637152519990348407148927393875038476852404825802087693473325854313140587032371097348401164191468159425742186705236542204710037466387769479015379900734664129501511212299294684814946146327048005184836003000107105496191991647505947395678538952761563693653092396057893346156774141317075936232087744314496490509956837645841465967388142202300490064869619347902652823984909945873701021070634445104869604603785547980280081380393790903364474376364758613264472606771556227675845245248027497873498296375511004458930274898993867038605298383591809404357101355240283437176300862637920738599498741746521150167455353523330927129326274447459351643494051864005920884002398608267587991014622605843142855151877012756952553990368252360102557816678486685822969507404277254601956581010759230620724352157677998795938501832890979436797552440883742531302558570709076361709043133531426503972386170819272650464336778033158976021327334838579925495189278796979109139792191232782473002231837350047198764643616374041356297768694046950486001246185234359318391038800197857746441789669972513126194313149333382712207147511481557975622743732344202629767274244165956943548372982915991124491226134463115022810739060569665040240717572615620932472093174981002205974542066246133177952669421013895627060630464567760434256996281799968688229590092429649604880061340304296561685165836856606423053897026939262772456099432796351052849390003427289920795408775824445019032961645886626504591512212048335924123109654993739800469629501329929168753430905653421576424474668087832145303326186917347787604661201427588255288110103869986804399331506635536060487601890785562151210207595887133197464066346972583280471678345734031148539530692397993301487901118668413151152739493110857842168357407107810369630513619746957021035200287975064451571078331784369474527599711715767496931770063061477359695737750256984149156979906478297668490377273421425063634135938949613904319446351606432659158890010438536452763547944727936040394443661905803287318582738928999257571951746826811304523891797753282572538169266332939635099581060985026521423506192706942972853666059905273146115417304211233570424956603493273168920814813255134455438235602527751336570402852196721589759010458939788308886259589255589838453865926112669922271314441973202683425050250138493114016754036551602588968457859033236160720022442073508673912688509196121011581235868256299459315148083511624384602779057762575835218305144492664825432085770601166428566236259201040157805073745401588372353777316940550146420767400912250370939891562978931549393144124943754754417984294956325477143759436596679468856665971712954391480006376974981025962172422482296884009980457223252674173743660093454998272067099021050616490581360309414669608617227081755602192101247842052099617282451750980683945908343300229792225173818905754262604195304086203817551885146682726569' ) ; +test( macro , '29' , 1 , '29' ) ; +test( macro , '-29' , 1 , '-29' ) ; +test( macro , '29' , 3 , '24389' ) ; +test( macro , '-29' , 3 , '-24389' ) ; +test( macro , '29' , 7 , '17249876309' ) ; +test( macro , '-29' , 7 , '-17249876309' ) ; +test( macro , '29' , 9 , '14507145975869' ) ; +test( macro , '-29' , 9 , '-14507145975869' ) ; +test( macro , '29' , 11 , '12200509765705829' ) ; +test( macro , '-29' , 11 , '-12200509765705829' ) ; +test( macro , '29' , 17 , '7257147736730073114838109' ) ; +test( macro , '-29' , 17 , '-7257147736730073114838109' ) ; +test( macro , '29' , 22 , '148852438543083302439338564577241' ) ; +test( macro , '-29' , 22 , '148852438543083302439338564577241' ) ; +test( macro , '29' , 24 , '125184900814733057351483732809459681' ) ; +test( macro , '-29' , 24 , '125184900814733057351483732809459681' ) ; +test( macro , '29' , 27 , '3053134545970524535745336759489912159909' ) ; +test( macro , '-29' , 27 , '-3053134545970524535745336759489912159909' ) ; +test( macro , '29' , 29 , '2567686153161211134561828214731016126483469' ) ; +test( macro , '-29' , 29 , '-2567686153161211134561828214731016126483469' ) ; +test( macro , '29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '-29' , 1234 , '39730991880495272432206471391877971807542673627957704904437675569298014672895070646102535214916047201597057604326381566232240717146352905189648219707403914660579022999012335291748319902460223265040313524900417222861808879210656981706108411235266301032093577572784389639719581120084786412413811442838338528471340965314240553665532845900842671741344271394471188943084404951380820901385463995110598814337441546368977234557474886215832235597884716646333931698424620615636355660537976497375196427830792301269566792792820200233670131878651690073642956396203530193828971438659013332283684624052196883142348635262157010483447752926525087705971032741588045925402251432696384942322183761498083408303101185212952621515583790502916056759732756688326445700770330618736098784570958650303610518453345373695638406312777059006873348441083653408306117070042611172352888144271588938812215283718988243964723451182501170569555882799635882695185231569905013697274942621016347442475467611094595589653640159813052986283489436916917813443702411392363491760078918071760360736064794346216924583036877713278321020682861527277057026346194702327617123158348328127954077761730411509703210527413729724018291740451232173623681566068132712321584183435235162559116277847790802991789615957113420980884848226115467550693444248836097094675037594634337127844160706154634179432597281415179294940602829040686835658254209377758530578171235783275715264069690583402743872874027236142735859680441203304209066670057316622505879861269271750030338720992453155828397426773289742123912597304182933866285890213055204261259697174309425441282464103760493735120470209861686631467978789655753554085703565573238818516254588594497513866508088253727621898347478665593386957598553232780662697618992458924510409036459946339696264729231292522628108751878543189439881' ) ; +test( macro , '29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '-29' , 5678 , '313207440313997908395360596779470167556524821354565066095934942813317027334851280816617044201242781788146681988256606728079031305742275517077538609509120818518756804198333905529512296693856744615547940344437655023604047387036912191665614525105764965628772142528903024079009603734878606031530632092694960209733041961976900299957401439942773853016980543659640387923110020096006907771085339532274479213069118590997912505738354256882132244489587891193436787796035297069548656015753468337910267383320384793478210922890393478684942943141047002641653826266029229940679855534185446029984642265309401937942618414456448051700283163409781590734858988186144878262850039132607214392219461954724509852981830436014103811121607636976310541241787952347172457061695467609228341593457389693092010216371829783365534416058276646629047941217000988603430079143125039335627916862701970337819367723342798417859182486827526226654222231668270437699336871914098038361896878124581202115603167581573365860844809754272768688324186177525910163640984471107241223997815556859746973062170016697071082852292553186973695195935555110865322841675967709255577273671862096739084719096018866542773915268182681924434693068974368743671856917344307823491424582073941774677763676838999012920849775131545807745557984609998089011839713971782596354276378462706118799367614933692723994860493006852617761691726490661973852484146025859542525994878650901900539984977032822503678380135265674374963780412402639819492697327642089488065515069103579821680270517245818991769253700477178501902173016760022083570625339617613196787508937132294439190707656675750593358777466252187024649444055524431976996354765962227578084126526998133034612602577472655126094054706811331042567986558208826619738372058912709936441330068785945557615305430573158660857083639685984708079449553432767371468432769763059815568294817006766150407711429524381443764353328649143392243030605175631903617241400590334520731552887905420357821333357323178558962729624695160152424150927961815517235178471668611411980527664098448189919626749630449729346413932330280051038124207698726994136053148704139757193993822565645450063014557144715444390692035805048906587820840149620974473539068602257213468282796698357998860905499646858875696140347697252404855916130979765736125939491404582947894766627011437008321826084551608917643552039692092641434023416721725802295946129541224330913037830711831897505727181643752070238124258716406913604326003886892777871785171083042338438822589466034333257513519074249290059508044387937515941195584536849935639306854418549865654614408061949225554166135582427881807182193783599601973694343161657685275975826632605401059697677450138694781053611138910985474876254987791226771601983926224950708128705207698446999762970868619741399138388955923671766834618892101519803294063152179901055619441840211468137457499243080615163211420407368571631248280853519881920654995329479197651873469046539891470723077610689204092925437192831324700740508382223044845331373899396944326854982107248264681927553073948403069191143379621931012158878080926767868489154472525785183112596722186693274842978659686633055410031307047971804940821454957589943688441766427442473419051396660930726551215776955035627059923619934434939234337389228818252138062651964023385907259716856875217332983206258542647956484144053376895677282058618726894075264893141459345095513971695129554583296521812210859456760034199169197708311366529261902786358093999101305450016786730606230292030206470077429240950433535818902863132927160089386510261064201968667301688946240130924904222733535811233377310709070575388538077218732749361385735781362671410241779765408330752886228016198747347816427191393767361118607002910804994498483946180719901059745498161376023303011413268091725633426377641439705607490836958493776666210760974330249691898146723384558621097993110200107834567985162015781903474771053336026970797082827405583984640152590311586996651130978390269635682523375227724690841049723350239062980077884498173472853922895986259449703557854615873912991492706834134188831223288072115285680543132659530562006474917573599463126164660175597089006340798638300090399758336562085930375566544725514749718150151542246563296277642802552407242105936832988106386539137183422418699327088241800890533010663176410353351158461215403413109833504713371583660146076296550323246201815389456172173706830863136468029781683216347313194402113678038893523681163091511426864300172115307127211628298548752944885599448207246119768819846726699639029352863512164216176446798914058117163239884649542915510529041947704391959354269079196393984501554075330930504966050842500838363928465487060306050596564952197235832052713931735782408102332284034120417772720870851192746545714460855294262457078632718061537234518630269810919269617488169257070620461029811140007937616623706165998602970962299178529667384281611711284607273114722670486790204254070817193833701660203086417276450859927068939525290399922358343072724298746965385101645299436440204421048958231664229609473978540663876261084401885358577081838088427532726342531219666349529588708676864620007863974417011281178486555297841836402783955736921273673850857042328354562375043956630762645678828277468596945482993393974109650561321318909283802349703359908590794955598686861188105172867117624073767884315818474218316939810928386473450140843666379789633933028157360991196643780492156331045116092963007359899178903786388658268081752185404862465975652717573346338903555552006181453313780938268351957198485656126588122587529425797721024874117272720122593011520181102165173778540109649069873683782560225421253727583520275185027823279197281638302017391265559931535066430315642407161670790778165873761260850453732642568406324331424811297605391958431678345086072195795316149924023369165664626175580036981425302726551623339910755431707540465223502996664989856176285277665969692278401436557276802735628722927403361765477884441622418274020615931280165006550295668823519197254154151454712027583777160043458631500373569552286186287576649460507457140013106316295491415062488184750166573300098842610352649548418028671322996383284580438817915912751328692636309346404265340559254967861755662343799686476963239624473583538068952690259757479187975773947646635862072773097932605011147309545946917745817618263320705384509256266597692822011258526575769901432671791899309866212784593294231039210384345017912165232281651766218511816118452245482765148462644057186723738724822065021604329606577441416459752329357653818884431934533205079171447937450753200091846699978761407348142216571160734786231176158036173395546313127825240933740557460405345687875822691395927735307954680584540631539852299093845143573101926536856436774094890716935644906531408882553968024236594348780230005657598271432594655727370741202306848716798905210887080943457274364437927441617729886063620378682180675795409711770720617214861995899802099720841503268275592791154447987570696376013830399865593021757490603503782606236297834983555381943082960053607082894098193433830439836836701596825459287327985068484765725312935435383570713001737353493414554745918732199428982288861916281925853870473235242613934578658466072097633829351396159739136586030233961937919001934510892835623188835150906662666684162280030518846926507260191259658152547057140996892575994838442450176092944932641609223450069710549113423096908693460705811017954646809219195537407087992070845823304506437379135120730335409827645953230507797899159560638526238733117928509820396840716609945419171886667127363308348835299399638934816341074966311440750045989538622932362121521488502205477949656543218950989955469235493902648629617578805931019123481068629850143880665080707955617337916811297483768702780290392503453278969467260654930304742159521939597380725090779572928293901161522955743015424778301780849024292067139437382979863134823284319627217588300337639449928419525514096794167112290463836322735157448121909387510372861759941692821797921023914852572773124758265866489263355698959718432102332876091323039261846105459189300877483349757964955202240267626882379975165911407692612296374563798585046788847367663183939085894084851302628081935576963248048370548543807192978291741302368501280165227638198366783808938518346282718195546770075506680849155238300453171855111852650642578666970792276185247457685538362574130361' ) ; +test( macro , '1234' , 1 , '1234' ) ; +test( macro , '-1234' , 1 , '-1234' ) ; +test( macro , '1234' , 3 , '1879080904' ) ; +test( macro , '-1234' , 3 , '-1879080904' ) ; +test( macro , '1234' , 7 , '4357186184021382204544' ) ; +test( macro , '-1234' , 7 , '-4357186184021382204544' ) ; +test( macro , '1234' , 9 , '6634931404835663880262603264' ) ; +test( macro , '-1234' , 9 , '-6634931404835663880262603264' ) ; +test( macro , '1234' , 11 , '10103381606301936187653160695875584' ) ; +test( macro , '-1234' , 11 , '-10103381606301936187653160695875584' ) ; +test( macro , '1234' , 17 , '35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '-1234' , 17 , '-35674485208164146078917356926246803757746166219014144' ) ; +test( macro , '1234' , 22 , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '-1234' , 22 , '102078319882560292285132581626357595569664307813353093133708407341056' ) ; +test( macro , '1234' , 24 , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '-1234' , 24 , '155440374071087980438939349467025786799279742708630302687913279529037070336' ) ; +test( macro , '1234' , 27 , '292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '-1234' , 27 , '-292085038627598162546736469597670733650101845477820437776597715171027672376482463744' ) ; +test( macro , '1234' , 29 , '444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '-1234' , 29 , '-444774245080406867607018239498670695690094485812423938546940830362973414277322930560958464' ) ; +test( macro , '1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '-1234' , 1234 , '48184467781382543701667186039468406661059770237590274727670474872867568934066212120125133953550629961484891523453397766904292741725027019645437267985042784717562212455213265145073576158446772320656790521515384533153285495122560467130551068937365382642309092956110550380937116582823950116105467284919886128590021120491211422848352480419801389040432671756358444906225483817656922238136306002774235317628882806945193646888148396110892049431698226720231373322565553173892155104287328274243305595665720786784052656812367125148945799485499060066329553808509237311004983159894774937428752149540862686417306258598574741354798734543908917749037010338607293558391168741173229347205324015819180886782731783732875096308025479318621477536729557178851277749719374746640105570680704597488214460168162719035143192317718562628271959732323123847141889566569180545843169342410738692059982444746465750802950208574020617939255322870389259522352007286309084437654560750826135123276437360339867137662914521505757477954199067061537563338324827971696801982963501680500285473348151566773437596060788388816834765832275133438433921225741018069257650081651893412763515411183995641907421720698187041665296617342826301233824768831086783439617690340317902242011073693697825044232174730876417203502412742085342749470261962000902738749779130464597185957223365845266728739264096596554562810900489160285087089151363421121896616575007056439552166409310603897415780357105218172824045265515881762471530724320743935876223471758489130857861949736325801719247163392163145092104862730777665632878101469684676983177748845758819134783307275384116307332565581471205450219638137864387568253396048525319846029722597087368081615296780675739066314774724547006391416740049175425483980982557830287877118477623151223431159832554386188341940675670910313367805899112248803570997473057794418174867654496284922646065073429519234590181376956226715629044946363751414558194273837719521633486883608951520130473135848525228767697904589545099613408858934772678955107374792767376297292404355699412788887158297703071562694349633862471115563026643188726923335031942038276485070702440112289573556176109970627523424440589934713944485023114357294128614721641112627517540349238220184422744440362721622786094864017694819354467741507712876404983391152695521440373975295468154208059821687654408426427370963930322531227395895396783921477437273314199002421808939747302217153865116186806351980760710239964563379901328372415061933640351961853616394184876278706277214297206989695471340253866298118966493903627998818702216683968716037963198654625001668768390791943686432733286824675468274040171973201059002888713965690564527215419345100503188258777506372065686193271207542007415422109631813074486204833751677472525228744950194297089998305021078379670692156515896561318156670094486647187285361909788624195866103332184213842805429511053631902833667630273693526699848894312061513323511126288640008264849029913769883352116160378319937025276742846457501369721989078408607355941517261584972558483819760496804231338012065441081939772196754109683768808242484290927174759258520839532703010720373548957783991479615682174614219692539567777715560109326389875468292301222743028820913581258063284673412787274389056140124677069653486630962880192937633527058165237839406307326482619493415666561288774929091975803346338652727476500670928651812154306332363280019281880148780695662032811060669099701522746512853264775139655489705043573689252437465482977809592752059272522878781208311791893662451561020284928906469358115442883064671084339186725298116883304622860824362268174217031187839248915211550033719913619980315078125050194505282396757349145204835262063407488072671571413182055277457862261818131387963934879102237121895980689553963436483304289698371277085427432858554859126640569432899045006806292448711540736' ) ; +test( macro , '1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '-1234' , 5678 , '307239295662090741644584872593956173493568238595074141254349565406661439636598896798876823220904084953233015553994854875890890858118656468658643918169805277399402542281777901029346337707622181574346585989613344285010764501017625366742865066948856161360224801370482171458030533346309750557140549621313515752078638620714732831815297168231790779296290266207315344008883935010274044001522606235576584215999260117523114297033944018699691024106823438431754073086813382242140602291215149759520833200152654884259619588924545324597336231254738156229165754184379098279299262049527493981418773939710052567148397520139396664287825920245602806281465369440795094171273883323944551402505328195835875189714803373532518976612644335221127924375262338025026738810109229789066895210195233568313781368494583937688244974433119626632798061718807757570369881396496330922521092429743441101260124582034961693322001051820700723840579394700173377538808676217188816149219248363818340764914694139680749024310479827367842428590981843277277511673125624678580926604235648781819510534399854187957358228934011534030807453365221505448908659560252635131850623331246397555109848508339190181937347601723206430770586417066983949247170768203919583900239303725667699002878222006139705975234985123135091187455708833574958129058095463081654382235387683423032727818984044935970076132966529729332219803725615665380149260841248646307744074852263644971412954286319498473825976906290726980643387278999438899482000949753370477834589869715954340896670602062189642115067712194143619891104758054603148185422879681279323731504130318089025303464892133142814050831321280869931356176562021125636637696428931550149163626111706971094926279122079036473959349398647207563958880810847203107558693382581247719368450328373491128928043528764468838481015835481857925222963292893497064677790987715608519992573590320785069213807044062645935102241563318077900517348913659692426362075079090302084558791018063653522660752511850417737787810507118607660015778345736185544774065149632138946958208872078504737965494929224554757212817739013665074197553518364007019034099233743417376008297034225146702810718547331679637811882447383064783027200681712046322391430903630967737127735630322507937735245138690231556762427184206415939967664528096214944050443838234089893942372249310965891033124439206439457942974559079093400885882410032029710828368112382759140589323805553285532286914003552846853057576991775275570301997344165769850233881907361264015895890818849669805891907459800581990812691006812626374363578450984335517894357744829092787395926839000023962733949335231397395401479346911188305001193928601270290423808867456174087663596893004075220125591262058242530195664451642127872992040342213830892225801497136162152126452814636821372850336677985479349893600592592681158187543928904613001813023098258056853626951063105305617338502819189272263288481301255674961962172018025892490871747497521613169302263447945299308964856799345744118753448948756633623000928292271644274476514153318916142897646572809647150502567312733052336669846353667317222010832483097294019925495696183147173179102497732276927446687768280599040464245101520966166706822935112404086619669510798582900981432655281831317374774621351894425270900215984721126295035504324174185149268696653681359521661246230845622880397944668142537238039679575235700048519280449389874038813948425385923473788921228513953652472377934540266323863335829226613711924193402576311531059727276108808010971355782749309158823047978491790920875069292996040857512538729285177101496567684459641487139689410758137498167987281056377030844965856298252042132686609411400751350979919962404101477738095442835101123059316328509676953867455359567416099259739884548059992245862006247543500012335979063372087713854337763356772298485634443508377176714285187750207610971059830770832297524782702349430113067885720680406382750054789965311761788658021072821754255217642242163558086741759388374052688951876547395076883774495970922489499563244338874847247075560546870915783578293537186883556120656238250632036990110926238158152815482271306910080137344309034132272734875502201244632205163102423192286940171017158243227969637526316846974981084420356508830681480947885917792995548959521169789814827379240290484939291595796335808304369249825132694371154995629020348448070937697459457310658016390510669950232202117026949332446206032626619437018409520774627547364298492663317409090888105284856231403203264042680650088950260251993214047720274157347392106720550579972688296788335711267163348525040618144978956911125218083835003018934447595528171992681871934696456852699493142208475082155078613935820598046951404164272965056793854322831971808425855979818512937009767860333913142708117420468535706707338985116178601074119960157589096146389334345593090791448497569418129926045664495907334153337589635221974568810352681900639590387377238660034950767943219972827486077231842758760058663109292511409668322244689754266200746246009494113605844291527613997239500108446722588067983522129703414514679248433646988350542223586243640715804222865695841503336942447435284973707708738401917434544559678813875897734731101993564026733107673289113791026266802347607067756870070049091879278550780571887185814708537343643120109716176863158267452564359772918848474831928740035479988942851917286977981468213676371170376581599421687421157192621766056282635455502745345422134109463656273257647493243595299386340007285458064661281500227780615582329762847666128912270287127702011512298795737439109946753443411265222017119479062242748224835713889637406840422012428195129047091229247913611585459076419478870311555089949116202363154707599047680183367431508170042693609348631935300963606524001909354481256448016576044636672552024793800896987328626909995732430432770110962492541560005764748146851044781232535045697298013876874942199766539748522749578575930121320360075106502263951925603758744064725542088121966571973151956517962196033756616574064204240308736083289250933661070517861933607033805383794022932833914403046538303160864479381724650667684378003267241939785566603437594388219429227245319361052082720101153688737108636181648544729232365745223735571958927805431626874954284337872776726226192776223809114300468574608813958523118548177886092362889284408683605828714504550636413269626117352112283711190743705957538771405106257296054814739841947086172415476929232773599749549247112194345575894505210361533349007732728515354190634197202883617455807662715540116552260765510850657135720244190956869964668147050309837395659245843733132747750125006720855350386404222102322699685624358041394671351793225094747979930897598627334206296992066864002770865189677622663536544862088852637370423181596293505045491829198840304769603782293214203771365262426835626638710332592520084894203380483205318574229509791732093263658924554481129110023771559358840259857767832130838951986420641743231157549206628101961335770935217869188598407871879846953788231452559357515703225887372560571514246425295258565332871227501930345253728333861399415882260461345687393410071890081321210957633577414930430621476910640788200315263505324920812865141791848583320684391090487087855177019341942297833034669241769410159832097007619834572197457123843735128138967329683027440008185533782920736485842481620240819664388691386839924189266798055808795241509113657623950370311771062440917977857478832595327568508967705426889618627733979628180362261623944529557924325588829972626926001856116218149641848931627611856095681608502049604728694373866998800873793794833475389120231569350898916749652696861495083269053509194449587614725554391245026950041678221421784696915639893978008988115974628714547147103468130211269397474452407156217137857585748699660585669149692200183240671446131671973589521765207492540448301776208106269303417635729945209531363305026742848137813838295036147383212196832126162865335463466561361409672786144491545547877231568077479720810911371970039908454207555969974929024330604715947635120890002757270394372957682905595391676060862365861775640550248935336685083103867570594614396930935612590413493959149016850970545876096218158891338146114924706065887199224191578080834101491435941396082107871178120691839003211534425918642587315041952198269461336583739132022883309457097019209940833906282314924551936086693600235902374507567167637535381913303859494521404821158954494161315238799966252882039753927801125656757563231893176983091324850782220479663033201458404864019043728888446967709975804533406561597647307666736915858037493602438470123931843180216995263782074288168270696306819344125131703913727531436787169764181060443128826914028449143343870445556915243291006445590059689543641135357147336450120418996865830009910043524732386950657567959305789673308988840460874020981183065604588157684942510453265370111980067359260650568119370610380556946353747266717913608784026798916527135355036629347450939565819904625935450373503394875228925517167402287702922664490685223930566127022783241602405058913218083039094404066037147525985595082542486481669033554440669209239655726473710598417289863187780615394059781396829068192614265298593097207267823436957283409373106070373278544263878956713757687019674587981457190254278514279204605546359474410508605834050747211850883484821202442476380159869647953907610229592310303134114435748409130185991653212644798150231313091123308159964059871142740195724462392875247410611671330900705772528157325261686884901444831627452426862521432079108938454589234625663627219874064683315753735830472270203230291590088379095823378190821206228778033950009778463074754597422953197657206227154124599901813786834672435550297250999713209514657587197026419042487591887319632167337140620411177338653361805100343525050955261127436206126342162794160499514973561746207894282310244084464331015046184437092252547644317599059469495339372219011274409057478305874498858052105032898790647318808541273973307143643618340481044516933353419712178803129533334912992701719925571602601231239966045848260929819259463725272466267039934723526708966021692828547630900867908313425791675877136094296969834925611943928639082538263478045795468797884085508436740105548477287495851150076743539940855079782006029276242181215199960474633917064701868986279575047584875782888121629159833482729108471411086004777222004940690886933449751160053486753465048382468022710892618307193393528079008752243904763586506319110138528885232166270184875496667758544101338512476188537568996993043100897750547345490436292741108436750920835304292808262544944670065385074720714585256100047460364718010959212394917302809571145040577796350681992159274957618160496935869534857889595670144103693696724808909241541937251046834703005546264200526980116401703872577549517787709928581009929724799949713171016514146509097812026583336780509096196442473618165553854996468315728059606232406325692644298205678901764327286910778328167615148282802913180962943257625623528207208823616122188000672048377973388690302368144655729681461875178487994418224929756029694157916324380087380717263548515509059805890429224503660512145778492057781022321319300741401538410679063054050314878059794599008988939481984403757789776259194385861548907079786218989999985501502512699493693947825897304013412779728462320145418134117202642305220024682824144269946547059866645346290129336922393759141046965787439826153450256825134094790929592783588398691272222187792943672971006484184098016720992986997067386737093941669105468352548563143947335409769120498804286178739726148574102071841252232146176236358066633649877671588502174880747910470620226875718620591588580632465728693537756687445252996484012749560906868590019478473487675167061165693342982827540412207944219805698909631680447518841794973864110724383885552977456485490355687570208317569412914524579582528443585244963004875806464317485086354268522391292873764104739225726087924762553552795782491218068168781724170435932899368215004200480636159439699787658534222744609009579495632497983889807333784591846944280527939629108316893490033323187019394767254142325425613836459619989619263579911717847411193199852084628049271525546800786030737052994542939990268948285213669034871808549614119094067473581277599609496762960972260689628137112032360486445234598511199684675881816677322350072503071116878677854198807513803028345384041193976936949595607619772723094339732775857366188394242237888454133005692229522627059021766683056379166328758643074034651477088295526779481972642314260481913656849908998775026037593896126509468805024130879738114831726507455996318751711242257525370629800182960054820056459299031313033178639379789867248052191948564791284306277912200831531132727252848046975079274107604207422180790180674442083634545051718378749397382615541422595171094449620979551195843771863108274520677010097230731862345300468517668904946393480947243124651839763143567511692669685031233831621389557659840710993215211263285069063398339503947184997161094083083053877736678929654970511831662984737433141151838605212887047272029235859200632246127971440751906726106283042958810473062871828212882679956627599162978008334087215417428566328627933710537352061688382898427732919052252532626559528549194113550832651182056923950487564696393200874225189927497353864238597667828879046351719309006631247078157959316594673705629051666057170908233857157705536358758178001948093811831452532180297259924653826868431583529081443915403274901333012849380463102430959626058209184844395226752980898545128507931317338496625907256515055513251369817237050215214244175173206043376003288561848566594665578019149404316779573795236831759132895146984523319002050235985934121956160952246405830116891841948253796487984299917640127262665004204345083559607575220761423930983654019621896859885405207293374556775708780952649634706639743293665862226821403434927000882776959081749622346161275243116822118898574420383467793130210766019125911546825496631056718811589200078195809534266736568373586977485098744359972146470201537305238751109316700591533775648459300115999077864969027102697762222355198344795959353792485217583990345381206371761414421010734536687579132581669308016312802515063088351170568135725500656192906416429028050777241979163318996341855526467788527253070038318737475135130442244262535653432939984902783154351748576002192512489655923703793418069024108798838849972906445094342850419486037552044967029146488792384693648586002550767915684072869316718751724643267161008346373705744182753875744727023321494376965078987015632054807290667808424067931728833093486771961815346826309828195559704978447323474359127908437922549870919735027220283560010130504849534025889434952608766951053099462066403239613829870069506759073794934606255061208438993717700947178902855875926936475717036748410034341552469899952887639559618260694386489180172457011104588203088631135975270713663097698949066683649938633016773410320323447393245620649077170739933817132023640554516055821080347587299514517344103913434724274570905671411870152447633630020794116729196035297166502202283173704040564353623362060624602105914889095359863566586252963824184113069544184070392139803990488178637780619106269997462589919674956410553073119659130443817291726973054433812614236377566385896766193436531715868492078679787049921607831256548591420181144337005624829883308079609829281702933920044150724362349082932337529275183555550759563264061342114344076379295287668872881144842678541568323866396895644823948668725645603165802387345638352049954163004283115082448016533419466854214433863370929972934845362307106230764527411697357427260580526749886925414604386144800887890455404447490586471146843968438319402848710992027349479404509054156265030858599686233771999636756519543362055535931234102657321710620159992369968135582404861074012859908357457643934719496361092731946805880148347648955726838411743124285700361371263752582259872541407572187701536397820799177145606117943127447314468934127745737896295536031841708107999973631172074267987053572743091086520751474818610389107050882688611509676523391949612687262723024304567914249177164676175113427118894827540124754596538131148662139737659987591987808710366016209270335796976639603952589746825309966421820623559980254684651585816259754646896675329322398127468234562575355911037292681588630747026794408719412044361738934185088651798053979414290523336289393920442009235066258188884117507158747732520164728032543870564722222274127742468776838751533544621992260989073383290925600190934951597609650422144836431238624232246140925645252235224277512965625723103788058599484029459545200287204461143877805380501018130152779707416171004132419255619937668896930949220825217150414062456758348613847169640357557332484328139934101922784000250937441082915494248269026918650402924769009110291437748448952763518164181850168552758762497110615089698420229504724702503938309581244539522277495404978052342540570967136271030627694122107443462213646337183623126971012986781309482020707420593863632485843384964535477343527400908627484307719882317043393718378810857723613256421901261434759064975382278747543366226417959638731591323673527823550282181039009870490445320706815835382713226494596508647261636899500195110884870850525896617885714025707410504066312830152850302561635092619333567203579066303154655776839525470585505379545233565628470526466798193127760716376850644169280567548816813902508183547962830998308876094664913115567444899888066294586537615803720457816111393232094487429956726714915349898077589609929473981536895559767177568911357519231394434393732467776362068275102582907448002180170709026284212375295627830371543656788608582913633102101052379592812704964682084931076096' ) ; +test( macro , '5678' , 1 , '5678' ) ; +test( macro , '-5678' , 1 , '-5678' ) ; +test( macro , '5678' , 3 , '183056925752' ) ; +test( macro , '-5678' , 3 , '-183056925752' ) ; +test( macro , '5678' , 7 , '190268860537460461066531712' ) ; +test( macro , '-5678' , 7 , '-190268860537460461066531712' ) ; +test( macro , '5678' , 9 , '6134207938767795427279285370859008' ) ; +test( macro , '-5678' , 9 , '-6134207938767795427279285370859008' ) ; +test( macro , '5678' , 11 , '197764925536165073952129140102317226473472' ) ; +test( macro , '-5678' , 11 , '-197764925536165073952129140102317226473472' ) ; +test( macro , '5678' , 17 , '6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '-5678' , 17 , '-6627070629806594831656022886215600897329358775394273623628709888' ) ; +test( macro , '5678' , 22 , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '-5678' , 22 , '39110965772324916562997532491390626962790594973791320596125071181383759481519734784' ) ; +test( macro , '5678' , 24 , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '-5678' , 24 , '1260925177434571255317406540302166533842248540127020457961763919365319088416200089199968256' ) ; +test( macro , '5678' , 27 , '230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '-5678' , 27 , '-230821086584467736122591924241292894830299686290762376622091655042209731331992663002654366119348928512' ) ; +test( macro , '5678' , 29 , '7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '-5678' , 29 , '-7441598892019879120787748898491222680774095511313311141385222377597848399868342545524067924908115740965470208' ) ; +test( macro , '5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '-5678' , 1234 , '4754545701433992331733575256099410533228458670475892396381228147140277468895263961376711046431196278059194371543633511738104729515132046647921588948673317858795453334016910038267103044330714716949310557017200499682459199588937173529096934288020024176158267550101701080481254770583881162470132740630857097654899879616282728381172344973405997803534651364288959497452319805334849653833958710102843349430647090705281620494871877782238874887814289734228053896202806354761750369269951229593313010945689761891211258688068066696055485242378613245933537337160634515912577045202472450817451849184207035648874665441200090642213657945355196460821766460825032224534602658525599188179237649065062512691280473121441573617950552334838912754947407978233727886935344811884839323223019614920728343603125258018137019905454492748785128237691020015003872956540230098415206613398448533046207656300960598259213003433022409251838940742693047445967307981951797528065313733200257272599665561813580891071207079215211460876715623293069910550166302272098118272527916433819800298828239405657658438060618142659814207004518209034153803725735869682967280748736992669014651682583009724296577174387664968207473327117061022862388179179805519732871243762549484990925427400006876201981312808033770504367669331073626566876134508721159965417268468228608040850320762590581251984432320891961775899262667965048729940448530756142869126858563901357526390190162408750825956708618281237598759925725241049426257439561800035105159165326290183277107179838103459135561724394264803171431808241820795445711863608586766345039254614846933931024903619561176580056139441625967323631797367126958482941668050957659192162167276197457147030284596116968435975482030070191450200681573163807130339270972064786812978664842441338738386157257657806440916739246453417871760401803525801345778950479694386503103948471086023573572269171237514322085437996393254976781298685048789580780175371793986673922336623057771141110132765327451487041405878107213683772036140143582620048289665134817805568670112167960808287343393646995734701543886022122701209620784296421140764622633595229564449908877625079263109689514631383456799358203288875405982309838110130925886572530681702118654886611249141922200019882428708452245424153239056842500484262106739374720265689912446227419480220842375352629558959175152376134258348738676918576054510702773097564166661175972907344227049028399511499148144890097723715043579731339916022734957419253364608790001408119360562088903660541256901511777417919298919881207626846049705641631114520861910821360106286185700362951871430037373045323853881352479438655780016733428623128344067196426832063335414492412985195862227411532910672295727557475523062269393814283457830004423808768415796967148960731363753261748078031957490406872476713147808646830842062710450030612153443209478241811514340917541321810139916689385477670593954065087892241850261558516392240563145569557862995904133784803099322335109965684092492599160998743520079066871458347318820041040608736708265400811003296782209446700589963177364290058854636845629046307738816633516835431430230362482024920978970474394893679522412954011767859444487351352199067658529260874277691008237384360434306282016514094096768013798147480740509779810560544648455485790268334288880803641971210749525943040368705400269755514646235977621926612279423197054873015209023113609804623745158430744774035859946298137588499302254901538876084525827492824031763727264344218393017853529749735850655796213422695465000659399958563228524294668421953057407346976847682240743601105444694630169017375480155130799595124045461115669497563631224904361329523188370665305938674437690787549882389569867694166936751165216920602732743849889023149711513126398908342104741198863408830097845137505662663458382001009103659839197477448289276824608807661040318889081157573844237090631229284090854577084517143322570965548490565414070261786860900921959546383612702905328456128108405235351119788158687215861758441073018835708344133679077552976919500888460205455433542878586438605353256917018782886441646030034030257088489389720348078103255876838236261154196475758170227577027093408115125958792540599677335099871170489525421378579051844293126380522395565389230525206095904182031294100225265853213565367785174160416143450757600749410617414444540260518189203196008117912073471241250825794798475803391996546423777135418649913067759391180278825562475480988246874450672101428462254341590331425352560400400946802179861512954182324631693500044001899557332925974569520166679673993884049720918350709799494693984974735913494505510527664100089926593875304828031765284659403018738108240944539887468544' ) ; +test( macro , '5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; +test( macro , '-5678' , 5678 , '20961103475860397096620198785828544812451875765346411250885842038327056305534831427524235929264523155549200123342202792959619294498356925569029791517054522023286004576806428127901116917137966737875680160041853755979622047280407769716320420049316833329762005532988708704331049532598407081927588476358096106830430346678025737622384646014143458292081444951646455890942404183781454801771092170042167548767143528488456067477683808637020193350086262620837499156780659643514425992677777549276236748838733016855656036767803970531404652487170875923200639888516998895605428441017745101547422412068987348460209115448467644054468275648419404395337331198996639591442581724727811657252555545825531082415497100293537939448249078775822683882777300250359161247892959517197286724099314650422427240434528774639093971213821558552657313136317745703702089009078172440361842759228550114479452733116278009555122957802967528098994386176881771431841384903021658686272530901973786608204786721041117420281569693260260781545794591991815167424486772633334335112935740169814675786293770425639825077094249010948409458543312552634155954058706239948602914517292759521672875666304364312018937594156108424003164485077624655063004963280160357043967713172961937421714852351728786997474570833727073802073151242655465897621077578606223043356016087694305078059542256401820222791125648819317007287481280897846845478489548491210810983350692374049786882713293346324409753707754423018924164908641564327101470836717142930169947476809752607171960867023783880340917424768781396844547673066773609064248651574496288539173939354153931404464270119589133463933821401953922574158938448014272201881447815841632885101526774501650212127008845801189603638355135409486428091715296322188863520347687656551080147975509615440823847444672761184968625278441257265131960174485819064367376310553604561354630629371249798285268189004212654426527594297664248117535729307223651413582559430948950731935053761900974795521089002020414940829028280569419489831414227882285622096763688719827413987472799210647005984076492462922894315598285699105391088926945250813040451821143186871090522965245589172188408143948195834368520199216096394211579483487673484669778106884250996681597133290790739693751847242221100768244023759346750635341703420379801838942511917350863694564847029339158694426890381897099989180224343864523754112539067694526528401217644323654424427231493800150103842858508404600706382916219260256068179635822489248860978198535137682711137174374077990340914136980156334917668955828893820631948604959981643749170072224740493035859834098207411894779743137041606544382898751128407139489082003820804677974180712232039944683681108546158160055498114804222931787517216194961705600600921002101530486944828893320089698663702374771897219653436814633911298888459476136973550537723000547178216062641659170242351858997391600121959716952009812638059726218252540709679474668997724436632309816876295236407595457518507126861860680695750920654652963320254726353162418187659321568071114917619368662094712938035019186605722392484634089048490456834552767036555584677757558574446800534129195021872811546196149505124075849131199605515302266412472075986121981758995616205249141869256646920464095875775897714478203686225976431026856924883709687572948846561956353515691616376669694467094214890998233570175924571354681813611569544223781951920459777052032721788869612973356209611272860999692421601135843006769446060803502108056936952707032803521745669953368947886400455020197982813897023648803789317080479601810246362997281767966345793599493006980728517888764254888947867564213736366873403675906000079828022438134598229588800533119240383617199914137931213183505864880894139667746523030715098472929472302939576875444596462566452370793967057305702473460610483922270628542439793100970761937675746264116065218777391795769254579066163889330331112744733423405142790082465878728322397848857528516220224146420991983558383260828431109792636682987735128999042469763301989217214843757185512109526419275078060717097555288972272391704978646752898865425525925148946610574643747876579415727008374889238583995957880506518609256410087352303549297375442558667992920688803103146202722246249407948046901012612240584683255617396467408314435847004205877168068226283077754365919306242384808777157837278694966451380135919664731764683570386835799307599048703936473275613236972515229396396260958643009818292356066675853792547520081901067916982728871525491998521513382058653551548991210196432125407005261758774055758476265898632777046159129580237974401964271710584580359869876137967244126611356619072305094409440480536976363305436314025755667452127894209347682659916071643846222364653470873175722549995662291210659162334560246843460484181862192208393363077518809836625686572884061772196633797888749892277506502441191600357977013385504776300311259998291033716404492720409291745672289169990906465740353542556271192233542966467378955571662470116771561584749525830836527785451464178352895390807054081934597059639771119622039654129377672203491023057905439106311615960089279769697340091409307248615189012263871246113888420237101222530953693460050751365447872194314346321021252618391674612597521999861167606501984138883750088324174460600828958999555754255610905124642928577815381854757230470329901276588212295301182538623633435542874680576666352264509760450468573897306825844154780925961121512391772395963933139713039190021107996813065298155982705497740394116136786877280826320702315582767519525968812480806822623479009377991272623849572823287103715254262434467196819571876352232869161557710895323643426054024697392936513538931702107731492975713311800736817229334271317993829146513166265221678058872670454757573140530510521990000183590216202544311048834058740149712755109451126122309764879750972847619124852572353750625754484613228115522998750920829289098099554644037180554427993408365441797464370149734104965776213777083810307981642619540386518150159046829445424829754275452381328601724043449450956030748949308969828402680425162361229035418400544619561607296204881691791480090999541515616010212649557063997168853645599579523842619790074716906017775453082500897068436460404332503814365128244826029711441494116174974844655172720999917810103350411225796563189051529716191842251620861664071037527702847381765521782774102962458150055205741141136106439247547142624381556529650433877764934281678531465410529585976763361537124975372339008916161274767618913876519271418713246480667376525939051541144349620741087940031759796162844867538970077387831434344681530487207516991510520912619511583884571364622210013697048350627846600223329500321002977613397306970367590540778783822774812030074816751772184402370029104045385214602610907543748021786280923450646029057709024071335807175590663303554223846464611978030180007569607921318215938216147386594093783432526613610728757005691521557409476530287282519784554821625290605602981175951476074638525315922123873770224286936370399872701299567171494946919326740256775127284475987028437513344512643223731472467390195611228556080275245145240204853439354039812301589775361549206311675316060841046896944990780074886738787814930150748548502907587826876353074588954972282061956250092436604733846523028612361583744352854099913930684272445300389550635728506447056670977566263911578264334619665006859685788546051311606465170520850052292627918870022043421681580681687815285018239742758216968701779554391176904096742556900135151126780776552006315456063734183800063507587324457500426893135954572619126593168091720910428883991975359480482573972151692294245346527271827960866757765591817415445212833405373149434835366091481859076709340699689283099227679095904342934396597071849631503357041827588692207811689619541022987674906772902279361365116008403959183232244277968153717371380870224724601675215395853317076044589055344155303188951949633122037313447319757599917592415992347777664120565677256132176162285933749924410020763498845915345437059932175518550870149266678352583554753248105512643561027254478108520853968547412343074452732048940948337258955528107066091208271688418567950938759541825412737643300318455888061336920776577194225851506408333260918392790229453752287062094219357308185064469699183516806540942085490353756937701017866352051531856798410752966442088040473501761715035453238890231970013529945683188860755904234083724684800512845736719451852683069210468801867201477539348052542015577484072403704037776579238040836520289410747338939580941699344511302194270338381742596661809385741277476102729401334821325398466231955303171814534873887668780922143864823502410049426239526505466585893420380824352949092066404315279591440868891045752500463965898054919547044239119894054717314737895191652981340489644261093020311422889692148710370782648783605622470403387492804891787456729566334392617608021680405626520291926600181533814037514425472456947855714901443112699002508628600214500147437397501520737486276785876992172931265188844659595175189051513909865093560705009962172767282431656449941715794260678036177108296646748595792902478003711079538568560569329362052983611711508572531810948840324314191268617953219086794280506078381146419144518511359337076537668884246531754894520493160189833787323225134536395026232747632921100895318203838170957249192688530720205345436462911312863754388655934052209987748976917630044613649507982963832646361600102327899814182961925247597766558883415426602825642679231108408717356160761811443138678307765670120961632324431937203518098606674451620777129193461079930070445790621797443406995457673007773949240694361732293871256269440702045044042508400041950088476821880075340029625967767429598359971876420730553017036711928950784849486622452639853318381569541989587912394634477936955057149926195818822162073890615735490958836145860064089782477806643629376414359166374954027243086599306339146161006095540567436463505814151437072367936996320385241887273358613933332829151995652505803301556826697804912428850607413334679395180944373755345498960648748382482129209871428353424166735231886964387990779276298346036013789942626283820173524619459795908090658203843828759290932760054102527111538316976316107885329942413386870965936382594101982473536441345366235792871866647413979193839717006298786289046184792740497837459531945129292724622806109963537972595469737226837786127695843373683711177980931771124939231813651067119584047671610562615594610013918906014074965915938697967519291496645151577431294255803269930598594469775759332172418552542909930827665688050144404349648565099431522182800149383324488601033329987788729015603953218570332519940819306386650225037968580102257373618430731324266588124210598703511685751977221929792590346525097022616738437403242628009366426304027403800405332758340415937758762022018256029841471401813518917716264970909993826679020791028595741882041564058061727313588364708255873250181519665032113898406604900457648507873836669075356646954261077641216790353285042630288932760415550082594708503004210469047805667031578982859227123863848155443706073467171101932882914667034131195237741270122375436214181192852781446477601012439563301881420830604554167146333080753008048466060868180919956181803167095012443813370384688061266418807988055127749853292289167056432298804062936653555435002773574758792724801465815463068776612178263548503872068353366422210523694946841803129147625915455142179893256525229164984372164655503046171715680679418354756933948568190062498291382727237063733314557270124601968330877375375302905000458666065115393775985001980241299574368885547201655980200135959471425563854499243977941637298696317480645641835649611961706086308603047338759013980114790118006676458648654934040344142400548899195911697413888327578658688851175449259234204015146825772165610587763768386460010876806660067899144780128980585458498486050060134774086471042255869079733943552895314018768767346670068755253063974621759845733812981050837508917001404433039971743800738940429888879719722032789032572353352744414958968603767414609445925606874565266830823048810770676933082518916615247308650769963520499383636076074952007889469520893094651525307614701445078300776534195271458658643120654661933319467024570788906633360571649837492003799512889247911398553146591016455594218010075513724555874545150086787082537930052790651798957811066300144858455106371826307947479024319648174975420433374959084000626716279569226568594439081586004086396789477140805229043751501120056323542312951737926321877235735914913996771106885471756468685655223612768963960722422730242543178403592512730653108901995129957541586204986193328435470246585569185661237173969190411536963744455489053317973231535816102151692209387506678463166253256748427255152612939374373490497892336019501080931787139480532743574835338284878792836456350443071849124517079708282814044437298390350851907341664119465791873084560904592692890839175621671856709653467138377030657216088346458495003129554331909651018828349471677645970827844610092659017435212835903616196746033025057028617583036181754607527505265145156915470410506790682071708352303854971538714988518380835322105678173900156055910356897513042381483508937842961980161225304561882550956202034776079550133622209227253722849998842871720910727926556496708078296526342129984119761109693088229168055370682490197459698160878225168359328983640522770803808232985893757138451252793719878554146381587949241129832715284164638628327205083947429369577324247974259656591200285342816299760599997325343453887746113000804971059841058142634932629767863224029057643740199869860852268177578424390685549803794805777768828321816077711698044150850387564161363159273195211266593336485672068912471611545555503828635002039882216193749699794930785426172968668007437496372781477721590621442715765093180923013806625623519237937374711524887079886806048451452685056714484012446162628312599653092101079835587808229519810848029768298450707529049027855868594581351120373694968471491325622921276839709147987501499009362126994924173034840891447854850534760007717018397409635389989721942703280358887059064381016959134652333830901444808032621722673636621106845864481104295244621928353536906854484306037465883277840775957049146224492353399079659842861817526312402994884769704689603020779604603739636166608166158691216721969031390843150488617586505783575176219285589177884503871139501493503315056927532546400718168079346521373642983412554286854653491668302783219026411150683690404676506814296062048782453375783985993074773600530807406821508678796048884535057070454725641832804881628290472319378708107612672514958728208415814832848366830770879939252404453831503925587010649860843157237264031863553723731115423243833225146791947855702939079762335792076456959779445036020009496001781800831364672755699695312438929954900086480320360978014700132221039920117199716948333953655007203510534208947542173707336851190033391697173213334983116967278338578042740237971848876445165127559667023731212410332059567408688316981002760859447186074029885560854879276393896939409839546337254074481153175622933159009005807484599017919954851974584592781083821785005276107736054438857737927856937120884899984310863662967573212483017728483751788255634467095976284660372895727900973207840312300428355116015427435590176977077187205781812230534547145024610923191323048599366029697646809970005492711875817316442030817504177259518549452303716064462428946033555861760032856644595430216590534551860765065591027032595210910008411076368147326583568499051675140899438258973699944961369654185169046437778566505363261882513483043961521822263294058027245777275740012119198813520182688767132883689210273201334533673118014437798534485316245391538318773583087415840444449319110606856512447512427810349060960965229304174718418904023965554517483150090227734193870384044342790786375008719255816638434921858068442041606691749879152418145598438590758009228404117127766264078915319545878728346609769951809923039955260523001211528419908084892249955619893908746226668926291220179829726182253315628363003141666323849121632438113963636026816170489507556799521505584106702009070060137446668676003914632974027568315166623356117669864718049566304056730319591969263694104593459765322344772255382701180475436641886868678783624543227744434298993623572900060680979017067990077221899049059361499776668856843365761870317864819462428428848922374612219495703536826811251521962115417657764716996599920443771355936808856994611476907846769440705945577948412408098308194247790251551814007405488547607931512528458295294431561075440913232712872386575874523702338843048545387696311167012267393016243499862701702704559182961184393139009670554985993265598484792846589075913709674891472962734815769679185507332710024988728112966765370082378434820660544834153633496561669001904597457934287983634833285858233443830907814288637924228602612202936103591956657280461805355377341594603036055318976423539874466968971622720400344448054825863644910603570330666373214016807494452805187564132062676258921397872976935534785650666466979058203596663964008877239131749538077378553261427912422051571242411749896064698020652408788498399054601940514530604898867419049351496438038779395408661009142554015099651484475265311251583264780006555449353786535571876736192626391724175173600804803164802821449711193065509497976905374647202115518871632987870116904885869297723779451615583994721144940453975894523447005168454654094792512955530467522876206229286935224412977161135850490857061187099569220880490969801731923939968371712015789551373893696433571630232434930844238107438295257090395694148469435787522959391460491063999682320399157149585155220573365774129776211169850925291001405823548706054737610679934077813002757289010852930710833890387897603293202189092351455389213224220200812392861786079572198529046984045111530589932771644921408568949351465102893613740863050867997516831526923647362713692102368506180725202921498997373446137055388695228199734210698224497873308768594575297220521759107033810828350095765628228120152284513992260771237651139305247739659270616280339908733497338427091680415735990262483699211387602084318185900414399619311359472134983218719924998666805502050740906549426901732133211600369364728749393417316913960651023842430959511253264652006272039019440372374464314002683726896273148383941896402669657964060226983277289594026510720250861506182574611925245076873860196820954418487005698506965073242275841765055662272895065533031044216483018490359334981010684150119460032570579963029007065375193852242835591620381410417921655911808679699101792574638397223906183709585980959164320240595763914940916578772074981529105442754965693025026444579715860229807439358682267593669921082325720330651796439555898405980876598479829844298465640244001232596306871221389146172690875418892645048162202327778078851278433613157686380772481696539616794031556767885577380027308862476883800947813971379945924507762564255570966442195922640677432268158193234943248422208020363463924017498973834663895093591825522157827688503799798956822355457941723297439393436585811615367822230560739947438397685416715810717599247434830137898600384248415491280349563802303189361073536367401385203523086130688457063955625439511748867286125836478963188607731003192120083349188717903595076579429799767124404502580731912584575058518902202558354659537257581450704768143656086238404537693737301270764545835428493176034206742679964923389637539562396171219624285232430392133671282455067288971838373684172500972824178311994559519745977773185377274315387612668976397441534881939098559968323401638901357042031758745222318685425870175763581210340825614377239399102156681676756886304126199512477132209661598167513065258796567396244516766667044117769296076233945430288434551388983145956356854054551349043233270185252479304817744547523647489442750388225710640552607871951523222181135987822647479160843575474425232786723635746624017962010441801682460460846911429363958171491000643253046537377592219146819005387665341190415552719452163396674187225971483647197960216167631640203688782849503605151138399519953056223592845930065765020589667028047478555235402729913149859498685868729063983583291781384695081470874399025098701926833100271744846242068023582524050060108933501814997686980612309900254566123795338465882337102638236069457270509138946913421811976791562523400704102948549106032451197653504432853349017333134595228420504674415338093336394471848456363569811978503849071206389386547743012787895694085415358532891712913369286066906727002487638172447907565640414172498327074182250501908413014543889563559417363729989034832947592196482825280790955025439550978361293168022571329210314775804687773638280215386019801405994354558803657261076788491071425202082643783638575084090901655705454664097045389489400799009505346024924745729201182421567301004430571916568576607949169061394726630519011162277327697372959941859397384603824648805733579846217737162375462758461188848821424664212093326156665691469019112829336542913113790202783071641612742430534416926924889644751793603534790540558697161796514596582648358122270207620367742404487043868514971674400430158941877734533743310880649285086576473788391037431011688694806036177790841311961196527311456581911009317143690944647271732040654178076547839684445285591602529693579659384882891493197912230169540994733315399796960250749876936655523749674175502708680570084371697083686982023025890173668649889446225658735966722221404808349220864' ) ; diff --git a/test/src/integer/arithmetic/sub.js b/test/src/integer/arithmetic/sub.js index 262e31e..fa227b2 100644 --- a/test/src/integer/arithmetic/sub.js +++ b/test/src/integer/arithmetic/sub.js @@ -10,104 +10,904 @@ function macro ( t , A , B , C ) { t.is( stringify( c ) , C ) ; } -macro.title = ( _ , A , B , C ) => `${A} - ${B} = ${C}` ; +macro.title = ( _ , A , B , C ) => `sub(${A},${B}) = ${C}` ; test( macro , '1' , '1' , '0' ) ; test( macro , '-1' , '1' , '-2' ) ; test( macro , '1' , '-1' , '2' ) ; test( macro , '-1' , '-1' , '0' ) ; +test( macro , '1' , '3' , '-2' ) ; +test( macro , '-1' , '3' , '-4' ) ; +test( macro , '1' , '-3' , '4' ) ; +test( macro , '-1' , '-3' , '2' ) ; +test( macro , '1' , '7' , '-6' ) ; +test( macro , '-1' , '7' , '-8' ) ; +test( macro , '1' , '-7' , '8' ) ; +test( macro , '-1' , '-7' , '6' ) ; +test( macro , '1' , '9' , '-8' ) ; +test( macro , '-1' , '9' , '-10' ) ; +test( macro , '1' , '-9' , '10' ) ; +test( macro , '-1' , '-9' , '8' ) ; +test( macro , '1' , '11' , '-10' ) ; +test( macro , '-1' , '11' , '-12' ) ; +test( macro , '1' , '-11' , '12' ) ; +test( macro , '-1' , '-11' , '10' ) ; test( macro , '1' , '17' , '-16' ) ; test( macro , '-1' , '17' , '-18' ) ; test( macro , '1' , '-17' , '18' ) ; test( macro , '-1' , '-17' , '16' ) ; -test( macro , '1' , '51676101935731' , '-51676101935730' ) ; -test( macro , '-1' , '51676101935731' , '-51676101935732' ) ; -test( macro , '1' , '-51676101935731' , '51676101935732' ) ; -test( macro , '-1' , '-51676101935731' , '51676101935730' ) ; +test( macro , '1' , '22' , '-21' ) ; +test( macro , '-1' , '22' , '-23' ) ; +test( macro , '1' , '-22' , '23' ) ; +test( macro , '-1' , '-22' , '21' ) ; +test( macro , '1' , '24' , '-23' ) ; +test( macro , '-1' , '24' , '-25' ) ; +test( macro , '1' , '-24' , '25' ) ; +test( macro , '-1' , '-24' , '23' ) ; +test( macro , '1' , '27' , '-26' ) ; +test( macro , '-1' , '27' , '-28' ) ; +test( macro , '1' , '-27' , '28' ) ; +test( macro , '-1' , '-27' , '26' ) ; +test( macro , '1' , '29' , '-28' ) ; +test( macro , '-1' , '29' , '-30' ) ; +test( macro , '1' , '-29' , '30' ) ; +test( macro , '-1' , '-29' , '28' ) ; +test( macro , '1' , '1234' , '-1233' ) ; +test( macro , '-1' , '1234' , '-1235' ) ; +test( macro , '1' , '-1234' , '1235' ) ; +test( macro , '-1' , '-1234' , '1233' ) ; +test( macro , '1' , '5678' , '-5677' ) ; +test( macro , '-1' , '5678' , '-5679' ) ; +test( macro , '1' , '-5678' , '5679' ) ; +test( macro , '-1' , '-5678' , '5677' ) ; test( macro , '1' , '1073741824' , '-1073741823' ) ; test( macro , '-1' , '1073741824' , '-1073741825' ) ; test( macro , '1' , '-1073741824' , '1073741825' ) ; test( macro , '-1' , '-1073741824' , '1073741823' ) ; +test( macro , '1' , '51676101935731' , '-51676101935730' ) ; +test( macro , '-1' , '51676101935731' , '-51676101935732' ) ; +test( macro , '1' , '-51676101935731' , '51676101935732' ) ; +test( macro , '-1' , '-51676101935731' , '51676101935730' ) ; test( macro , '1' , '717897987691852588770249' , '-717897987691852588770248' ) ; test( macro , '-1' , '717897987691852588770249' , '-717897987691852588770250' ) ; test( macro , '1' , '-717897987691852588770249' , '717897987691852588770250' ) ; test( macro , '-1' , '-717897987691852588770249' , '717897987691852588770248' ) ; +test( macro , '3' , '1' , '2' ) ; +test( macro , '-3' , '1' , '-4' ) ; +test( macro , '3' , '-1' , '4' ) ; +test( macro , '-3' , '-1' , '-2' ) ; +test( macro , '3' , '3' , '0' ) ; +test( macro , '-3' , '3' , '-6' ) ; +test( macro , '3' , '-3' , '6' ) ; +test( macro , '-3' , '-3' , '0' ) ; +test( macro , '3' , '7' , '-4' ) ; +test( macro , '-3' , '7' , '-10' ) ; +test( macro , '3' , '-7' , '10' ) ; +test( macro , '-3' , '-7' , '4' ) ; +test( macro , '3' , '9' , '-6' ) ; +test( macro , '-3' , '9' , '-12' ) ; +test( macro , '3' , '-9' , '12' ) ; +test( macro , '-3' , '-9' , '6' ) ; +test( macro , '3' , '11' , '-8' ) ; +test( macro , '-3' , '11' , '-14' ) ; +test( macro , '3' , '-11' , '14' ) ; +test( macro , '-3' , '-11' , '8' ) ; +test( macro , '3' , '17' , '-14' ) ; +test( macro , '-3' , '17' , '-20' ) ; +test( macro , '3' , '-17' , '20' ) ; +test( macro , '-3' , '-17' , '14' ) ; +test( macro , '3' , '22' , '-19' ) ; +test( macro , '-3' , '22' , '-25' ) ; +test( macro , '3' , '-22' , '25' ) ; +test( macro , '-3' , '-22' , '19' ) ; +test( macro , '3' , '24' , '-21' ) ; +test( macro , '-3' , '24' , '-27' ) ; +test( macro , '3' , '-24' , '27' ) ; +test( macro , '-3' , '-24' , '21' ) ; +test( macro , '3' , '27' , '-24' ) ; +test( macro , '-3' , '27' , '-30' ) ; +test( macro , '3' , '-27' , '30' ) ; +test( macro , '-3' , '-27' , '24' ) ; +test( macro , '3' , '29' , '-26' ) ; +test( macro , '-3' , '29' , '-32' ) ; +test( macro , '3' , '-29' , '32' ) ; +test( macro , '-3' , '-29' , '26' ) ; +test( macro , '3' , '1234' , '-1231' ) ; +test( macro , '-3' , '1234' , '-1237' ) ; +test( macro , '3' , '-1234' , '1237' ) ; +test( macro , '-3' , '-1234' , '1231' ) ; +test( macro , '3' , '5678' , '-5675' ) ; +test( macro , '-3' , '5678' , '-5681' ) ; +test( macro , '3' , '-5678' , '5681' ) ; +test( macro , '-3' , '-5678' , '5675' ) ; +test( macro , '3' , '1073741824' , '-1073741821' ) ; +test( macro , '-3' , '1073741824' , '-1073741827' ) ; +test( macro , '3' , '-1073741824' , '1073741827' ) ; +test( macro , '-3' , '-1073741824' , '1073741821' ) ; +test( macro , '3' , '51676101935731' , '-51676101935728' ) ; +test( macro , '-3' , '51676101935731' , '-51676101935734' ) ; +test( macro , '3' , '-51676101935731' , '51676101935734' ) ; +test( macro , '-3' , '-51676101935731' , '51676101935728' ) ; +test( macro , '3' , '717897987691852588770249' , '-717897987691852588770246' ) ; +test( macro , '-3' , '717897987691852588770249' , '-717897987691852588770252' ) ; +test( macro , '3' , '-717897987691852588770249' , '717897987691852588770252' ) ; +test( macro , '-3' , '-717897987691852588770249' , '717897987691852588770246' ) ; +test( macro , '7' , '1' , '6' ) ; +test( macro , '-7' , '1' , '-8' ) ; +test( macro , '7' , '-1' , '8' ) ; +test( macro , '-7' , '-1' , '-6' ) ; +test( macro , '7' , '3' , '4' ) ; +test( macro , '-7' , '3' , '-10' ) ; +test( macro , '7' , '-3' , '10' ) ; +test( macro , '-7' , '-3' , '-4' ) ; +test( macro , '7' , '7' , '0' ) ; +test( macro , '-7' , '7' , '-14' ) ; +test( macro , '7' , '-7' , '14' ) ; +test( macro , '-7' , '-7' , '0' ) ; +test( macro , '7' , '9' , '-2' ) ; +test( macro , '-7' , '9' , '-16' ) ; +test( macro , '7' , '-9' , '16' ) ; +test( macro , '-7' , '-9' , '2' ) ; +test( macro , '7' , '11' , '-4' ) ; +test( macro , '-7' , '11' , '-18' ) ; +test( macro , '7' , '-11' , '18' ) ; +test( macro , '-7' , '-11' , '4' ) ; +test( macro , '7' , '17' , '-10' ) ; +test( macro , '-7' , '17' , '-24' ) ; +test( macro , '7' , '-17' , '24' ) ; +test( macro , '-7' , '-17' , '10' ) ; +test( macro , '7' , '22' , '-15' ) ; +test( macro , '-7' , '22' , '-29' ) ; +test( macro , '7' , '-22' , '29' ) ; +test( macro , '-7' , '-22' , '15' ) ; +test( macro , '7' , '24' , '-17' ) ; +test( macro , '-7' , '24' , '-31' ) ; +test( macro , '7' , '-24' , '31' ) ; +test( macro , '-7' , '-24' , '17' ) ; +test( macro , '7' , '27' , '-20' ) ; +test( macro , '-7' , '27' , '-34' ) ; +test( macro , '7' , '-27' , '34' ) ; +test( macro , '-7' , '-27' , '20' ) ; +test( macro , '7' , '29' , '-22' ) ; +test( macro , '-7' , '29' , '-36' ) ; +test( macro , '7' , '-29' , '36' ) ; +test( macro , '-7' , '-29' , '22' ) ; +test( macro , '7' , '1234' , '-1227' ) ; +test( macro , '-7' , '1234' , '-1241' ) ; +test( macro , '7' , '-1234' , '1241' ) ; +test( macro , '-7' , '-1234' , '1227' ) ; +test( macro , '7' , '5678' , '-5671' ) ; +test( macro , '-7' , '5678' , '-5685' ) ; +test( macro , '7' , '-5678' , '5685' ) ; +test( macro , '-7' , '-5678' , '5671' ) ; +test( macro , '7' , '1073741824' , '-1073741817' ) ; +test( macro , '-7' , '1073741824' , '-1073741831' ) ; +test( macro , '7' , '-1073741824' , '1073741831' ) ; +test( macro , '-7' , '-1073741824' , '1073741817' ) ; +test( macro , '7' , '51676101935731' , '-51676101935724' ) ; +test( macro , '-7' , '51676101935731' , '-51676101935738' ) ; +test( macro , '7' , '-51676101935731' , '51676101935738' ) ; +test( macro , '-7' , '-51676101935731' , '51676101935724' ) ; +test( macro , '7' , '717897987691852588770249' , '-717897987691852588770242' ) ; +test( macro , '-7' , '717897987691852588770249' , '-717897987691852588770256' ) ; +test( macro , '7' , '-717897987691852588770249' , '717897987691852588770256' ) ; +test( macro , '-7' , '-717897987691852588770249' , '717897987691852588770242' ) ; +test( macro , '9' , '1' , '8' ) ; +test( macro , '-9' , '1' , '-10' ) ; +test( macro , '9' , '-1' , '10' ) ; +test( macro , '-9' , '-1' , '-8' ) ; +test( macro , '9' , '3' , '6' ) ; +test( macro , '-9' , '3' , '-12' ) ; +test( macro , '9' , '-3' , '12' ) ; +test( macro , '-9' , '-3' , '-6' ) ; +test( macro , '9' , '7' , '2' ) ; +test( macro , '-9' , '7' , '-16' ) ; +test( macro , '9' , '-7' , '16' ) ; +test( macro , '-9' , '-7' , '-2' ) ; +test( macro , '9' , '9' , '0' ) ; +test( macro , '-9' , '9' , '-18' ) ; +test( macro , '9' , '-9' , '18' ) ; +test( macro , '-9' , '-9' , '0' ) ; +test( macro , '9' , '11' , '-2' ) ; +test( macro , '-9' , '11' , '-20' ) ; +test( macro , '9' , '-11' , '20' ) ; +test( macro , '-9' , '-11' , '2' ) ; +test( macro , '9' , '17' , '-8' ) ; +test( macro , '-9' , '17' , '-26' ) ; +test( macro , '9' , '-17' , '26' ) ; +test( macro , '-9' , '-17' , '8' ) ; +test( macro , '9' , '22' , '-13' ) ; +test( macro , '-9' , '22' , '-31' ) ; +test( macro , '9' , '-22' , '31' ) ; +test( macro , '-9' , '-22' , '13' ) ; +test( macro , '9' , '24' , '-15' ) ; +test( macro , '-9' , '24' , '-33' ) ; +test( macro , '9' , '-24' , '33' ) ; +test( macro , '-9' , '-24' , '15' ) ; +test( macro , '9' , '27' , '-18' ) ; +test( macro , '-9' , '27' , '-36' ) ; +test( macro , '9' , '-27' , '36' ) ; +test( macro , '-9' , '-27' , '18' ) ; +test( macro , '9' , '29' , '-20' ) ; +test( macro , '-9' , '29' , '-38' ) ; +test( macro , '9' , '-29' , '38' ) ; +test( macro , '-9' , '-29' , '20' ) ; +test( macro , '9' , '1234' , '-1225' ) ; +test( macro , '-9' , '1234' , '-1243' ) ; +test( macro , '9' , '-1234' , '1243' ) ; +test( macro , '-9' , '-1234' , '1225' ) ; +test( macro , '9' , '5678' , '-5669' ) ; +test( macro , '-9' , '5678' , '-5687' ) ; +test( macro , '9' , '-5678' , '5687' ) ; +test( macro , '-9' , '-5678' , '5669' ) ; +test( macro , '9' , '1073741824' , '-1073741815' ) ; +test( macro , '-9' , '1073741824' , '-1073741833' ) ; +test( macro , '9' , '-1073741824' , '1073741833' ) ; +test( macro , '-9' , '-1073741824' , '1073741815' ) ; +test( macro , '9' , '51676101935731' , '-51676101935722' ) ; +test( macro , '-9' , '51676101935731' , '-51676101935740' ) ; +test( macro , '9' , '-51676101935731' , '51676101935740' ) ; +test( macro , '-9' , '-51676101935731' , '51676101935722' ) ; +test( macro , '9' , '717897987691852588770249' , '-717897987691852588770240' ) ; +test( macro , '-9' , '717897987691852588770249' , '-717897987691852588770258' ) ; +test( macro , '9' , '-717897987691852588770249' , '717897987691852588770258' ) ; +test( macro , '-9' , '-717897987691852588770249' , '717897987691852588770240' ) ; +test( macro , '11' , '1' , '10' ) ; +test( macro , '-11' , '1' , '-12' ) ; +test( macro , '11' , '-1' , '12' ) ; +test( macro , '-11' , '-1' , '-10' ) ; +test( macro , '11' , '3' , '8' ) ; +test( macro , '-11' , '3' , '-14' ) ; +test( macro , '11' , '-3' , '14' ) ; +test( macro , '-11' , '-3' , '-8' ) ; +test( macro , '11' , '7' , '4' ) ; +test( macro , '-11' , '7' , '-18' ) ; +test( macro , '11' , '-7' , '18' ) ; +test( macro , '-11' , '-7' , '-4' ) ; +test( macro , '11' , '9' , '2' ) ; +test( macro , '-11' , '9' , '-20' ) ; +test( macro , '11' , '-9' , '20' ) ; +test( macro , '-11' , '-9' , '-2' ) ; +test( macro , '11' , '11' , '0' ) ; +test( macro , '-11' , '11' , '-22' ) ; +test( macro , '11' , '-11' , '22' ) ; +test( macro , '-11' , '-11' , '0' ) ; +test( macro , '11' , '17' , '-6' ) ; +test( macro , '-11' , '17' , '-28' ) ; +test( macro , '11' , '-17' , '28' ) ; +test( macro , '-11' , '-17' , '6' ) ; +test( macro , '11' , '22' , '-11' ) ; +test( macro , '-11' , '22' , '-33' ) ; +test( macro , '11' , '-22' , '33' ) ; +test( macro , '-11' , '-22' , '11' ) ; +test( macro , '11' , '24' , '-13' ) ; +test( macro , '-11' , '24' , '-35' ) ; +test( macro , '11' , '-24' , '35' ) ; +test( macro , '-11' , '-24' , '13' ) ; +test( macro , '11' , '27' , '-16' ) ; +test( macro , '-11' , '27' , '-38' ) ; +test( macro , '11' , '-27' , '38' ) ; +test( macro , '-11' , '-27' , '16' ) ; +test( macro , '11' , '29' , '-18' ) ; +test( macro , '-11' , '29' , '-40' ) ; +test( macro , '11' , '-29' , '40' ) ; +test( macro , '-11' , '-29' , '18' ) ; +test( macro , '11' , '1234' , '-1223' ) ; +test( macro , '-11' , '1234' , '-1245' ) ; +test( macro , '11' , '-1234' , '1245' ) ; +test( macro , '-11' , '-1234' , '1223' ) ; +test( macro , '11' , '5678' , '-5667' ) ; +test( macro , '-11' , '5678' , '-5689' ) ; +test( macro , '11' , '-5678' , '5689' ) ; +test( macro , '-11' , '-5678' , '5667' ) ; +test( macro , '11' , '1073741824' , '-1073741813' ) ; +test( macro , '-11' , '1073741824' , '-1073741835' ) ; +test( macro , '11' , '-1073741824' , '1073741835' ) ; +test( macro , '-11' , '-1073741824' , '1073741813' ) ; +test( macro , '11' , '51676101935731' , '-51676101935720' ) ; +test( macro , '-11' , '51676101935731' , '-51676101935742' ) ; +test( macro , '11' , '-51676101935731' , '51676101935742' ) ; +test( macro , '-11' , '-51676101935731' , '51676101935720' ) ; +test( macro , '11' , '717897987691852588770249' , '-717897987691852588770238' ) ; +test( macro , '-11' , '717897987691852588770249' , '-717897987691852588770260' ) ; +test( macro , '11' , '-717897987691852588770249' , '717897987691852588770260' ) ; +test( macro , '-11' , '-717897987691852588770249' , '717897987691852588770238' ) ; test( macro , '17' , '1' , '16' ) ; test( macro , '-17' , '1' , '-18' ) ; test( macro , '17' , '-1' , '18' ) ; test( macro , '-17' , '-1' , '-16' ) ; +test( macro , '17' , '3' , '14' ) ; +test( macro , '-17' , '3' , '-20' ) ; +test( macro , '17' , '-3' , '20' ) ; +test( macro , '-17' , '-3' , '-14' ) ; +test( macro , '17' , '7' , '10' ) ; +test( macro , '-17' , '7' , '-24' ) ; +test( macro , '17' , '-7' , '24' ) ; +test( macro , '-17' , '-7' , '-10' ) ; +test( macro , '17' , '9' , '8' ) ; +test( macro , '-17' , '9' , '-26' ) ; +test( macro , '17' , '-9' , '26' ) ; +test( macro , '-17' , '-9' , '-8' ) ; +test( macro , '17' , '11' , '6' ) ; +test( macro , '-17' , '11' , '-28' ) ; +test( macro , '17' , '-11' , '28' ) ; +test( macro , '-17' , '-11' , '-6' ) ; test( macro , '17' , '17' , '0' ) ; test( macro , '-17' , '17' , '-34' ) ; test( macro , '17' , '-17' , '34' ) ; test( macro , '-17' , '-17' , '0' ) ; -test( macro , '17' , '51676101935731' , '-51676101935714' ) ; -test( macro , '-17' , '51676101935731' , '-51676101935748' ) ; -test( macro , '17' , '-51676101935731' , '51676101935748' ) ; -test( macro , '-17' , '-51676101935731' , '51676101935714' ) ; +test( macro , '17' , '22' , '-5' ) ; +test( macro , '-17' , '22' , '-39' ) ; +test( macro , '17' , '-22' , '39' ) ; +test( macro , '-17' , '-22' , '5' ) ; +test( macro , '17' , '24' , '-7' ) ; +test( macro , '-17' , '24' , '-41' ) ; +test( macro , '17' , '-24' , '41' ) ; +test( macro , '-17' , '-24' , '7' ) ; +test( macro , '17' , '27' , '-10' ) ; +test( macro , '-17' , '27' , '-44' ) ; +test( macro , '17' , '-27' , '44' ) ; +test( macro , '-17' , '-27' , '10' ) ; +test( macro , '17' , '29' , '-12' ) ; +test( macro , '-17' , '29' , '-46' ) ; +test( macro , '17' , '-29' , '46' ) ; +test( macro , '-17' , '-29' , '12' ) ; +test( macro , '17' , '1234' , '-1217' ) ; +test( macro , '-17' , '1234' , '-1251' ) ; +test( macro , '17' , '-1234' , '1251' ) ; +test( macro , '-17' , '-1234' , '1217' ) ; +test( macro , '17' , '5678' , '-5661' ) ; +test( macro , '-17' , '5678' , '-5695' ) ; +test( macro , '17' , '-5678' , '5695' ) ; +test( macro , '-17' , '-5678' , '5661' ) ; test( macro , '17' , '1073741824' , '-1073741807' ) ; test( macro , '-17' , '1073741824' , '-1073741841' ) ; test( macro , '17' , '-1073741824' , '1073741841' ) ; test( macro , '-17' , '-1073741824' , '1073741807' ) ; +test( macro , '17' , '51676101935731' , '-51676101935714' ) ; +test( macro , '-17' , '51676101935731' , '-51676101935748' ) ; +test( macro , '17' , '-51676101935731' , '51676101935748' ) ; +test( macro , '-17' , '-51676101935731' , '51676101935714' ) ; test( macro , '17' , '717897987691852588770249' , '-717897987691852588770232' ) ; test( macro , '-17' , '717897987691852588770249' , '-717897987691852588770266' ) ; test( macro , '17' , '-717897987691852588770249' , '717897987691852588770266' ) ; test( macro , '-17' , '-717897987691852588770249' , '717897987691852588770232' ) ; -test( macro , '51676101935731' , '1' , '51676101935730' ) ; -test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; -test( macro , '51676101935731' , '-1' , '51676101935732' ) ; -test( macro , '-51676101935731' , '-1' , '-51676101935730' ) ; -test( macro , '51676101935731' , '17' , '51676101935714' ) ; -test( macro , '-51676101935731' , '17' , '-51676101935748' ) ; -test( macro , '51676101935731' , '-17' , '51676101935748' ) ; -test( macro , '-51676101935731' , '-17' , '-51676101935714' ) ; -test( macro , '51676101935731' , '51676101935731' , '0' ) ; -test( macro , '-51676101935731' , '51676101935731' , '-103352203871462' ) ; -test( macro , '51676101935731' , '-51676101935731' , '103352203871462' ) ; -test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; -test( macro , '51676101935731' , '1073741824' , '51675028193907' ) ; -test( macro , '-51676101935731' , '1073741824' , '-51677175677555' ) ; -test( macro , '51676101935731' , '-1073741824' , '51677175677555' ) ; -test( macro , '-51676101935731' , '-1073741824' , '-51675028193907' ) ; -test( macro , '51676101935731' , '717897987691852588770249' , '-717897987640176486834518' ) ; -test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; -test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; -test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; +test( macro , '22' , '1' , '21' ) ; +test( macro , '-22' , '1' , '-23' ) ; +test( macro , '22' , '-1' , '23' ) ; +test( macro , '-22' , '-1' , '-21' ) ; +test( macro , '22' , '3' , '19' ) ; +test( macro , '-22' , '3' , '-25' ) ; +test( macro , '22' , '-3' , '25' ) ; +test( macro , '-22' , '-3' , '-19' ) ; +test( macro , '22' , '7' , '15' ) ; +test( macro , '-22' , '7' , '-29' ) ; +test( macro , '22' , '-7' , '29' ) ; +test( macro , '-22' , '-7' , '-15' ) ; +test( macro , '22' , '9' , '13' ) ; +test( macro , '-22' , '9' , '-31' ) ; +test( macro , '22' , '-9' , '31' ) ; +test( macro , '-22' , '-9' , '-13' ) ; +test( macro , '22' , '11' , '11' ) ; +test( macro , '-22' , '11' , '-33' ) ; +test( macro , '22' , '-11' , '33' ) ; +test( macro , '-22' , '-11' , '-11' ) ; +test( macro , '22' , '17' , '5' ) ; +test( macro , '-22' , '17' , '-39' ) ; +test( macro , '22' , '-17' , '39' ) ; +test( macro , '-22' , '-17' , '-5' ) ; +test( macro , '22' , '22' , '0' ) ; +test( macro , '-22' , '22' , '-44' ) ; +test( macro , '22' , '-22' , '44' ) ; +test( macro , '-22' , '-22' , '0' ) ; +test( macro , '22' , '24' , '-2' ) ; +test( macro , '-22' , '24' , '-46' ) ; +test( macro , '22' , '-24' , '46' ) ; +test( macro , '-22' , '-24' , '2' ) ; +test( macro , '22' , '27' , '-5' ) ; +test( macro , '-22' , '27' , '-49' ) ; +test( macro , '22' , '-27' , '49' ) ; +test( macro , '-22' , '-27' , '5' ) ; +test( macro , '22' , '29' , '-7' ) ; +test( macro , '-22' , '29' , '-51' ) ; +test( macro , '22' , '-29' , '51' ) ; +test( macro , '-22' , '-29' , '7' ) ; +test( macro , '22' , '1234' , '-1212' ) ; +test( macro , '-22' , '1234' , '-1256' ) ; +test( macro , '22' , '-1234' , '1256' ) ; +test( macro , '-22' , '-1234' , '1212' ) ; +test( macro , '22' , '5678' , '-5656' ) ; +test( macro , '-22' , '5678' , '-5700' ) ; +test( macro , '22' , '-5678' , '5700' ) ; +test( macro , '-22' , '-5678' , '5656' ) ; +test( macro , '22' , '1073741824' , '-1073741802' ) ; +test( macro , '-22' , '1073741824' , '-1073741846' ) ; +test( macro , '22' , '-1073741824' , '1073741846' ) ; +test( macro , '-22' , '-1073741824' , '1073741802' ) ; +test( macro , '22' , '51676101935731' , '-51676101935709' ) ; +test( macro , '-22' , '51676101935731' , '-51676101935753' ) ; +test( macro , '22' , '-51676101935731' , '51676101935753' ) ; +test( macro , '-22' , '-51676101935731' , '51676101935709' ) ; +test( macro , '22' , '717897987691852588770249' , '-717897987691852588770227' ) ; +test( macro , '-22' , '717897987691852588770249' , '-717897987691852588770271' ) ; +test( macro , '22' , '-717897987691852588770249' , '717897987691852588770271' ) ; +test( macro , '-22' , '-717897987691852588770249' , '717897987691852588770227' ) ; +test( macro , '24' , '1' , '23' ) ; +test( macro , '-24' , '1' , '-25' ) ; +test( macro , '24' , '-1' , '25' ) ; +test( macro , '-24' , '-1' , '-23' ) ; +test( macro , '24' , '3' , '21' ) ; +test( macro , '-24' , '3' , '-27' ) ; +test( macro , '24' , '-3' , '27' ) ; +test( macro , '-24' , '-3' , '-21' ) ; +test( macro , '24' , '7' , '17' ) ; +test( macro , '-24' , '7' , '-31' ) ; +test( macro , '24' , '-7' , '31' ) ; +test( macro , '-24' , '-7' , '-17' ) ; +test( macro , '24' , '9' , '15' ) ; +test( macro , '-24' , '9' , '-33' ) ; +test( macro , '24' , '-9' , '33' ) ; +test( macro , '-24' , '-9' , '-15' ) ; +test( macro , '24' , '11' , '13' ) ; +test( macro , '-24' , '11' , '-35' ) ; +test( macro , '24' , '-11' , '35' ) ; +test( macro , '-24' , '-11' , '-13' ) ; +test( macro , '24' , '17' , '7' ) ; +test( macro , '-24' , '17' , '-41' ) ; +test( macro , '24' , '-17' , '41' ) ; +test( macro , '-24' , '-17' , '-7' ) ; +test( macro , '24' , '22' , '2' ) ; +test( macro , '-24' , '22' , '-46' ) ; +test( macro , '24' , '-22' , '46' ) ; +test( macro , '-24' , '-22' , '-2' ) ; +test( macro , '24' , '24' , '0' ) ; +test( macro , '-24' , '24' , '-48' ) ; +test( macro , '24' , '-24' , '48' ) ; +test( macro , '-24' , '-24' , '0' ) ; +test( macro , '24' , '27' , '-3' ) ; +test( macro , '-24' , '27' , '-51' ) ; +test( macro , '24' , '-27' , '51' ) ; +test( macro , '-24' , '-27' , '3' ) ; +test( macro , '24' , '29' , '-5' ) ; +test( macro , '-24' , '29' , '-53' ) ; +test( macro , '24' , '-29' , '53' ) ; +test( macro , '-24' , '-29' , '5' ) ; +test( macro , '24' , '1234' , '-1210' ) ; +test( macro , '-24' , '1234' , '-1258' ) ; +test( macro , '24' , '-1234' , '1258' ) ; +test( macro , '-24' , '-1234' , '1210' ) ; +test( macro , '24' , '5678' , '-5654' ) ; +test( macro , '-24' , '5678' , '-5702' ) ; +test( macro , '24' , '-5678' , '5702' ) ; +test( macro , '-24' , '-5678' , '5654' ) ; +test( macro , '24' , '1073741824' , '-1073741800' ) ; +test( macro , '-24' , '1073741824' , '-1073741848' ) ; +test( macro , '24' , '-1073741824' , '1073741848' ) ; +test( macro , '-24' , '-1073741824' , '1073741800' ) ; +test( macro , '24' , '51676101935731' , '-51676101935707' ) ; +test( macro , '-24' , '51676101935731' , '-51676101935755' ) ; +test( macro , '24' , '-51676101935731' , '51676101935755' ) ; +test( macro , '-24' , '-51676101935731' , '51676101935707' ) ; +test( macro , '24' , '717897987691852588770249' , '-717897987691852588770225' ) ; +test( macro , '-24' , '717897987691852588770249' , '-717897987691852588770273' ) ; +test( macro , '24' , '-717897987691852588770249' , '717897987691852588770273' ) ; +test( macro , '-24' , '-717897987691852588770249' , '717897987691852588770225' ) ; +test( macro , '27' , '1' , '26' ) ; +test( macro , '-27' , '1' , '-28' ) ; +test( macro , '27' , '-1' , '28' ) ; +test( macro , '-27' , '-1' , '-26' ) ; +test( macro , '27' , '3' , '24' ) ; +test( macro , '-27' , '3' , '-30' ) ; +test( macro , '27' , '-3' , '30' ) ; +test( macro , '-27' , '-3' , '-24' ) ; +test( macro , '27' , '7' , '20' ) ; +test( macro , '-27' , '7' , '-34' ) ; +test( macro , '27' , '-7' , '34' ) ; +test( macro , '-27' , '-7' , '-20' ) ; +test( macro , '27' , '9' , '18' ) ; +test( macro , '-27' , '9' , '-36' ) ; +test( macro , '27' , '-9' , '36' ) ; +test( macro , '-27' , '-9' , '-18' ) ; +test( macro , '27' , '11' , '16' ) ; +test( macro , '-27' , '11' , '-38' ) ; +test( macro , '27' , '-11' , '38' ) ; +test( macro , '-27' , '-11' , '-16' ) ; +test( macro , '27' , '17' , '10' ) ; +test( macro , '-27' , '17' , '-44' ) ; +test( macro , '27' , '-17' , '44' ) ; +test( macro , '-27' , '-17' , '-10' ) ; +test( macro , '27' , '22' , '5' ) ; +test( macro , '-27' , '22' , '-49' ) ; +test( macro , '27' , '-22' , '49' ) ; +test( macro , '-27' , '-22' , '-5' ) ; +test( macro , '27' , '24' , '3' ) ; +test( macro , '-27' , '24' , '-51' ) ; +test( macro , '27' , '-24' , '51' ) ; +test( macro , '-27' , '-24' , '-3' ) ; +test( macro , '27' , '27' , '0' ) ; +test( macro , '-27' , '27' , '-54' ) ; +test( macro , '27' , '-27' , '54' ) ; +test( macro , '-27' , '-27' , '0' ) ; +test( macro , '27' , '29' , '-2' ) ; +test( macro , '-27' , '29' , '-56' ) ; +test( macro , '27' , '-29' , '56' ) ; +test( macro , '-27' , '-29' , '2' ) ; +test( macro , '27' , '1234' , '-1207' ) ; +test( macro , '-27' , '1234' , '-1261' ) ; +test( macro , '27' , '-1234' , '1261' ) ; +test( macro , '-27' , '-1234' , '1207' ) ; +test( macro , '27' , '5678' , '-5651' ) ; +test( macro , '-27' , '5678' , '-5705' ) ; +test( macro , '27' , '-5678' , '5705' ) ; +test( macro , '-27' , '-5678' , '5651' ) ; +test( macro , '27' , '1073741824' , '-1073741797' ) ; +test( macro , '-27' , '1073741824' , '-1073741851' ) ; +test( macro , '27' , '-1073741824' , '1073741851' ) ; +test( macro , '-27' , '-1073741824' , '1073741797' ) ; +test( macro , '27' , '51676101935731' , '-51676101935704' ) ; +test( macro , '-27' , '51676101935731' , '-51676101935758' ) ; +test( macro , '27' , '-51676101935731' , '51676101935758' ) ; +test( macro , '-27' , '-51676101935731' , '51676101935704' ) ; +test( macro , '27' , '717897987691852588770249' , '-717897987691852588770222' ) ; +test( macro , '-27' , '717897987691852588770249' , '-717897987691852588770276' ) ; +test( macro , '27' , '-717897987691852588770249' , '717897987691852588770276' ) ; +test( macro , '-27' , '-717897987691852588770249' , '717897987691852588770222' ) ; +test( macro , '29' , '1' , '28' ) ; +test( macro , '-29' , '1' , '-30' ) ; +test( macro , '29' , '-1' , '30' ) ; +test( macro , '-29' , '-1' , '-28' ) ; +test( macro , '29' , '3' , '26' ) ; +test( macro , '-29' , '3' , '-32' ) ; +test( macro , '29' , '-3' , '32' ) ; +test( macro , '-29' , '-3' , '-26' ) ; +test( macro , '29' , '7' , '22' ) ; +test( macro , '-29' , '7' , '-36' ) ; +test( macro , '29' , '-7' , '36' ) ; +test( macro , '-29' , '-7' , '-22' ) ; +test( macro , '29' , '9' , '20' ) ; +test( macro , '-29' , '9' , '-38' ) ; +test( macro , '29' , '-9' , '38' ) ; +test( macro , '-29' , '-9' , '-20' ) ; +test( macro , '29' , '11' , '18' ) ; +test( macro , '-29' , '11' , '-40' ) ; +test( macro , '29' , '-11' , '40' ) ; +test( macro , '-29' , '-11' , '-18' ) ; +test( macro , '29' , '17' , '12' ) ; +test( macro , '-29' , '17' , '-46' ) ; +test( macro , '29' , '-17' , '46' ) ; +test( macro , '-29' , '-17' , '-12' ) ; +test( macro , '29' , '22' , '7' ) ; +test( macro , '-29' , '22' , '-51' ) ; +test( macro , '29' , '-22' , '51' ) ; +test( macro , '-29' , '-22' , '-7' ) ; +test( macro , '29' , '24' , '5' ) ; +test( macro , '-29' , '24' , '-53' ) ; +test( macro , '29' , '-24' , '53' ) ; +test( macro , '-29' , '-24' , '-5' ) ; +test( macro , '29' , '27' , '2' ) ; +test( macro , '-29' , '27' , '-56' ) ; +test( macro , '29' , '-27' , '56' ) ; +test( macro , '-29' , '-27' , '-2' ) ; +test( macro , '29' , '29' , '0' ) ; +test( macro , '-29' , '29' , '-58' ) ; +test( macro , '29' , '-29' , '58' ) ; +test( macro , '-29' , '-29' , '0' ) ; +test( macro , '29' , '1234' , '-1205' ) ; +test( macro , '-29' , '1234' , '-1263' ) ; +test( macro , '29' , '-1234' , '1263' ) ; +test( macro , '-29' , '-1234' , '1205' ) ; +test( macro , '29' , '5678' , '-5649' ) ; +test( macro , '-29' , '5678' , '-5707' ) ; +test( macro , '29' , '-5678' , '5707' ) ; +test( macro , '-29' , '-5678' , '5649' ) ; +test( macro , '29' , '1073741824' , '-1073741795' ) ; +test( macro , '-29' , '1073741824' , '-1073741853' ) ; +test( macro , '29' , '-1073741824' , '1073741853' ) ; +test( macro , '-29' , '-1073741824' , '1073741795' ) ; +test( macro , '29' , '51676101935731' , '-51676101935702' ) ; +test( macro , '-29' , '51676101935731' , '-51676101935760' ) ; +test( macro , '29' , '-51676101935731' , '51676101935760' ) ; +test( macro , '-29' , '-51676101935731' , '51676101935702' ) ; +test( macro , '29' , '717897987691852588770249' , '-717897987691852588770220' ) ; +test( macro , '-29' , '717897987691852588770249' , '-717897987691852588770278' ) ; +test( macro , '29' , '-717897987691852588770249' , '717897987691852588770278' ) ; +test( macro , '-29' , '-717897987691852588770249' , '717897987691852588770220' ) ; +test( macro , '1234' , '1' , '1233' ) ; +test( macro , '-1234' , '1' , '-1235' ) ; +test( macro , '1234' , '-1' , '1235' ) ; +test( macro , '-1234' , '-1' , '-1233' ) ; +test( macro , '1234' , '3' , '1231' ) ; +test( macro , '-1234' , '3' , '-1237' ) ; +test( macro , '1234' , '-3' , '1237' ) ; +test( macro , '-1234' , '-3' , '-1231' ) ; +test( macro , '1234' , '7' , '1227' ) ; +test( macro , '-1234' , '7' , '-1241' ) ; +test( macro , '1234' , '-7' , '1241' ) ; +test( macro , '-1234' , '-7' , '-1227' ) ; +test( macro , '1234' , '9' , '1225' ) ; +test( macro , '-1234' , '9' , '-1243' ) ; +test( macro , '1234' , '-9' , '1243' ) ; +test( macro , '-1234' , '-9' , '-1225' ) ; +test( macro , '1234' , '11' , '1223' ) ; +test( macro , '-1234' , '11' , '-1245' ) ; +test( macro , '1234' , '-11' , '1245' ) ; +test( macro , '-1234' , '-11' , '-1223' ) ; +test( macro , '1234' , '17' , '1217' ) ; +test( macro , '-1234' , '17' , '-1251' ) ; +test( macro , '1234' , '-17' , '1251' ) ; +test( macro , '-1234' , '-17' , '-1217' ) ; +test( macro , '1234' , '22' , '1212' ) ; +test( macro , '-1234' , '22' , '-1256' ) ; +test( macro , '1234' , '-22' , '1256' ) ; +test( macro , '-1234' , '-22' , '-1212' ) ; +test( macro , '1234' , '24' , '1210' ) ; +test( macro , '-1234' , '24' , '-1258' ) ; +test( macro , '1234' , '-24' , '1258' ) ; +test( macro , '-1234' , '-24' , '-1210' ) ; +test( macro , '1234' , '27' , '1207' ) ; +test( macro , '-1234' , '27' , '-1261' ) ; +test( macro , '1234' , '-27' , '1261' ) ; +test( macro , '-1234' , '-27' , '-1207' ) ; +test( macro , '1234' , '29' , '1205' ) ; +test( macro , '-1234' , '29' , '-1263' ) ; +test( macro , '1234' , '-29' , '1263' ) ; +test( macro , '-1234' , '-29' , '-1205' ) ; +test( macro , '1234' , '1234' , '0' ) ; +test( macro , '-1234' , '1234' , '-2468' ) ; +test( macro , '1234' , '-1234' , '2468' ) ; +test( macro , '-1234' , '-1234' , '0' ) ; +test( macro , '1234' , '5678' , '-4444' ) ; +test( macro , '-1234' , '5678' , '-6912' ) ; +test( macro , '1234' , '-5678' , '6912' ) ; +test( macro , '-1234' , '-5678' , '4444' ) ; +test( macro , '1234' , '1073741824' , '-1073740590' ) ; +test( macro , '-1234' , '1073741824' , '-1073743058' ) ; +test( macro , '1234' , '-1073741824' , '1073743058' ) ; +test( macro , '-1234' , '-1073741824' , '1073740590' ) ; +test( macro , '1234' , '51676101935731' , '-51676101934497' ) ; +test( macro , '-1234' , '51676101935731' , '-51676101936965' ) ; +test( macro , '1234' , '-51676101935731' , '51676101936965' ) ; +test( macro , '-1234' , '-51676101935731' , '51676101934497' ) ; +test( macro , '1234' , '717897987691852588770249' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-717897987691852588771483' ) ; +test( macro , '1234' , '-717897987691852588770249' , '717897987691852588771483' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '717897987691852588769015' ) ; +test( macro , '5678' , '1' , '5677' ) ; +test( macro , '-5678' , '1' , '-5679' ) ; +test( macro , '5678' , '-1' , '5679' ) ; +test( macro , '-5678' , '-1' , '-5677' ) ; +test( macro , '5678' , '3' , '5675' ) ; +test( macro , '-5678' , '3' , '-5681' ) ; +test( macro , '5678' , '-3' , '5681' ) ; +test( macro , '-5678' , '-3' , '-5675' ) ; +test( macro , '5678' , '7' , '5671' ) ; +test( macro , '-5678' , '7' , '-5685' ) ; +test( macro , '5678' , '-7' , '5685' ) ; +test( macro , '-5678' , '-7' , '-5671' ) ; +test( macro , '5678' , '9' , '5669' ) ; +test( macro , '-5678' , '9' , '-5687' ) ; +test( macro , '5678' , '-9' , '5687' ) ; +test( macro , '-5678' , '-9' , '-5669' ) ; +test( macro , '5678' , '11' , '5667' ) ; +test( macro , '-5678' , '11' , '-5689' ) ; +test( macro , '5678' , '-11' , '5689' ) ; +test( macro , '-5678' , '-11' , '-5667' ) ; +test( macro , '5678' , '17' , '5661' ) ; +test( macro , '-5678' , '17' , '-5695' ) ; +test( macro , '5678' , '-17' , '5695' ) ; +test( macro , '-5678' , '-17' , '-5661' ) ; +test( macro , '5678' , '22' , '5656' ) ; +test( macro , '-5678' , '22' , '-5700' ) ; +test( macro , '5678' , '-22' , '5700' ) ; +test( macro , '-5678' , '-22' , '-5656' ) ; +test( macro , '5678' , '24' , '5654' ) ; +test( macro , '-5678' , '24' , '-5702' ) ; +test( macro , '5678' , '-24' , '5702' ) ; +test( macro , '-5678' , '-24' , '-5654' ) ; +test( macro , '5678' , '27' , '5651' ) ; +test( macro , '-5678' , '27' , '-5705' ) ; +test( macro , '5678' , '-27' , '5705' ) ; +test( macro , '-5678' , '-27' , '-5651' ) ; +test( macro , '5678' , '29' , '5649' ) ; +test( macro , '-5678' , '29' , '-5707' ) ; +test( macro , '5678' , '-29' , '5707' ) ; +test( macro , '-5678' , '-29' , '-5649' ) ; +test( macro , '5678' , '1234' , '4444' ) ; +test( macro , '-5678' , '1234' , '-6912' ) ; +test( macro , '5678' , '-1234' , '6912' ) ; +test( macro , '-5678' , '-1234' , '-4444' ) ; +test( macro , '5678' , '5678' , '0' ) ; +test( macro , '-5678' , '5678' , '-11356' ) ; +test( macro , '5678' , '-5678' , '11356' ) ; +test( macro , '-5678' , '-5678' , '0' ) ; +test( macro , '5678' , '1073741824' , '-1073736146' ) ; +test( macro , '-5678' , '1073741824' , '-1073747502' ) ; +test( macro , '5678' , '-1073741824' , '1073747502' ) ; +test( macro , '-5678' , '-1073741824' , '1073736146' ) ; +test( macro , '5678' , '51676101935731' , '-51676101930053' ) ; +test( macro , '-5678' , '51676101935731' , '-51676101941409' ) ; +test( macro , '5678' , '-51676101935731' , '51676101941409' ) ; +test( macro , '-5678' , '-51676101935731' , '51676101930053' ) ; +test( macro , '5678' , '717897987691852588770249' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-717897987691852588775927' ) ; +test( macro , '5678' , '-717897987691852588770249' , '717897987691852588775927' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '717897987691852588764571' ) ; test( macro , '1073741824' , '1' , '1073741823' ) ; test( macro , '-1073741824' , '1' , '-1073741825' ) ; test( macro , '1073741824' , '-1' , '1073741825' ) ; test( macro , '-1073741824' , '-1' , '-1073741823' ) ; +test( macro , '1073741824' , '3' , '1073741821' ) ; +test( macro , '-1073741824' , '3' , '-1073741827' ) ; +test( macro , '1073741824' , '-3' , '1073741827' ) ; +test( macro , '-1073741824' , '-3' , '-1073741821' ) ; +test( macro , '1073741824' , '7' , '1073741817' ) ; +test( macro , '-1073741824' , '7' , '-1073741831' ) ; +test( macro , '1073741824' , '-7' , '1073741831' ) ; +test( macro , '-1073741824' , '-7' , '-1073741817' ) ; +test( macro , '1073741824' , '9' , '1073741815' ) ; +test( macro , '-1073741824' , '9' , '-1073741833' ) ; +test( macro , '1073741824' , '-9' , '1073741833' ) ; +test( macro , '-1073741824' , '-9' , '-1073741815' ) ; +test( macro , '1073741824' , '11' , '1073741813' ) ; +test( macro , '-1073741824' , '11' , '-1073741835' ) ; +test( macro , '1073741824' , '-11' , '1073741835' ) ; +test( macro , '-1073741824' , '-11' , '-1073741813' ) ; test( macro , '1073741824' , '17' , '1073741807' ) ; test( macro , '-1073741824' , '17' , '-1073741841' ) ; test( macro , '1073741824' , '-17' , '1073741841' ) ; test( macro , '-1073741824' , '-17' , '-1073741807' ) ; -test( macro , '1073741824' , '51676101935731' , '-51675028193907' ) ; -test( macro , '-1073741824' , '51676101935731' , '-51677175677555' ) ; -test( macro , '1073741824' , '-51676101935731' , '51677175677555' ) ; -test( macro , '-1073741824' , '-51676101935731' , '51675028193907' ) ; +test( macro , '1073741824' , '22' , '1073741802' ) ; +test( macro , '-1073741824' , '22' , '-1073741846' ) ; +test( macro , '1073741824' , '-22' , '1073741846' ) ; +test( macro , '-1073741824' , '-22' , '-1073741802' ) ; +test( macro , '1073741824' , '24' , '1073741800' ) ; +test( macro , '-1073741824' , '24' , '-1073741848' ) ; +test( macro , '1073741824' , '-24' , '1073741848' ) ; +test( macro , '-1073741824' , '-24' , '-1073741800' ) ; +test( macro , '1073741824' , '27' , '1073741797' ) ; +test( macro , '-1073741824' , '27' , '-1073741851' ) ; +test( macro , '1073741824' , '-27' , '1073741851' ) ; +test( macro , '-1073741824' , '-27' , '-1073741797' ) ; +test( macro , '1073741824' , '29' , '1073741795' ) ; +test( macro , '-1073741824' , '29' , '-1073741853' ) ; +test( macro , '1073741824' , '-29' , '1073741853' ) ; +test( macro , '-1073741824' , '-29' , '-1073741795' ) ; +test( macro , '1073741824' , '1234' , '1073740590' ) ; +test( macro , '-1073741824' , '1234' , '-1073743058' ) ; +test( macro , '1073741824' , '-1234' , '1073743058' ) ; +test( macro , '-1073741824' , '-1234' , '-1073740590' ) ; +test( macro , '1073741824' , '5678' , '1073736146' ) ; +test( macro , '-1073741824' , '5678' , '-1073747502' ) ; +test( macro , '1073741824' , '-5678' , '1073747502' ) ; +test( macro , '-1073741824' , '-5678' , '-1073736146' ) ; test( macro , '1073741824' , '1073741824' , '0' ) ; test( macro , '-1073741824' , '1073741824' , '-2147483648' ) ; test( macro , '1073741824' , '-1073741824' , '2147483648' ) ; test( macro , '-1073741824' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '-51675028193907' ) ; +test( macro , '-1073741824' , '51676101935731' , '-51677175677555' ) ; +test( macro , '1073741824' , '-51676101935731' , '51677175677555' ) ; +test( macro , '-1073741824' , '-51676101935731' , '51675028193907' ) ; test( macro , '1073741824' , '717897987691852588770249' , '-717897987691851515028425' ) ; test( macro , '-1073741824' , '717897987691852588770249' , '-717897987691853662512073' ) ; test( macro , '1073741824' , '-717897987691852588770249' , '717897987691853662512073' ) ; test( macro , '-1073741824' , '-717897987691852588770249' , '717897987691851515028425' ) ; +test( macro , '51676101935731' , '1' , '51676101935730' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935732' ) ; +test( macro , '51676101935731' , '-1' , '51676101935732' ) ; +test( macro , '-51676101935731' , '-1' , '-51676101935730' ) ; +test( macro , '51676101935731' , '3' , '51676101935728' ) ; +test( macro , '-51676101935731' , '3' , '-51676101935734' ) ; +test( macro , '51676101935731' , '-3' , '51676101935734' ) ; +test( macro , '-51676101935731' , '-3' , '-51676101935728' ) ; +test( macro , '51676101935731' , '7' , '51676101935724' ) ; +test( macro , '-51676101935731' , '7' , '-51676101935738' ) ; +test( macro , '51676101935731' , '-7' , '51676101935738' ) ; +test( macro , '-51676101935731' , '-7' , '-51676101935724' ) ; +test( macro , '51676101935731' , '9' , '51676101935722' ) ; +test( macro , '-51676101935731' , '9' , '-51676101935740' ) ; +test( macro , '51676101935731' , '-9' , '51676101935740' ) ; +test( macro , '-51676101935731' , '-9' , '-51676101935722' ) ; +test( macro , '51676101935731' , '11' , '51676101935720' ) ; +test( macro , '-51676101935731' , '11' , '-51676101935742' ) ; +test( macro , '51676101935731' , '-11' , '51676101935742' ) ; +test( macro , '-51676101935731' , '-11' , '-51676101935720' ) ; +test( macro , '51676101935731' , '17' , '51676101935714' ) ; +test( macro , '-51676101935731' , '17' , '-51676101935748' ) ; +test( macro , '51676101935731' , '-17' , '51676101935748' ) ; +test( macro , '-51676101935731' , '-17' , '-51676101935714' ) ; +test( macro , '51676101935731' , '22' , '51676101935709' ) ; +test( macro , '-51676101935731' , '22' , '-51676101935753' ) ; +test( macro , '51676101935731' , '-22' , '51676101935753' ) ; +test( macro , '-51676101935731' , '-22' , '-51676101935709' ) ; +test( macro , '51676101935731' , '24' , '51676101935707' ) ; +test( macro , '-51676101935731' , '24' , '-51676101935755' ) ; +test( macro , '51676101935731' , '-24' , '51676101935755' ) ; +test( macro , '-51676101935731' , '-24' , '-51676101935707' ) ; +test( macro , '51676101935731' , '27' , '51676101935704' ) ; +test( macro , '-51676101935731' , '27' , '-51676101935758' ) ; +test( macro , '51676101935731' , '-27' , '51676101935758' ) ; +test( macro , '-51676101935731' , '-27' , '-51676101935704' ) ; +test( macro , '51676101935731' , '29' , '51676101935702' ) ; +test( macro , '-51676101935731' , '29' , '-51676101935760' ) ; +test( macro , '51676101935731' , '-29' , '51676101935760' ) ; +test( macro , '-51676101935731' , '-29' , '-51676101935702' ) ; +test( macro , '51676101935731' , '1234' , '51676101934497' ) ; +test( macro , '-51676101935731' , '1234' , '-51676101936965' ) ; +test( macro , '51676101935731' , '-1234' , '51676101936965' ) ; +test( macro , '-51676101935731' , '-1234' , '-51676101934497' ) ; +test( macro , '51676101935731' , '5678' , '51676101930053' ) ; +test( macro , '-51676101935731' , '5678' , '-51676101941409' ) ; +test( macro , '51676101935731' , '-5678' , '51676101941409' ) ; +test( macro , '-51676101935731' , '-5678' , '-51676101930053' ) ; +test( macro , '51676101935731' , '1073741824' , '51675028193907' ) ; +test( macro , '-51676101935731' , '1073741824' , '-51677175677555' ) ; +test( macro , '51676101935731' , '-1073741824' , '51677175677555' ) ; +test( macro , '-51676101935731' , '-1073741824' , '-51675028193907' ) ; +test( macro , '51676101935731' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-103352203871462' ) ; +test( macro , '51676101935731' , '-51676101935731' , '103352203871462' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-717897987743528690705980' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '717897987743528690705980' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '717897987640176486834518' ) ; test( macro , '717897987691852588770249' , '1' , '717897987691852588770248' ) ; test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770250' ) ; test( macro , '717897987691852588770249' , '-1' , '717897987691852588770250' ) ; test( macro , '-717897987691852588770249' , '-1' , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , '3' , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , '3' , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , '-3' , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , '-3' , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , '7' , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , '7' , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , '-7' , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , '-7' , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , '9' , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , '9' , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , '-9' , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , '-9' , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , '11' , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , '11' , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , '-11' , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , '-11' , '-717897987691852588770238' ) ; test( macro , '717897987691852588770249' , '17' , '717897987691852588770232' ) ; test( macro , '-717897987691852588770249' , '17' , '-717897987691852588770266' ) ; test( macro , '717897987691852588770249' , '-17' , '717897987691852588770266' ) ; test( macro , '-717897987691852588770249' , '-17' , '-717897987691852588770232' ) ; -test( macro , '717897987691852588770249' , '51676101935731' , '717897987640176486834518' ) ; -test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987743528690705980' ) ; -test( macro , '717897987691852588770249' , '-51676101935731' , '717897987743528690705980' ) ; -test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987640176486834518' ) ; +test( macro , '717897987691852588770249' , '22' , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , '22' , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , '-22' , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , '-22' , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , '24' , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , '24' , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , '-24' , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , '-24' , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , '27' , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , '27' , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , '-27' , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , '-27' , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , '29' , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , '29' , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , '-29' , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , '-29' , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , '1234' , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , '-1234' , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , '5678' , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , '-5678' , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '-717897987691852588764571' ) ; test( macro , '717897987691852588770249' , '1073741824' , '717897987691851515028425' ) ; test( macro , '-717897987691852588770249' , '1073741824' , '-717897987691853662512073' ) ; test( macro , '717897987691852588770249' , '-1073741824' , '717897987691853662512073' ) ; test( macro , '-717897987691852588770249' , '-1073741824' , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '-717897987640176486834518' ) ; test( macro , '717897987691852588770249' , '717897987691852588770249' , '0' ) ; test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1435795975383705177540498' ) ; test( macro , '717897987691852588770249' , '-717897987691852588770249' , '1435795975383705177540498' ) ; diff --git a/test/src/integer/arithmetic/subn.js b/test/src/integer/arithmetic/subn.js new file mode 100644 index 0000000..55e910a --- /dev/null +++ b/test/src/integer/arithmetic/subn.js @@ -0,0 +1,852 @@ +import test from 'ava' ; +import { parse , stringify , subn } from '../../../../src' ; + +function macro ( t , A , B , C ) { + const a = parse( A ) ; + const c = subn( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; +} + +macro.title = ( _ , A , B , C ) => `subn(${A},${B}) = ${C}` ; + +test( macro , '1' , 1 , '0' ) ; +test( macro , '-1' , 1 , '-2' ) ; +test( macro , '1' , -1 , '2' ) ; +test( macro , '-1' , -1 , '0' ) ; +test( macro , '1' , 3 , '-2' ) ; +test( macro , '-1' , 3 , '-4' ) ; +test( macro , '1' , -3 , '4' ) ; +test( macro , '-1' , -3 , '2' ) ; +test( macro , '1' , 7 , '-6' ) ; +test( macro , '-1' , 7 , '-8' ) ; +test( macro , '1' , -7 , '8' ) ; +test( macro , '-1' , -7 , '6' ) ; +test( macro , '1' , 9 , '-8' ) ; +test( macro , '-1' , 9 , '-10' ) ; +test( macro , '1' , -9 , '10' ) ; +test( macro , '-1' , -9 , '8' ) ; +test( macro , '1' , 11 , '-10' ) ; +test( macro , '-1' , 11 , '-12' ) ; +test( macro , '1' , -11 , '12' ) ; +test( macro , '-1' , -11 , '10' ) ; +test( macro , '1' , 17 , '-16' ) ; +test( macro , '-1' , 17 , '-18' ) ; +test( macro , '1' , -17 , '18' ) ; +test( macro , '-1' , -17 , '16' ) ; +test( macro , '1' , 22 , '-21' ) ; +test( macro , '-1' , 22 , '-23' ) ; +test( macro , '1' , -22 , '23' ) ; +test( macro , '-1' , -22 , '21' ) ; +test( macro , '1' , 24 , '-23' ) ; +test( macro , '-1' , 24 , '-25' ) ; +test( macro , '1' , -24 , '25' ) ; +test( macro , '-1' , -24 , '23' ) ; +test( macro , '1' , 27 , '-26' ) ; +test( macro , '-1' , 27 , '-28' ) ; +test( macro , '1' , -27 , '28' ) ; +test( macro , '-1' , -27 , '26' ) ; +test( macro , '1' , 29 , '-28' ) ; +test( macro , '-1' , 29 , '-30' ) ; +test( macro , '1' , -29 , '30' ) ; +test( macro , '-1' , -29 , '28' ) ; +test( macro , '1' , 1234 , '-1233' ) ; +test( macro , '-1' , 1234 , '-1235' ) ; +test( macro , '1' , -1234 , '1235' ) ; +test( macro , '-1' , -1234 , '1233' ) ; +test( macro , '1' , 5678 , '-5677' ) ; +test( macro , '-1' , 5678 , '-5679' ) ; +test( macro , '1' , -5678 , '5679' ) ; +test( macro , '-1' , -5678 , '5677' ) ; +test( macro , '1' , 1073741824 , '-1073741823' ) ; +test( macro , '-1' , 1073741824 , '-1073741825' ) ; +test( macro , '1' , -1073741824 , '1073741825' ) ; +test( macro , '-1' , -1073741824 , '1073741823' ) ; +test( macro , '1' , 51676101935731 , '-51676101935730' ) ; +test( macro , '-1' , 51676101935731 , '-51676101935732' ) ; +test( macro , '1' , -51676101935731 , '51676101935732' ) ; +test( macro , '-1' , -51676101935731 , '51676101935730' ) ; +test( macro , '3' , 1 , '2' ) ; +test( macro , '-3' , 1 , '-4' ) ; +test( macro , '3' , -1 , '4' ) ; +test( macro , '-3' , -1 , '-2' ) ; +test( macro , '3' , 3 , '0' ) ; +test( macro , '-3' , 3 , '-6' ) ; +test( macro , '3' , -3 , '6' ) ; +test( macro , '-3' , -3 , '0' ) ; +test( macro , '3' , 7 , '-4' ) ; +test( macro , '-3' , 7 , '-10' ) ; +test( macro , '3' , -7 , '10' ) ; +test( macro , '-3' , -7 , '4' ) ; +test( macro , '3' , 9 , '-6' ) ; +test( macro , '-3' , 9 , '-12' ) ; +test( macro , '3' , -9 , '12' ) ; +test( macro , '-3' , -9 , '6' ) ; +test( macro , '3' , 11 , '-8' ) ; +test( macro , '-3' , 11 , '-14' ) ; +test( macro , '3' , -11 , '14' ) ; +test( macro , '-3' , -11 , '8' ) ; +test( macro , '3' , 17 , '-14' ) ; +test( macro , '-3' , 17 , '-20' ) ; +test( macro , '3' , -17 , '20' ) ; +test( macro , '-3' , -17 , '14' ) ; +test( macro , '3' , 22 , '-19' ) ; +test( macro , '-3' , 22 , '-25' ) ; +test( macro , '3' , -22 , '25' ) ; +test( macro , '-3' , -22 , '19' ) ; +test( macro , '3' , 24 , '-21' ) ; +test( macro , '-3' , 24 , '-27' ) ; +test( macro , '3' , -24 , '27' ) ; +test( macro , '-3' , -24 , '21' ) ; +test( macro , '3' , 27 , '-24' ) ; +test( macro , '-3' , 27 , '-30' ) ; +test( macro , '3' , -27 , '30' ) ; +test( macro , '-3' , -27 , '24' ) ; +test( macro , '3' , 29 , '-26' ) ; +test( macro , '-3' , 29 , '-32' ) ; +test( macro , '3' , -29 , '32' ) ; +test( macro , '-3' , -29 , '26' ) ; +test( macro , '3' , 1234 , '-1231' ) ; +test( macro , '-3' , 1234 , '-1237' ) ; +test( macro , '3' , -1234 , '1237' ) ; +test( macro , '-3' , -1234 , '1231' ) ; +test( macro , '3' , 5678 , '-5675' ) ; +test( macro , '-3' , 5678 , '-5681' ) ; +test( macro , '3' , -5678 , '5681' ) ; +test( macro , '-3' , -5678 , '5675' ) ; +test( macro , '3' , 1073741824 , '-1073741821' ) ; +test( macro , '-3' , 1073741824 , '-1073741827' ) ; +test( macro , '3' , -1073741824 , '1073741827' ) ; +test( macro , '-3' , -1073741824 , '1073741821' ) ; +test( macro , '3' , 51676101935731 , '-51676101935728' ) ; +test( macro , '-3' , 51676101935731 , '-51676101935734' ) ; +test( macro , '3' , -51676101935731 , '51676101935734' ) ; +test( macro , '-3' , -51676101935731 , '51676101935728' ) ; +test( macro , '7' , 1 , '6' ) ; +test( macro , '-7' , 1 , '-8' ) ; +test( macro , '7' , -1 , '8' ) ; +test( macro , '-7' , -1 , '-6' ) ; +test( macro , '7' , 3 , '4' ) ; +test( macro , '-7' , 3 , '-10' ) ; +test( macro , '7' , -3 , '10' ) ; +test( macro , '-7' , -3 , '-4' ) ; +test( macro , '7' , 7 , '0' ) ; +test( macro , '-7' , 7 , '-14' ) ; +test( macro , '7' , -7 , '14' ) ; +test( macro , '-7' , -7 , '0' ) ; +test( macro , '7' , 9 , '-2' ) ; +test( macro , '-7' , 9 , '-16' ) ; +test( macro , '7' , -9 , '16' ) ; +test( macro , '-7' , -9 , '2' ) ; +test( macro , '7' , 11 , '-4' ) ; +test( macro , '-7' , 11 , '-18' ) ; +test( macro , '7' , -11 , '18' ) ; +test( macro , '-7' , -11 , '4' ) ; +test( macro , '7' , 17 , '-10' ) ; +test( macro , '-7' , 17 , '-24' ) ; +test( macro , '7' , -17 , '24' ) ; +test( macro , '-7' , -17 , '10' ) ; +test( macro , '7' , 22 , '-15' ) ; +test( macro , '-7' , 22 , '-29' ) ; +test( macro , '7' , -22 , '29' ) ; +test( macro , '-7' , -22 , '15' ) ; +test( macro , '7' , 24 , '-17' ) ; +test( macro , '-7' , 24 , '-31' ) ; +test( macro , '7' , -24 , '31' ) ; +test( macro , '-7' , -24 , '17' ) ; +test( macro , '7' , 27 , '-20' ) ; +test( macro , '-7' , 27 , '-34' ) ; +test( macro , '7' , -27 , '34' ) ; +test( macro , '-7' , -27 , '20' ) ; +test( macro , '7' , 29 , '-22' ) ; +test( macro , '-7' , 29 , '-36' ) ; +test( macro , '7' , -29 , '36' ) ; +test( macro , '-7' , -29 , '22' ) ; +test( macro , '7' , 1234 , '-1227' ) ; +test( macro , '-7' , 1234 , '-1241' ) ; +test( macro , '7' , -1234 , '1241' ) ; +test( macro , '-7' , -1234 , '1227' ) ; +test( macro , '7' , 5678 , '-5671' ) ; +test( macro , '-7' , 5678 , '-5685' ) ; +test( macro , '7' , -5678 , '5685' ) ; +test( macro , '-7' , -5678 , '5671' ) ; +test( macro , '7' , 1073741824 , '-1073741817' ) ; +test( macro , '-7' , 1073741824 , '-1073741831' ) ; +test( macro , '7' , -1073741824 , '1073741831' ) ; +test( macro , '-7' , -1073741824 , '1073741817' ) ; +test( macro , '7' , 51676101935731 , '-51676101935724' ) ; +test( macro , '-7' , 51676101935731 , '-51676101935738' ) ; +test( macro , '7' , -51676101935731 , '51676101935738' ) ; +test( macro , '-7' , -51676101935731 , '51676101935724' ) ; +test( macro , '9' , 1 , '8' ) ; +test( macro , '-9' , 1 , '-10' ) ; +test( macro , '9' , -1 , '10' ) ; +test( macro , '-9' , -1 , '-8' ) ; +test( macro , '9' , 3 , '6' ) ; +test( macro , '-9' , 3 , '-12' ) ; +test( macro , '9' , -3 , '12' ) ; +test( macro , '-9' , -3 , '-6' ) ; +test( macro , '9' , 7 , '2' ) ; +test( macro , '-9' , 7 , '-16' ) ; +test( macro , '9' , -7 , '16' ) ; +test( macro , '-9' , -7 , '-2' ) ; +test( macro , '9' , 9 , '0' ) ; +test( macro , '-9' , 9 , '-18' ) ; +test( macro , '9' , -9 , '18' ) ; +test( macro , '-9' , -9 , '0' ) ; +test( macro , '9' , 11 , '-2' ) ; +test( macro , '-9' , 11 , '-20' ) ; +test( macro , '9' , -11 , '20' ) ; +test( macro , '-9' , -11 , '2' ) ; +test( macro , '9' , 17 , '-8' ) ; +test( macro , '-9' , 17 , '-26' ) ; +test( macro , '9' , -17 , '26' ) ; +test( macro , '-9' , -17 , '8' ) ; +test( macro , '9' , 22 , '-13' ) ; +test( macro , '-9' , 22 , '-31' ) ; +test( macro , '9' , -22 , '31' ) ; +test( macro , '-9' , -22 , '13' ) ; +test( macro , '9' , 24 , '-15' ) ; +test( macro , '-9' , 24 , '-33' ) ; +test( macro , '9' , -24 , '33' ) ; +test( macro , '-9' , -24 , '15' ) ; +test( macro , '9' , 27 , '-18' ) ; +test( macro , '-9' , 27 , '-36' ) ; +test( macro , '9' , -27 , '36' ) ; +test( macro , '-9' , -27 , '18' ) ; +test( macro , '9' , 29 , '-20' ) ; +test( macro , '-9' , 29 , '-38' ) ; +test( macro , '9' , -29 , '38' ) ; +test( macro , '-9' , -29 , '20' ) ; +test( macro , '9' , 1234 , '-1225' ) ; +test( macro , '-9' , 1234 , '-1243' ) ; +test( macro , '9' , -1234 , '1243' ) ; +test( macro , '-9' , -1234 , '1225' ) ; +test( macro , '9' , 5678 , '-5669' ) ; +test( macro , '-9' , 5678 , '-5687' ) ; +test( macro , '9' , -5678 , '5687' ) ; +test( macro , '-9' , -5678 , '5669' ) ; +test( macro , '9' , 1073741824 , '-1073741815' ) ; +test( macro , '-9' , 1073741824 , '-1073741833' ) ; +test( macro , '9' , -1073741824 , '1073741833' ) ; +test( macro , '-9' , -1073741824 , '1073741815' ) ; +test( macro , '9' , 51676101935731 , '-51676101935722' ) ; +test( macro , '-9' , 51676101935731 , '-51676101935740' ) ; +test( macro , '9' , -51676101935731 , '51676101935740' ) ; +test( macro , '-9' , -51676101935731 , '51676101935722' ) ; +test( macro , '11' , 1 , '10' ) ; +test( macro , '-11' , 1 , '-12' ) ; +test( macro , '11' , -1 , '12' ) ; +test( macro , '-11' , -1 , '-10' ) ; +test( macro , '11' , 3 , '8' ) ; +test( macro , '-11' , 3 , '-14' ) ; +test( macro , '11' , -3 , '14' ) ; +test( macro , '-11' , -3 , '-8' ) ; +test( macro , '11' , 7 , '4' ) ; +test( macro , '-11' , 7 , '-18' ) ; +test( macro , '11' , -7 , '18' ) ; +test( macro , '-11' , -7 , '-4' ) ; +test( macro , '11' , 9 , '2' ) ; +test( macro , '-11' , 9 , '-20' ) ; +test( macro , '11' , -9 , '20' ) ; +test( macro , '-11' , -9 , '-2' ) ; +test( macro , '11' , 11 , '0' ) ; +test( macro , '-11' , 11 , '-22' ) ; +test( macro , '11' , -11 , '22' ) ; +test( macro , '-11' , -11 , '0' ) ; +test( macro , '11' , 17 , '-6' ) ; +test( macro , '-11' , 17 , '-28' ) ; +test( macro , '11' , -17 , '28' ) ; +test( macro , '-11' , -17 , '6' ) ; +test( macro , '11' , 22 , '-11' ) ; +test( macro , '-11' , 22 , '-33' ) ; +test( macro , '11' , -22 , '33' ) ; +test( macro , '-11' , -22 , '11' ) ; +test( macro , '11' , 24 , '-13' ) ; +test( macro , '-11' , 24 , '-35' ) ; +test( macro , '11' , -24 , '35' ) ; +test( macro , '-11' , -24 , '13' ) ; +test( macro , '11' , 27 , '-16' ) ; +test( macro , '-11' , 27 , '-38' ) ; +test( macro , '11' , -27 , '38' ) ; +test( macro , '-11' , -27 , '16' ) ; +test( macro , '11' , 29 , '-18' ) ; +test( macro , '-11' , 29 , '-40' ) ; +test( macro , '11' , -29 , '40' ) ; +test( macro , '-11' , -29 , '18' ) ; +test( macro , '11' , 1234 , '-1223' ) ; +test( macro , '-11' , 1234 , '-1245' ) ; +test( macro , '11' , -1234 , '1245' ) ; +test( macro , '-11' , -1234 , '1223' ) ; +test( macro , '11' , 5678 , '-5667' ) ; +test( macro , '-11' , 5678 , '-5689' ) ; +test( macro , '11' , -5678 , '5689' ) ; +test( macro , '-11' , -5678 , '5667' ) ; +test( macro , '11' , 1073741824 , '-1073741813' ) ; +test( macro , '-11' , 1073741824 , '-1073741835' ) ; +test( macro , '11' , -1073741824 , '1073741835' ) ; +test( macro , '-11' , -1073741824 , '1073741813' ) ; +test( macro , '11' , 51676101935731 , '-51676101935720' ) ; +test( macro , '-11' , 51676101935731 , '-51676101935742' ) ; +test( macro , '11' , -51676101935731 , '51676101935742' ) ; +test( macro , '-11' , -51676101935731 , '51676101935720' ) ; +test( macro , '17' , 1 , '16' ) ; +test( macro , '-17' , 1 , '-18' ) ; +test( macro , '17' , -1 , '18' ) ; +test( macro , '-17' , -1 , '-16' ) ; +test( macro , '17' , 3 , '14' ) ; +test( macro , '-17' , 3 , '-20' ) ; +test( macro , '17' , -3 , '20' ) ; +test( macro , '-17' , -3 , '-14' ) ; +test( macro , '17' , 7 , '10' ) ; +test( macro , '-17' , 7 , '-24' ) ; +test( macro , '17' , -7 , '24' ) ; +test( macro , '-17' , -7 , '-10' ) ; +test( macro , '17' , 9 , '8' ) ; +test( macro , '-17' , 9 , '-26' ) ; +test( macro , '17' , -9 , '26' ) ; +test( macro , '-17' , -9 , '-8' ) ; +test( macro , '17' , 11 , '6' ) ; +test( macro , '-17' , 11 , '-28' ) ; +test( macro , '17' , -11 , '28' ) ; +test( macro , '-17' , -11 , '-6' ) ; +test( macro , '17' , 17 , '0' ) ; +test( macro , '-17' , 17 , '-34' ) ; +test( macro , '17' , -17 , '34' ) ; +test( macro , '-17' , -17 , '0' ) ; +test( macro , '17' , 22 , '-5' ) ; +test( macro , '-17' , 22 , '-39' ) ; +test( macro , '17' , -22 , '39' ) ; +test( macro , '-17' , -22 , '5' ) ; +test( macro , '17' , 24 , '-7' ) ; +test( macro , '-17' , 24 , '-41' ) ; +test( macro , '17' , -24 , '41' ) ; +test( macro , '-17' , -24 , '7' ) ; +test( macro , '17' , 27 , '-10' ) ; +test( macro , '-17' , 27 , '-44' ) ; +test( macro , '17' , -27 , '44' ) ; +test( macro , '-17' , -27 , '10' ) ; +test( macro , '17' , 29 , '-12' ) ; +test( macro , '-17' , 29 , '-46' ) ; +test( macro , '17' , -29 , '46' ) ; +test( macro , '-17' , -29 , '12' ) ; +test( macro , '17' , 1234 , '-1217' ) ; +test( macro , '-17' , 1234 , '-1251' ) ; +test( macro , '17' , -1234 , '1251' ) ; +test( macro , '-17' , -1234 , '1217' ) ; +test( macro , '17' , 5678 , '-5661' ) ; +test( macro , '-17' , 5678 , '-5695' ) ; +test( macro , '17' , -5678 , '5695' ) ; +test( macro , '-17' , -5678 , '5661' ) ; +test( macro , '17' , 1073741824 , '-1073741807' ) ; +test( macro , '-17' , 1073741824 , '-1073741841' ) ; +test( macro , '17' , -1073741824 , '1073741841' ) ; +test( macro , '-17' , -1073741824 , '1073741807' ) ; +test( macro , '17' , 51676101935731 , '-51676101935714' ) ; +test( macro , '-17' , 51676101935731 , '-51676101935748' ) ; +test( macro , '17' , -51676101935731 , '51676101935748' ) ; +test( macro , '-17' , -51676101935731 , '51676101935714' ) ; +test( macro , '22' , 1 , '21' ) ; +test( macro , '-22' , 1 , '-23' ) ; +test( macro , '22' , -1 , '23' ) ; +test( macro , '-22' , -1 , '-21' ) ; +test( macro , '22' , 3 , '19' ) ; +test( macro , '-22' , 3 , '-25' ) ; +test( macro , '22' , -3 , '25' ) ; +test( macro , '-22' , -3 , '-19' ) ; +test( macro , '22' , 7 , '15' ) ; +test( macro , '-22' , 7 , '-29' ) ; +test( macro , '22' , -7 , '29' ) ; +test( macro , '-22' , -7 , '-15' ) ; +test( macro , '22' , 9 , '13' ) ; +test( macro , '-22' , 9 , '-31' ) ; +test( macro , '22' , -9 , '31' ) ; +test( macro , '-22' , -9 , '-13' ) ; +test( macro , '22' , 11 , '11' ) ; +test( macro , '-22' , 11 , '-33' ) ; +test( macro , '22' , -11 , '33' ) ; +test( macro , '-22' , -11 , '-11' ) ; +test( macro , '22' , 17 , '5' ) ; +test( macro , '-22' , 17 , '-39' ) ; +test( macro , '22' , -17 , '39' ) ; +test( macro , '-22' , -17 , '-5' ) ; +test( macro , '22' , 22 , '0' ) ; +test( macro , '-22' , 22 , '-44' ) ; +test( macro , '22' , -22 , '44' ) ; +test( macro , '-22' , -22 , '0' ) ; +test( macro , '22' , 24 , '-2' ) ; +test( macro , '-22' , 24 , '-46' ) ; +test( macro , '22' , -24 , '46' ) ; +test( macro , '-22' , -24 , '2' ) ; +test( macro , '22' , 27 , '-5' ) ; +test( macro , '-22' , 27 , '-49' ) ; +test( macro , '22' , -27 , '49' ) ; +test( macro , '-22' , -27 , '5' ) ; +test( macro , '22' , 29 , '-7' ) ; +test( macro , '-22' , 29 , '-51' ) ; +test( macro , '22' , -29 , '51' ) ; +test( macro , '-22' , -29 , '7' ) ; +test( macro , '22' , 1234 , '-1212' ) ; +test( macro , '-22' , 1234 , '-1256' ) ; +test( macro , '22' , -1234 , '1256' ) ; +test( macro , '-22' , -1234 , '1212' ) ; +test( macro , '22' , 5678 , '-5656' ) ; +test( macro , '-22' , 5678 , '-5700' ) ; +test( macro , '22' , -5678 , '5700' ) ; +test( macro , '-22' , -5678 , '5656' ) ; +test( macro , '22' , 1073741824 , '-1073741802' ) ; +test( macro , '-22' , 1073741824 , '-1073741846' ) ; +test( macro , '22' , -1073741824 , '1073741846' ) ; +test( macro , '-22' , -1073741824 , '1073741802' ) ; +test( macro , '22' , 51676101935731 , '-51676101935709' ) ; +test( macro , '-22' , 51676101935731 , '-51676101935753' ) ; +test( macro , '22' , -51676101935731 , '51676101935753' ) ; +test( macro , '-22' , -51676101935731 , '51676101935709' ) ; +test( macro , '24' , 1 , '23' ) ; +test( macro , '-24' , 1 , '-25' ) ; +test( macro , '24' , -1 , '25' ) ; +test( macro , '-24' , -1 , '-23' ) ; +test( macro , '24' , 3 , '21' ) ; +test( macro , '-24' , 3 , '-27' ) ; +test( macro , '24' , -3 , '27' ) ; +test( macro , '-24' , -3 , '-21' ) ; +test( macro , '24' , 7 , '17' ) ; +test( macro , '-24' , 7 , '-31' ) ; +test( macro , '24' , -7 , '31' ) ; +test( macro , '-24' , -7 , '-17' ) ; +test( macro , '24' , 9 , '15' ) ; +test( macro , '-24' , 9 , '-33' ) ; +test( macro , '24' , -9 , '33' ) ; +test( macro , '-24' , -9 , '-15' ) ; +test( macro , '24' , 11 , '13' ) ; +test( macro , '-24' , 11 , '-35' ) ; +test( macro , '24' , -11 , '35' ) ; +test( macro , '-24' , -11 , '-13' ) ; +test( macro , '24' , 17 , '7' ) ; +test( macro , '-24' , 17 , '-41' ) ; +test( macro , '24' , -17 , '41' ) ; +test( macro , '-24' , -17 , '-7' ) ; +test( macro , '24' , 22 , '2' ) ; +test( macro , '-24' , 22 , '-46' ) ; +test( macro , '24' , -22 , '46' ) ; +test( macro , '-24' , -22 , '-2' ) ; +test( macro , '24' , 24 , '0' ) ; +test( macro , '-24' , 24 , '-48' ) ; +test( macro , '24' , -24 , '48' ) ; +test( macro , '-24' , -24 , '0' ) ; +test( macro , '24' , 27 , '-3' ) ; +test( macro , '-24' , 27 , '-51' ) ; +test( macro , '24' , -27 , '51' ) ; +test( macro , '-24' , -27 , '3' ) ; +test( macro , '24' , 29 , '-5' ) ; +test( macro , '-24' , 29 , '-53' ) ; +test( macro , '24' , -29 , '53' ) ; +test( macro , '-24' , -29 , '5' ) ; +test( macro , '24' , 1234 , '-1210' ) ; +test( macro , '-24' , 1234 , '-1258' ) ; +test( macro , '24' , -1234 , '1258' ) ; +test( macro , '-24' , -1234 , '1210' ) ; +test( macro , '24' , 5678 , '-5654' ) ; +test( macro , '-24' , 5678 , '-5702' ) ; +test( macro , '24' , -5678 , '5702' ) ; +test( macro , '-24' , -5678 , '5654' ) ; +test( macro , '24' , 1073741824 , '-1073741800' ) ; +test( macro , '-24' , 1073741824 , '-1073741848' ) ; +test( macro , '24' , -1073741824 , '1073741848' ) ; +test( macro , '-24' , -1073741824 , '1073741800' ) ; +test( macro , '24' , 51676101935731 , '-51676101935707' ) ; +test( macro , '-24' , 51676101935731 , '-51676101935755' ) ; +test( macro , '24' , -51676101935731 , '51676101935755' ) ; +test( macro , '-24' , -51676101935731 , '51676101935707' ) ; +test( macro , '27' , 1 , '26' ) ; +test( macro , '-27' , 1 , '-28' ) ; +test( macro , '27' , -1 , '28' ) ; +test( macro , '-27' , -1 , '-26' ) ; +test( macro , '27' , 3 , '24' ) ; +test( macro , '-27' , 3 , '-30' ) ; +test( macro , '27' , -3 , '30' ) ; +test( macro , '-27' , -3 , '-24' ) ; +test( macro , '27' , 7 , '20' ) ; +test( macro , '-27' , 7 , '-34' ) ; +test( macro , '27' , -7 , '34' ) ; +test( macro , '-27' , -7 , '-20' ) ; +test( macro , '27' , 9 , '18' ) ; +test( macro , '-27' , 9 , '-36' ) ; +test( macro , '27' , -9 , '36' ) ; +test( macro , '-27' , -9 , '-18' ) ; +test( macro , '27' , 11 , '16' ) ; +test( macro , '-27' , 11 , '-38' ) ; +test( macro , '27' , -11 , '38' ) ; +test( macro , '-27' , -11 , '-16' ) ; +test( macro , '27' , 17 , '10' ) ; +test( macro , '-27' , 17 , '-44' ) ; +test( macro , '27' , -17 , '44' ) ; +test( macro , '-27' , -17 , '-10' ) ; +test( macro , '27' , 22 , '5' ) ; +test( macro , '-27' , 22 , '-49' ) ; +test( macro , '27' , -22 , '49' ) ; +test( macro , '-27' , -22 , '-5' ) ; +test( macro , '27' , 24 , '3' ) ; +test( macro , '-27' , 24 , '-51' ) ; +test( macro , '27' , -24 , '51' ) ; +test( macro , '-27' , -24 , '-3' ) ; +test( macro , '27' , 27 , '0' ) ; +test( macro , '-27' , 27 , '-54' ) ; +test( macro , '27' , -27 , '54' ) ; +test( macro , '-27' , -27 , '0' ) ; +test( macro , '27' , 29 , '-2' ) ; +test( macro , '-27' , 29 , '-56' ) ; +test( macro , '27' , -29 , '56' ) ; +test( macro , '-27' , -29 , '2' ) ; +test( macro , '27' , 1234 , '-1207' ) ; +test( macro , '-27' , 1234 , '-1261' ) ; +test( macro , '27' , -1234 , '1261' ) ; +test( macro , '-27' , -1234 , '1207' ) ; +test( macro , '27' , 5678 , '-5651' ) ; +test( macro , '-27' , 5678 , '-5705' ) ; +test( macro , '27' , -5678 , '5705' ) ; +test( macro , '-27' , -5678 , '5651' ) ; +test( macro , '27' , 1073741824 , '-1073741797' ) ; +test( macro , '-27' , 1073741824 , '-1073741851' ) ; +test( macro , '27' , -1073741824 , '1073741851' ) ; +test( macro , '-27' , -1073741824 , '1073741797' ) ; +test( macro , '27' , 51676101935731 , '-51676101935704' ) ; +test( macro , '-27' , 51676101935731 , '-51676101935758' ) ; +test( macro , '27' , -51676101935731 , '51676101935758' ) ; +test( macro , '-27' , -51676101935731 , '51676101935704' ) ; +test( macro , '29' , 1 , '28' ) ; +test( macro , '-29' , 1 , '-30' ) ; +test( macro , '29' , -1 , '30' ) ; +test( macro , '-29' , -1 , '-28' ) ; +test( macro , '29' , 3 , '26' ) ; +test( macro , '-29' , 3 , '-32' ) ; +test( macro , '29' , -3 , '32' ) ; +test( macro , '-29' , -3 , '-26' ) ; +test( macro , '29' , 7 , '22' ) ; +test( macro , '-29' , 7 , '-36' ) ; +test( macro , '29' , -7 , '36' ) ; +test( macro , '-29' , -7 , '-22' ) ; +test( macro , '29' , 9 , '20' ) ; +test( macro , '-29' , 9 , '-38' ) ; +test( macro , '29' , -9 , '38' ) ; +test( macro , '-29' , -9 , '-20' ) ; +test( macro , '29' , 11 , '18' ) ; +test( macro , '-29' , 11 , '-40' ) ; +test( macro , '29' , -11 , '40' ) ; +test( macro , '-29' , -11 , '-18' ) ; +test( macro , '29' , 17 , '12' ) ; +test( macro , '-29' , 17 , '-46' ) ; +test( macro , '29' , -17 , '46' ) ; +test( macro , '-29' , -17 , '-12' ) ; +test( macro , '29' , 22 , '7' ) ; +test( macro , '-29' , 22 , '-51' ) ; +test( macro , '29' , -22 , '51' ) ; +test( macro , '-29' , -22 , '-7' ) ; +test( macro , '29' , 24 , '5' ) ; +test( macro , '-29' , 24 , '-53' ) ; +test( macro , '29' , -24 , '53' ) ; +test( macro , '-29' , -24 , '-5' ) ; +test( macro , '29' , 27 , '2' ) ; +test( macro , '-29' , 27 , '-56' ) ; +test( macro , '29' , -27 , '56' ) ; +test( macro , '-29' , -27 , '-2' ) ; +test( macro , '29' , 29 , '0' ) ; +test( macro , '-29' , 29 , '-58' ) ; +test( macro , '29' , -29 , '58' ) ; +test( macro , '-29' , -29 , '0' ) ; +test( macro , '29' , 1234 , '-1205' ) ; +test( macro , '-29' , 1234 , '-1263' ) ; +test( macro , '29' , -1234 , '1263' ) ; +test( macro , '-29' , -1234 , '1205' ) ; +test( macro , '29' , 5678 , '-5649' ) ; +test( macro , '-29' , 5678 , '-5707' ) ; +test( macro , '29' , -5678 , '5707' ) ; +test( macro , '-29' , -5678 , '5649' ) ; +test( macro , '29' , 1073741824 , '-1073741795' ) ; +test( macro , '-29' , 1073741824 , '-1073741853' ) ; +test( macro , '29' , -1073741824 , '1073741853' ) ; +test( macro , '-29' , -1073741824 , '1073741795' ) ; +test( macro , '29' , 51676101935731 , '-51676101935702' ) ; +test( macro , '-29' , 51676101935731 , '-51676101935760' ) ; +test( macro , '29' , -51676101935731 , '51676101935760' ) ; +test( macro , '-29' , -51676101935731 , '51676101935702' ) ; +test( macro , '1234' , 1 , '1233' ) ; +test( macro , '-1234' , 1 , '-1235' ) ; +test( macro , '1234' , -1 , '1235' ) ; +test( macro , '-1234' , -1 , '-1233' ) ; +test( macro , '1234' , 3 , '1231' ) ; +test( macro , '-1234' , 3 , '-1237' ) ; +test( macro , '1234' , -3 , '1237' ) ; +test( macro , '-1234' , -3 , '-1231' ) ; +test( macro , '1234' , 7 , '1227' ) ; +test( macro , '-1234' , 7 , '-1241' ) ; +test( macro , '1234' , -7 , '1241' ) ; +test( macro , '-1234' , -7 , '-1227' ) ; +test( macro , '1234' , 9 , '1225' ) ; +test( macro , '-1234' , 9 , '-1243' ) ; +test( macro , '1234' , -9 , '1243' ) ; +test( macro , '-1234' , -9 , '-1225' ) ; +test( macro , '1234' , 11 , '1223' ) ; +test( macro , '-1234' , 11 , '-1245' ) ; +test( macro , '1234' , -11 , '1245' ) ; +test( macro , '-1234' , -11 , '-1223' ) ; +test( macro , '1234' , 17 , '1217' ) ; +test( macro , '-1234' , 17 , '-1251' ) ; +test( macro , '1234' , -17 , '1251' ) ; +test( macro , '-1234' , -17 , '-1217' ) ; +test( macro , '1234' , 22 , '1212' ) ; +test( macro , '-1234' , 22 , '-1256' ) ; +test( macro , '1234' , -22 , '1256' ) ; +test( macro , '-1234' , -22 , '-1212' ) ; +test( macro , '1234' , 24 , '1210' ) ; +test( macro , '-1234' , 24 , '-1258' ) ; +test( macro , '1234' , -24 , '1258' ) ; +test( macro , '-1234' , -24 , '-1210' ) ; +test( macro , '1234' , 27 , '1207' ) ; +test( macro , '-1234' , 27 , '-1261' ) ; +test( macro , '1234' , -27 , '1261' ) ; +test( macro , '-1234' , -27 , '-1207' ) ; +test( macro , '1234' , 29 , '1205' ) ; +test( macro , '-1234' , 29 , '-1263' ) ; +test( macro , '1234' , -29 , '1263' ) ; +test( macro , '-1234' , -29 , '-1205' ) ; +test( macro , '1234' , 1234 , '0' ) ; +test( macro , '-1234' , 1234 , '-2468' ) ; +test( macro , '1234' , -1234 , '2468' ) ; +test( macro , '-1234' , -1234 , '0' ) ; +test( macro , '1234' , 5678 , '-4444' ) ; +test( macro , '-1234' , 5678 , '-6912' ) ; +test( macro , '1234' , -5678 , '6912' ) ; +test( macro , '-1234' , -5678 , '4444' ) ; +test( macro , '1234' , 1073741824 , '-1073740590' ) ; +test( macro , '-1234' , 1073741824 , '-1073743058' ) ; +test( macro , '1234' , -1073741824 , '1073743058' ) ; +test( macro , '-1234' , -1073741824 , '1073740590' ) ; +test( macro , '1234' , 51676101935731 , '-51676101934497' ) ; +test( macro , '-1234' , 51676101935731 , '-51676101936965' ) ; +test( macro , '1234' , -51676101935731 , '51676101936965' ) ; +test( macro , '-1234' , -51676101935731 , '51676101934497' ) ; +test( macro , '5678' , 1 , '5677' ) ; +test( macro , '-5678' , 1 , '-5679' ) ; +test( macro , '5678' , -1 , '5679' ) ; +test( macro , '-5678' , -1 , '-5677' ) ; +test( macro , '5678' , 3 , '5675' ) ; +test( macro , '-5678' , 3 , '-5681' ) ; +test( macro , '5678' , -3 , '5681' ) ; +test( macro , '-5678' , -3 , '-5675' ) ; +test( macro , '5678' , 7 , '5671' ) ; +test( macro , '-5678' , 7 , '-5685' ) ; +test( macro , '5678' , -7 , '5685' ) ; +test( macro , '-5678' , -7 , '-5671' ) ; +test( macro , '5678' , 9 , '5669' ) ; +test( macro , '-5678' , 9 , '-5687' ) ; +test( macro , '5678' , -9 , '5687' ) ; +test( macro , '-5678' , -9 , '-5669' ) ; +test( macro , '5678' , 11 , '5667' ) ; +test( macro , '-5678' , 11 , '-5689' ) ; +test( macro , '5678' , -11 , '5689' ) ; +test( macro , '-5678' , -11 , '-5667' ) ; +test( macro , '5678' , 17 , '5661' ) ; +test( macro , '-5678' , 17 , '-5695' ) ; +test( macro , '5678' , -17 , '5695' ) ; +test( macro , '-5678' , -17 , '-5661' ) ; +test( macro , '5678' , 22 , '5656' ) ; +test( macro , '-5678' , 22 , '-5700' ) ; +test( macro , '5678' , -22 , '5700' ) ; +test( macro , '-5678' , -22 , '-5656' ) ; +test( macro , '5678' , 24 , '5654' ) ; +test( macro , '-5678' , 24 , '-5702' ) ; +test( macro , '5678' , -24 , '5702' ) ; +test( macro , '-5678' , -24 , '-5654' ) ; +test( macro , '5678' , 27 , '5651' ) ; +test( macro , '-5678' , 27 , '-5705' ) ; +test( macro , '5678' , -27 , '5705' ) ; +test( macro , '-5678' , -27 , '-5651' ) ; +test( macro , '5678' , 29 , '5649' ) ; +test( macro , '-5678' , 29 , '-5707' ) ; +test( macro , '5678' , -29 , '5707' ) ; +test( macro , '-5678' , -29 , '-5649' ) ; +test( macro , '5678' , 1234 , '4444' ) ; +test( macro , '-5678' , 1234 , '-6912' ) ; +test( macro , '5678' , -1234 , '6912' ) ; +test( macro , '-5678' , -1234 , '-4444' ) ; +test( macro , '5678' , 5678 , '0' ) ; +test( macro , '-5678' , 5678 , '-11356' ) ; +test( macro , '5678' , -5678 , '11356' ) ; +test( macro , '-5678' , -5678 , '0' ) ; +test( macro , '5678' , 1073741824 , '-1073736146' ) ; +test( macro , '-5678' , 1073741824 , '-1073747502' ) ; +test( macro , '5678' , -1073741824 , '1073747502' ) ; +test( macro , '-5678' , -1073741824 , '1073736146' ) ; +test( macro , '5678' , 51676101935731 , '-51676101930053' ) ; +test( macro , '-5678' , 51676101935731 , '-51676101941409' ) ; +test( macro , '5678' , -51676101935731 , '51676101941409' ) ; +test( macro , '-5678' , -51676101935731 , '51676101930053' ) ; +test( macro , '1073741824' , 1 , '1073741823' ) ; +test( macro , '-1073741824' , 1 , '-1073741825' ) ; +test( macro , '1073741824' , -1 , '1073741825' ) ; +test( macro , '-1073741824' , -1 , '-1073741823' ) ; +test( macro , '1073741824' , 3 , '1073741821' ) ; +test( macro , '-1073741824' , 3 , '-1073741827' ) ; +test( macro , '1073741824' , -3 , '1073741827' ) ; +test( macro , '-1073741824' , -3 , '-1073741821' ) ; +test( macro , '1073741824' , 7 , '1073741817' ) ; +test( macro , '-1073741824' , 7 , '-1073741831' ) ; +test( macro , '1073741824' , -7 , '1073741831' ) ; +test( macro , '-1073741824' , -7 , '-1073741817' ) ; +test( macro , '1073741824' , 9 , '1073741815' ) ; +test( macro , '-1073741824' , 9 , '-1073741833' ) ; +test( macro , '1073741824' , -9 , '1073741833' ) ; +test( macro , '-1073741824' , -9 , '-1073741815' ) ; +test( macro , '1073741824' , 11 , '1073741813' ) ; +test( macro , '-1073741824' , 11 , '-1073741835' ) ; +test( macro , '1073741824' , -11 , '1073741835' ) ; +test( macro , '-1073741824' , -11 , '-1073741813' ) ; +test( macro , '1073741824' , 17 , '1073741807' ) ; +test( macro , '-1073741824' , 17 , '-1073741841' ) ; +test( macro , '1073741824' , -17 , '1073741841' ) ; +test( macro , '-1073741824' , -17 , '-1073741807' ) ; +test( macro , '1073741824' , 22 , '1073741802' ) ; +test( macro , '-1073741824' , 22 , '-1073741846' ) ; +test( macro , '1073741824' , -22 , '1073741846' ) ; +test( macro , '-1073741824' , -22 , '-1073741802' ) ; +test( macro , '1073741824' , 24 , '1073741800' ) ; +test( macro , '-1073741824' , 24 , '-1073741848' ) ; +test( macro , '1073741824' , -24 , '1073741848' ) ; +test( macro , '-1073741824' , -24 , '-1073741800' ) ; +test( macro , '1073741824' , 27 , '1073741797' ) ; +test( macro , '-1073741824' , 27 , '-1073741851' ) ; +test( macro , '1073741824' , -27 , '1073741851' ) ; +test( macro , '-1073741824' , -27 , '-1073741797' ) ; +test( macro , '1073741824' , 29 , '1073741795' ) ; +test( macro , '-1073741824' , 29 , '-1073741853' ) ; +test( macro , '1073741824' , -29 , '1073741853' ) ; +test( macro , '-1073741824' , -29 , '-1073741795' ) ; +test( macro , '1073741824' , 1234 , '1073740590' ) ; +test( macro , '-1073741824' , 1234 , '-1073743058' ) ; +test( macro , '1073741824' , -1234 , '1073743058' ) ; +test( macro , '-1073741824' , -1234 , '-1073740590' ) ; +test( macro , '1073741824' , 5678 , '1073736146' ) ; +test( macro , '-1073741824' , 5678 , '-1073747502' ) ; +test( macro , '1073741824' , -5678 , '1073747502' ) ; +test( macro , '-1073741824' , -5678 , '-1073736146' ) ; +test( macro , '1073741824' , 1073741824 , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '-2147483648' ) ; +test( macro , '1073741824' , -1073741824 , '2147483648' ) ; +test( macro , '-1073741824' , -1073741824 , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '-51675028193907' ) ; +test( macro , '-1073741824' , 51676101935731 , '-51677175677555' ) ; +test( macro , '1073741824' , -51676101935731 , '51677175677555' ) ; +test( macro , '-1073741824' , -51676101935731 , '51675028193907' ) ; +test( macro , '51676101935731' , 1 , '51676101935730' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935732' ) ; +test( macro , '51676101935731' , -1 , '51676101935732' ) ; +test( macro , '-51676101935731' , -1 , '-51676101935730' ) ; +test( macro , '51676101935731' , 3 , '51676101935728' ) ; +test( macro , '-51676101935731' , 3 , '-51676101935734' ) ; +test( macro , '51676101935731' , -3 , '51676101935734' ) ; +test( macro , '-51676101935731' , -3 , '-51676101935728' ) ; +test( macro , '51676101935731' , 7 , '51676101935724' ) ; +test( macro , '-51676101935731' , 7 , '-51676101935738' ) ; +test( macro , '51676101935731' , -7 , '51676101935738' ) ; +test( macro , '-51676101935731' , -7 , '-51676101935724' ) ; +test( macro , '51676101935731' , 9 , '51676101935722' ) ; +test( macro , '-51676101935731' , 9 , '-51676101935740' ) ; +test( macro , '51676101935731' , -9 , '51676101935740' ) ; +test( macro , '-51676101935731' , -9 , '-51676101935722' ) ; +test( macro , '51676101935731' , 11 , '51676101935720' ) ; +test( macro , '-51676101935731' , 11 , '-51676101935742' ) ; +test( macro , '51676101935731' , -11 , '51676101935742' ) ; +test( macro , '-51676101935731' , -11 , '-51676101935720' ) ; +test( macro , '51676101935731' , 17 , '51676101935714' ) ; +test( macro , '-51676101935731' , 17 , '-51676101935748' ) ; +test( macro , '51676101935731' , -17 , '51676101935748' ) ; +test( macro , '-51676101935731' , -17 , '-51676101935714' ) ; +test( macro , '51676101935731' , 22 , '51676101935709' ) ; +test( macro , '-51676101935731' , 22 , '-51676101935753' ) ; +test( macro , '51676101935731' , -22 , '51676101935753' ) ; +test( macro , '-51676101935731' , -22 , '-51676101935709' ) ; +test( macro , '51676101935731' , 24 , '51676101935707' ) ; +test( macro , '-51676101935731' , 24 , '-51676101935755' ) ; +test( macro , '51676101935731' , -24 , '51676101935755' ) ; +test( macro , '-51676101935731' , -24 , '-51676101935707' ) ; +test( macro , '51676101935731' , 27 , '51676101935704' ) ; +test( macro , '-51676101935731' , 27 , '-51676101935758' ) ; +test( macro , '51676101935731' , -27 , '51676101935758' ) ; +test( macro , '-51676101935731' , -27 , '-51676101935704' ) ; +test( macro , '51676101935731' , 29 , '51676101935702' ) ; +test( macro , '-51676101935731' , 29 , '-51676101935760' ) ; +test( macro , '51676101935731' , -29 , '51676101935760' ) ; +test( macro , '-51676101935731' , -29 , '-51676101935702' ) ; +test( macro , '51676101935731' , 1234 , '51676101934497' ) ; +test( macro , '-51676101935731' , 1234 , '-51676101936965' ) ; +test( macro , '51676101935731' , -1234 , '51676101936965' ) ; +test( macro , '-51676101935731' , -1234 , '-51676101934497' ) ; +test( macro , '51676101935731' , 5678 , '51676101930053' ) ; +test( macro , '-51676101935731' , 5678 , '-51676101941409' ) ; +test( macro , '51676101935731' , -5678 , '51676101941409' ) ; +test( macro , '-51676101935731' , -5678 , '-51676101930053' ) ; +test( macro , '51676101935731' , 1073741824 , '51675028193907' ) ; +test( macro , '-51676101935731' , 1073741824 , '-51677175677555' ) ; +test( macro , '51676101935731' , -1073741824 , '51677175677555' ) ; +test( macro , '-51676101935731' , -1073741824 , '-51675028193907' ) ; +test( macro , '51676101935731' , 51676101935731 , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-103352203871462' ) ; +test( macro , '51676101935731' , -51676101935731 , '103352203871462' ) ; +test( macro , '-51676101935731' , -51676101935731 , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770248' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770250' ) ; +test( macro , '717897987691852588770249' , -1 , '717897987691852588770250' ) ; +test( macro , '-717897987691852588770249' , -1 , '-717897987691852588770248' ) ; +test( macro , '717897987691852588770249' , 3 , '717897987691852588770246' ) ; +test( macro , '-717897987691852588770249' , 3 , '-717897987691852588770252' ) ; +test( macro , '717897987691852588770249' , -3 , '717897987691852588770252' ) ; +test( macro , '-717897987691852588770249' , -3 , '-717897987691852588770246' ) ; +test( macro , '717897987691852588770249' , 7 , '717897987691852588770242' ) ; +test( macro , '-717897987691852588770249' , 7 , '-717897987691852588770256' ) ; +test( macro , '717897987691852588770249' , -7 , '717897987691852588770256' ) ; +test( macro , '-717897987691852588770249' , -7 , '-717897987691852588770242' ) ; +test( macro , '717897987691852588770249' , 9 , '717897987691852588770240' ) ; +test( macro , '-717897987691852588770249' , 9 , '-717897987691852588770258' ) ; +test( macro , '717897987691852588770249' , -9 , '717897987691852588770258' ) ; +test( macro , '-717897987691852588770249' , -9 , '-717897987691852588770240' ) ; +test( macro , '717897987691852588770249' , 11 , '717897987691852588770238' ) ; +test( macro , '-717897987691852588770249' , 11 , '-717897987691852588770260' ) ; +test( macro , '717897987691852588770249' , -11 , '717897987691852588770260' ) ; +test( macro , '-717897987691852588770249' , -11 , '-717897987691852588770238' ) ; +test( macro , '717897987691852588770249' , 17 , '717897987691852588770232' ) ; +test( macro , '-717897987691852588770249' , 17 , '-717897987691852588770266' ) ; +test( macro , '717897987691852588770249' , -17 , '717897987691852588770266' ) ; +test( macro , '-717897987691852588770249' , -17 , '-717897987691852588770232' ) ; +test( macro , '717897987691852588770249' , 22 , '717897987691852588770227' ) ; +test( macro , '-717897987691852588770249' , 22 , '-717897987691852588770271' ) ; +test( macro , '717897987691852588770249' , -22 , '717897987691852588770271' ) ; +test( macro , '-717897987691852588770249' , -22 , '-717897987691852588770227' ) ; +test( macro , '717897987691852588770249' , 24 , '717897987691852588770225' ) ; +test( macro , '-717897987691852588770249' , 24 , '-717897987691852588770273' ) ; +test( macro , '717897987691852588770249' , -24 , '717897987691852588770273' ) ; +test( macro , '-717897987691852588770249' , -24 , '-717897987691852588770225' ) ; +test( macro , '717897987691852588770249' , 27 , '717897987691852588770222' ) ; +test( macro , '-717897987691852588770249' , 27 , '-717897987691852588770276' ) ; +test( macro , '717897987691852588770249' , -27 , '717897987691852588770276' ) ; +test( macro , '-717897987691852588770249' , -27 , '-717897987691852588770222' ) ; +test( macro , '717897987691852588770249' , 29 , '717897987691852588770220' ) ; +test( macro , '-717897987691852588770249' , 29 , '-717897987691852588770278' ) ; +test( macro , '717897987691852588770249' , -29 , '717897987691852588770278' ) ; +test( macro , '-717897987691852588770249' , -29 , '-717897987691852588770220' ) ; +test( macro , '717897987691852588770249' , 1234 , '717897987691852588769015' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-717897987691852588771483' ) ; +test( macro , '717897987691852588770249' , -1234 , '717897987691852588771483' ) ; +test( macro , '-717897987691852588770249' , -1234 , '-717897987691852588769015' ) ; +test( macro , '717897987691852588770249' , 5678 , '717897987691852588764571' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-717897987691852588775927' ) ; +test( macro , '717897987691852588770249' , -5678 , '717897987691852588775927' ) ; +test( macro , '-717897987691852588770249' , -5678 , '-717897987691852588764571' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '717897987691851515028425' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-717897987691853662512073' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '717897987691853662512073' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '-717897987691851515028425' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '717897987640176486834518' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-717897987743528690705980' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '717897987743528690705980' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '-717897987640176486834518' ) ; diff --git a/test/src/integer/arithmetic/examples.js b/test/src/integer/examples.js similarity index 87% rename from test/src/integer/arithmetic/examples.js rename to test/src/integer/examples.js index bc813c0..ef7dcba 100644 --- a/test/src/integer/arithmetic/examples.js +++ b/test/src/integer/examples.js @@ -1,5 +1,5 @@ import test from 'ava' ; -import { parse , stringify , add } from '../../../../src' ; +import { parse , stringify , add } from '../../../src' ; function macro ( t , A , x , B , y , C , z ) { const a = parse( A , x ) ;