diff --git a/package.json b/package.json index 13cd5dd..57c824c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@aureooms/js-integer", "description": "Integers for JavaScript", - "version": "5.1.2", + "version": "6.0.0", "author": "Aurélien Ooms ", "ava": { "require": [ diff --git a/src/Integer.js b/src/Integer.js index befedea..9955c58 100644 --- a/src/Integer.js +++ b/src/Integer.js @@ -333,7 +333,16 @@ export class Integer { idivmod ( other ) { // TODO optimize but be careful with side effects const [ q , r ] = this.divmod(other) ; - return [ q.move(this) , r ] ; + return [ q , r.move(this) ] ; + } + + divmodn ( number ) { + return this.divmod(_from_number(number)) ; + } + + idivmodn ( number ) { + const [ q , r ] = this.divmodn(number) ; + return [ q , r.move(this) ] ; } opposite ( ) { diff --git a/src/integer.js b/src/integer.js index 3139000..f61c7c5 100644 --- a/src/integer.js +++ b/src/integer.js @@ -68,6 +68,14 @@ export function imod ( first , second ) { return first.imod(second) ; } +export function divmod ( first , second ) { + return first.divmod(second) ; +} + +export function idivmod ( first , second ) { + return first.idivmod(second) ; +} + export function addn ( first , second ) { return first.addn(second) ; } @@ -115,3 +123,11 @@ export function modn ( first , second ) { export function imodn ( first , second ) { return first.imodn(second) ; } + +export function divmodn ( first , second ) { + return first.divmodn(second) ; +} + +export function idivmodn ( first , second ) { + return first.idivmodn(second) ; +} diff --git a/test/generate.py b/test/generate.py index 6936ce5..5dec7a7 100644 --- a/test/generate.py +++ b/test/generate.py @@ -1,5 +1,3 @@ -import operator - MAX_NUMBER = 2**53 - 1 MIN_NUMBER = -2**53 @@ -14,53 +12,86 @@ arithmetic = { 'add' : { 'numbers' : smallnumbers + hugenumbers , - 'apply' : operator.add , + 'apply' : lambda a,b: (a+b,) , 'str' : '+' } , 'sub' : { 'numbers' : smallnumbers + hugenumbers , - 'apply' : operator.sub , + 'apply' : lambda a,b: (a-b,) , 'str' : '-' } , 'mul' : { 'numbers' : smallnumbers + hugenumbers , - 'apply' : operator.mul , + 'apply' : lambda a,b: (a*b,) , 'str' : '*' } , 'pow' : { 'numbers' : smallnumbers , - 'apply' : operator.pow , + 'apply' : lambda a,b: (a**b,) , 'str' : '^' } , 'div' : { 'numbers' : smallnumbers + hugenumbers , - 'apply' : operator.floordiv , + 'apply' : lambda a,b: (a//b,) , 'str' : '/' } , 'mod' : { 'numbers' : smallnumbers + hugenumbers , - 'apply' : operator.mod , + 'apply' : lambda a,b: (a%b,) , 'str' : '%' - } + } , + 'divmod' : { + 'numbers' : smallnumbers + hugenumbers , + 'apply' : lambda a, b: (a // b, a % b) , + 'str' : '/%' + } , } def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) : + outputsize = 2 if 'divmod' in name else 1 + f.write("import test from 'ava' ;\n") f.write("import {{ parse , stringify , {} }} from '../../../../src' ;\n\n".format(name)) - if isn : + if outputsize == 2 : + + if isn : + + f.write("""function macro ( t , A , B , C , D ) {{ + const a = parse( A ) ; + const [c, d] = {}( a , B ) ; + t.is( stringify( a ) , {} ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +}}\n\n""".format( name , 'D' if isi else 'A' ) ) + + else: + + f.write("""function macro ( t , A , B , C , D ) {{ + const a = parse( A ) ; + const b = parse( B ) ; + const [c, d] = {}( a , b ) ; + t.is( stringify( a ) , {} ) ; + t.is( stringify( b ) , B ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +}}\n\n""".format( name , 'D' if isi else 'A' ) ) + + else : - f.write("""function macro ( t , A , B , C ) {{ + 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 , 'C' if isi else 'A' ) ) - else: + else: - f.write("""function macro ( t , A , B , C ) {{ + f.write("""function macro ( t , A , B , C ) {{ const a = parse( A ) ; const b = parse( B ) ; const c = {}( a , b ) ; @@ -70,12 +101,23 @@ def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) }}\n\n""".format( name , 'C' if isi else 'A' ) ) - f.write("macro.title = ( _ , A , B , C ) => `{}(${{A}},${{B}}) = ${{C}}` ;\n\n".format(name)) + if outputsize == 2 : + + f.write("macro.title = ( _ , A , B , C , D ) => `{}(${{A}},${{B}}) = [${{C}},${{D}}]` ;\n\n".format(name)) + + if isn: + LINE = "test( macro , '{}' , {} , '{}' , '{}' ) ;\n" + else: + LINE = "test( macro , '{}' , '{}' , '{}' , '{}' ) ;\n" - if isn: - LINE = "test( macro , '{}' , {} , '{}' ) ;\n" else: - LINE = "test( macro , '{}' , '{}' , '{}' ) ;\n" + + f.write("macro.title = ( _ , A , B , C ) => `{}(${{A}},${{B}}) = ${{C}}` ;\n\n".format(name)) + + if isn: + LINE = "test( macro , '{}' , {} , '{}' ) ;\n" + else: + LINE = "test( macro , '{}' , '{}' , '{}' ) ;\n" for a in numbers : @@ -85,13 +127,13 @@ def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) y = b c = t( x , y ) if not isn or MIN_NUMBER <= y <= MAX_NUMBER: - f.write(LINE.format(x,y,c)) + f.write(LINE.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)) + f.write(LINE.format(x,y,*c)) if not ispow: @@ -99,13 +141,13 @@ def write ( f , numbers , name , t , ispow = False , isn = False , isi = False) y = -b c = t( x , y ) if not isn or MIN_NUMBER <= y <= MAX_NUMBER: - f.write(LINE.format(x,y,c)) + f.write(LINE.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)) + 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 : diff --git a/test/src/Integer/divmod.js b/test/src/Integer/divmod.js index b975ec6..ed757d9 100644 --- a/test/src/Integer/divmod.js +++ b/test/src/Integer/divmod.js @@ -9,7 +9,7 @@ function macro ( t , a , b , q , r ) { t.is(q.toString(), Q.toString()) ; t.is(r.toString(), R.toString()) ; - t.is(q.toString(), A.toString()) ; + t.is(r.toString(), A.toString()) ; } macro.title = ( providedTitle , a , b , q , r ) => `${a} idivmod ${b} = [${q}, ${r}]` ; diff --git a/test/src/integer/arithmetic/divmod.js b/test/src/integer/arithmetic/divmod.js new file mode 100644 index 0000000..2e2f0fc --- /dev/null +++ b/test/src/integer/arithmetic/divmod.js @@ -0,0 +1,915 @@ +import test from 'ava' ; +import { parse , stringify , divmod } from '../../../../src' ; + +function macro ( t , A , B , C , D ) { + const a = parse( A ) ; + const b = parse( B ) ; + const [c, d] = divmod( a , b ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( b ) , B ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +} + +macro.title = ( _ , A , B , C , D ) => `divmod(${A},${B}) = [${C},${D}]` ; + +test( macro , '1' , '1' , '1' , '0' ) ; +test( macro , '-1' , '1' , '-1' , '0' ) ; +test( macro , '1' , '-1' , '-1' , '0' ) ; +test( macro , '-1' , '-1' , '1' , '0' ) ; +test( macro , '1' , '3' , '0' , '1' ) ; +test( macro , '-1' , '3' , '-1' , '2' ) ; +test( macro , '1' , '-3' , '-1' , '-2' ) ; +test( macro , '-1' , '-3' , '0' , '-1' ) ; +test( macro , '1' , '7' , '0' , '1' ) ; +test( macro , '-1' , '7' , '-1' , '6' ) ; +test( macro , '1' , '-7' , '-1' , '-6' ) ; +test( macro , '-1' , '-7' , '0' , '-1' ) ; +test( macro , '1' , '9' , '0' , '1' ) ; +test( macro , '-1' , '9' , '-1' , '8' ) ; +test( macro , '1' , '-9' , '-1' , '-8' ) ; +test( macro , '-1' , '-9' , '0' , '-1' ) ; +test( macro , '1' , '11' , '0' , '1' ) ; +test( macro , '-1' , '11' , '-1' , '10' ) ; +test( macro , '1' , '-11' , '-1' , '-10' ) ; +test( macro , '-1' , '-11' , '0' , '-1' ) ; +test( macro , '1' , '17' , '0' , '1' ) ; +test( macro , '-1' , '17' , '-1' , '16' ) ; +test( macro , '1' , '-17' , '-1' , '-16' ) ; +test( macro , '-1' , '-17' , '0' , '-1' ) ; +test( macro , '1' , '22' , '0' , '1' ) ; +test( macro , '-1' , '22' , '-1' , '21' ) ; +test( macro , '1' , '-22' , '-1' , '-21' ) ; +test( macro , '-1' , '-22' , '0' , '-1' ) ; +test( macro , '1' , '24' , '0' , '1' ) ; +test( macro , '-1' , '24' , '-1' , '23' ) ; +test( macro , '1' , '-24' , '-1' , '-23' ) ; +test( macro , '-1' , '-24' , '0' , '-1' ) ; +test( macro , '1' , '27' , '0' , '1' ) ; +test( macro , '-1' , '27' , '-1' , '26' ) ; +test( macro , '1' , '-27' , '-1' , '-26' ) ; +test( macro , '-1' , '-27' , '0' , '-1' ) ; +test( macro , '1' , '29' , '0' , '1' ) ; +test( macro , '-1' , '29' , '-1' , '28' ) ; +test( macro , '1' , '-29' , '-1' , '-28' ) ; +test( macro , '-1' , '-29' , '0' , '-1' ) ; +test( macro , '1' , '1234' , '0' , '1' ) ; +test( macro , '-1' , '1234' , '-1' , '1233' ) ; +test( macro , '1' , '-1234' , '-1' , '-1233' ) ; +test( macro , '-1' , '-1234' , '0' , '-1' ) ; +test( macro , '1' , '5678' , '0' , '1' ) ; +test( macro , '-1' , '5678' , '-1' , '5677' ) ; +test( macro , '1' , '-5678' , '-1' , '-5677' ) ; +test( macro , '-1' , '-5678' , '0' , '-1' ) ; +test( macro , '1' , '1073741824' , '0' , '1' ) ; +test( macro , '-1' , '1073741824' , '-1' , '1073741823' ) ; +test( macro , '1' , '-1073741824' , '-1' , '-1073741823' ) ; +test( macro , '-1' , '-1073741824' , '0' , '-1' ) ; +test( macro , '1' , '51676101935731' , '0' , '1' ) ; +test( macro , '-1' , '51676101935731' , '-1' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-1' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '0' , '-1' ) ; +test( macro , '1' , '717897987691852588770249' , '0' , '1' ) ; +test( macro , '-1' , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; +test( macro , '1' , '-717897987691852588770249' , '-1' , '-717897987691852588770248' ) ; +test( macro , '-1' , '-717897987691852588770249' , '0' , '-1' ) ; +test( macro , '3' , '1' , '3' , '0' ) ; +test( macro , '-3' , '1' , '-3' , '0' ) ; +test( macro , '3' , '-1' , '-3' , '0' ) ; +test( macro , '-3' , '-1' , '3' , '0' ) ; +test( macro , '3' , '3' , '1' , '0' ) ; +test( macro , '-3' , '3' , '-1' , '0' ) ; +test( macro , '3' , '-3' , '-1' , '0' ) ; +test( macro , '-3' , '-3' , '1' , '0' ) ; +test( macro , '3' , '7' , '0' , '3' ) ; +test( macro , '-3' , '7' , '-1' , '4' ) ; +test( macro , '3' , '-7' , '-1' , '-4' ) ; +test( macro , '-3' , '-7' , '0' , '-3' ) ; +test( macro , '3' , '9' , '0' , '3' ) ; +test( macro , '-3' , '9' , '-1' , '6' ) ; +test( macro , '3' , '-9' , '-1' , '-6' ) ; +test( macro , '-3' , '-9' , '0' , '-3' ) ; +test( macro , '3' , '11' , '0' , '3' ) ; +test( macro , '-3' , '11' , '-1' , '8' ) ; +test( macro , '3' , '-11' , '-1' , '-8' ) ; +test( macro , '-3' , '-11' , '0' , '-3' ) ; +test( macro , '3' , '17' , '0' , '3' ) ; +test( macro , '-3' , '17' , '-1' , '14' ) ; +test( macro , '3' , '-17' , '-1' , '-14' ) ; +test( macro , '-3' , '-17' , '0' , '-3' ) ; +test( macro , '3' , '22' , '0' , '3' ) ; +test( macro , '-3' , '22' , '-1' , '19' ) ; +test( macro , '3' , '-22' , '-1' , '-19' ) ; +test( macro , '-3' , '-22' , '0' , '-3' ) ; +test( macro , '3' , '24' , '0' , '3' ) ; +test( macro , '-3' , '24' , '-1' , '21' ) ; +test( macro , '3' , '-24' , '-1' , '-21' ) ; +test( macro , '-3' , '-24' , '0' , '-3' ) ; +test( macro , '3' , '27' , '0' , '3' ) ; +test( macro , '-3' , '27' , '-1' , '24' ) ; +test( macro , '3' , '-27' , '-1' , '-24' ) ; +test( macro , '-3' , '-27' , '0' , '-3' ) ; +test( macro , '3' , '29' , '0' , '3' ) ; +test( macro , '-3' , '29' , '-1' , '26' ) ; +test( macro , '3' , '-29' , '-1' , '-26' ) ; +test( macro , '-3' , '-29' , '0' , '-3' ) ; +test( macro , '3' , '1234' , '0' , '3' ) ; +test( macro , '-3' , '1234' , '-1' , '1231' ) ; +test( macro , '3' , '-1234' , '-1' , '-1231' ) ; +test( macro , '-3' , '-1234' , '0' , '-3' ) ; +test( macro , '3' , '5678' , '0' , '3' ) ; +test( macro , '-3' , '5678' , '-1' , '5675' ) ; +test( macro , '3' , '-5678' , '-1' , '-5675' ) ; +test( macro , '-3' , '-5678' , '0' , '-3' ) ; +test( macro , '3' , '1073741824' , '0' , '3' ) ; +test( macro , '-3' , '1073741824' , '-1' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '0' , '-3' ) ; +test( macro , '3' , '51676101935731' , '0' , '3' ) ; +test( macro , '-3' , '51676101935731' , '-1' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-1' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '0' , '-3' ) ; +test( macro , '3' , '717897987691852588770249' , '0' , '3' ) ; +test( macro , '-3' , '717897987691852588770249' , '-1' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-1' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '0' , '-3' ) ; +test( macro , '7' , '1' , '7' , '0' ) ; +test( macro , '-7' , '1' , '-7' , '0' ) ; +test( macro , '7' , '-1' , '-7' , '0' ) ; +test( macro , '-7' , '-1' , '7' , '0' ) ; +test( macro , '7' , '3' , '2' , '1' ) ; +test( macro , '-7' , '3' , '-3' , '2' ) ; +test( macro , '7' , '-3' , '-3' , '-2' ) ; +test( macro , '-7' , '-3' , '2' , '-1' ) ; +test( macro , '7' , '7' , '1' , '0' ) ; +test( macro , '-7' , '7' , '-1' , '0' ) ; +test( macro , '7' , '-7' , '-1' , '0' ) ; +test( macro , '-7' , '-7' , '1' , '0' ) ; +test( macro , '7' , '9' , '0' , '7' ) ; +test( macro , '-7' , '9' , '-1' , '2' ) ; +test( macro , '7' , '-9' , '-1' , '-2' ) ; +test( macro , '-7' , '-9' , '0' , '-7' ) ; +test( macro , '7' , '11' , '0' , '7' ) ; +test( macro , '-7' , '11' , '-1' , '4' ) ; +test( macro , '7' , '-11' , '-1' , '-4' ) ; +test( macro , '-7' , '-11' , '0' , '-7' ) ; +test( macro , '7' , '17' , '0' , '7' ) ; +test( macro , '-7' , '17' , '-1' , '10' ) ; +test( macro , '7' , '-17' , '-1' , '-10' ) ; +test( macro , '-7' , '-17' , '0' , '-7' ) ; +test( macro , '7' , '22' , '0' , '7' ) ; +test( macro , '-7' , '22' , '-1' , '15' ) ; +test( macro , '7' , '-22' , '-1' , '-15' ) ; +test( macro , '-7' , '-22' , '0' , '-7' ) ; +test( macro , '7' , '24' , '0' , '7' ) ; +test( macro , '-7' , '24' , '-1' , '17' ) ; +test( macro , '7' , '-24' , '-1' , '-17' ) ; +test( macro , '-7' , '-24' , '0' , '-7' ) ; +test( macro , '7' , '27' , '0' , '7' ) ; +test( macro , '-7' , '27' , '-1' , '20' ) ; +test( macro , '7' , '-27' , '-1' , '-20' ) ; +test( macro , '-7' , '-27' , '0' , '-7' ) ; +test( macro , '7' , '29' , '0' , '7' ) ; +test( macro , '-7' , '29' , '-1' , '22' ) ; +test( macro , '7' , '-29' , '-1' , '-22' ) ; +test( macro , '-7' , '-29' , '0' , '-7' ) ; +test( macro , '7' , '1234' , '0' , '7' ) ; +test( macro , '-7' , '1234' , '-1' , '1227' ) ; +test( macro , '7' , '-1234' , '-1' , '-1227' ) ; +test( macro , '-7' , '-1234' , '0' , '-7' ) ; +test( macro , '7' , '5678' , '0' , '7' ) ; +test( macro , '-7' , '5678' , '-1' , '5671' ) ; +test( macro , '7' , '-5678' , '-1' , '-5671' ) ; +test( macro , '-7' , '-5678' , '0' , '-7' ) ; +test( macro , '7' , '1073741824' , '0' , '7' ) ; +test( macro , '-7' , '1073741824' , '-1' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '0' , '-7' ) ; +test( macro , '7' , '51676101935731' , '0' , '7' ) ; +test( macro , '-7' , '51676101935731' , '-1' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-1' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '0' , '-7' ) ; +test( macro , '7' , '717897987691852588770249' , '0' , '7' ) ; +test( macro , '-7' , '717897987691852588770249' , '-1' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-1' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '0' , '-7' ) ; +test( macro , '9' , '1' , '9' , '0' ) ; +test( macro , '-9' , '1' , '-9' , '0' ) ; +test( macro , '9' , '-1' , '-9' , '0' ) ; +test( macro , '-9' , '-1' , '9' , '0' ) ; +test( macro , '9' , '3' , '3' , '0' ) ; +test( macro , '-9' , '3' , '-3' , '0' ) ; +test( macro , '9' , '-3' , '-3' , '0' ) ; +test( macro , '-9' , '-3' , '3' , '0' ) ; +test( macro , '9' , '7' , '1' , '2' ) ; +test( macro , '-9' , '7' , '-2' , '5' ) ; +test( macro , '9' , '-7' , '-2' , '-5' ) ; +test( macro , '-9' , '-7' , '1' , '-2' ) ; +test( macro , '9' , '9' , '1' , '0' ) ; +test( macro , '-9' , '9' , '-1' , '0' ) ; +test( macro , '9' , '-9' , '-1' , '0' ) ; +test( macro , '-9' , '-9' , '1' , '0' ) ; +test( macro , '9' , '11' , '0' , '9' ) ; +test( macro , '-9' , '11' , '-1' , '2' ) ; +test( macro , '9' , '-11' , '-1' , '-2' ) ; +test( macro , '-9' , '-11' , '0' , '-9' ) ; +test( macro , '9' , '17' , '0' , '9' ) ; +test( macro , '-9' , '17' , '-1' , '8' ) ; +test( macro , '9' , '-17' , '-1' , '-8' ) ; +test( macro , '-9' , '-17' , '0' , '-9' ) ; +test( macro , '9' , '22' , '0' , '9' ) ; +test( macro , '-9' , '22' , '-1' , '13' ) ; +test( macro , '9' , '-22' , '-1' , '-13' ) ; +test( macro , '-9' , '-22' , '0' , '-9' ) ; +test( macro , '9' , '24' , '0' , '9' ) ; +test( macro , '-9' , '24' , '-1' , '15' ) ; +test( macro , '9' , '-24' , '-1' , '-15' ) ; +test( macro , '-9' , '-24' , '0' , '-9' ) ; +test( macro , '9' , '27' , '0' , '9' ) ; +test( macro , '-9' , '27' , '-1' , '18' ) ; +test( macro , '9' , '-27' , '-1' , '-18' ) ; +test( macro , '-9' , '-27' , '0' , '-9' ) ; +test( macro , '9' , '29' , '0' , '9' ) ; +test( macro , '-9' , '29' , '-1' , '20' ) ; +test( macro , '9' , '-29' , '-1' , '-20' ) ; +test( macro , '-9' , '-29' , '0' , '-9' ) ; +test( macro , '9' , '1234' , '0' , '9' ) ; +test( macro , '-9' , '1234' , '-1' , '1225' ) ; +test( macro , '9' , '-1234' , '-1' , '-1225' ) ; +test( macro , '-9' , '-1234' , '0' , '-9' ) ; +test( macro , '9' , '5678' , '0' , '9' ) ; +test( macro , '-9' , '5678' , '-1' , '5669' ) ; +test( macro , '9' , '-5678' , '-1' , '-5669' ) ; +test( macro , '-9' , '-5678' , '0' , '-9' ) ; +test( macro , '9' , '1073741824' , '0' , '9' ) ; +test( macro , '-9' , '1073741824' , '-1' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '0' , '-9' ) ; +test( macro , '9' , '51676101935731' , '0' , '9' ) ; +test( macro , '-9' , '51676101935731' , '-1' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-1' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '0' , '-9' ) ; +test( macro , '9' , '717897987691852588770249' , '0' , '9' ) ; +test( macro , '-9' , '717897987691852588770249' , '-1' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-1' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '0' , '-9' ) ; +test( macro , '11' , '1' , '11' , '0' ) ; +test( macro , '-11' , '1' , '-11' , '0' ) ; +test( macro , '11' , '-1' , '-11' , '0' ) ; +test( macro , '-11' , '-1' , '11' , '0' ) ; +test( macro , '11' , '3' , '3' , '2' ) ; +test( macro , '-11' , '3' , '-4' , '1' ) ; +test( macro , '11' , '-3' , '-4' , '-1' ) ; +test( macro , '-11' , '-3' , '3' , '-2' ) ; +test( macro , '11' , '7' , '1' , '4' ) ; +test( macro , '-11' , '7' , '-2' , '3' ) ; +test( macro , '11' , '-7' , '-2' , '-3' ) ; +test( macro , '-11' , '-7' , '1' , '-4' ) ; +test( macro , '11' , '9' , '1' , '2' ) ; +test( macro , '-11' , '9' , '-2' , '7' ) ; +test( macro , '11' , '-9' , '-2' , '-7' ) ; +test( macro , '-11' , '-9' , '1' , '-2' ) ; +test( macro , '11' , '11' , '1' , '0' ) ; +test( macro , '-11' , '11' , '-1' , '0' ) ; +test( macro , '11' , '-11' , '-1' , '0' ) ; +test( macro , '-11' , '-11' , '1' , '0' ) ; +test( macro , '11' , '17' , '0' , '11' ) ; +test( macro , '-11' , '17' , '-1' , '6' ) ; +test( macro , '11' , '-17' , '-1' , '-6' ) ; +test( macro , '-11' , '-17' , '0' , '-11' ) ; +test( macro , '11' , '22' , '0' , '11' ) ; +test( macro , '-11' , '22' , '-1' , '11' ) ; +test( macro , '11' , '-22' , '-1' , '-11' ) ; +test( macro , '-11' , '-22' , '0' , '-11' ) ; +test( macro , '11' , '24' , '0' , '11' ) ; +test( macro , '-11' , '24' , '-1' , '13' ) ; +test( macro , '11' , '-24' , '-1' , '-13' ) ; +test( macro , '-11' , '-24' , '0' , '-11' ) ; +test( macro , '11' , '27' , '0' , '11' ) ; +test( macro , '-11' , '27' , '-1' , '16' ) ; +test( macro , '11' , '-27' , '-1' , '-16' ) ; +test( macro , '-11' , '-27' , '0' , '-11' ) ; +test( macro , '11' , '29' , '0' , '11' ) ; +test( macro , '-11' , '29' , '-1' , '18' ) ; +test( macro , '11' , '-29' , '-1' , '-18' ) ; +test( macro , '-11' , '-29' , '0' , '-11' ) ; +test( macro , '11' , '1234' , '0' , '11' ) ; +test( macro , '-11' , '1234' , '-1' , '1223' ) ; +test( macro , '11' , '-1234' , '-1' , '-1223' ) ; +test( macro , '-11' , '-1234' , '0' , '-11' ) ; +test( macro , '11' , '5678' , '0' , '11' ) ; +test( macro , '-11' , '5678' , '-1' , '5667' ) ; +test( macro , '11' , '-5678' , '-1' , '-5667' ) ; +test( macro , '-11' , '-5678' , '0' , '-11' ) ; +test( macro , '11' , '1073741824' , '0' , '11' ) ; +test( macro , '-11' , '1073741824' , '-1' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '0' , '-11' ) ; +test( macro , '11' , '51676101935731' , '0' , '11' ) ; +test( macro , '-11' , '51676101935731' , '-1' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-1' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '0' , '-11' ) ; +test( macro , '11' , '717897987691852588770249' , '0' , '11' ) ; +test( macro , '-11' , '717897987691852588770249' , '-1' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-1' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '0' , '-11' ) ; +test( macro , '17' , '1' , '17' , '0' ) ; +test( macro , '-17' , '1' , '-17' , '0' ) ; +test( macro , '17' , '-1' , '-17' , '0' ) ; +test( macro , '-17' , '-1' , '17' , '0' ) ; +test( macro , '17' , '3' , '5' , '2' ) ; +test( macro , '-17' , '3' , '-6' , '1' ) ; +test( macro , '17' , '-3' , '-6' , '-1' ) ; +test( macro , '-17' , '-3' , '5' , '-2' ) ; +test( macro , '17' , '7' , '2' , '3' ) ; +test( macro , '-17' , '7' , '-3' , '4' ) ; +test( macro , '17' , '-7' , '-3' , '-4' ) ; +test( macro , '-17' , '-7' , '2' , '-3' ) ; +test( macro , '17' , '9' , '1' , '8' ) ; +test( macro , '-17' , '9' , '-2' , '1' ) ; +test( macro , '17' , '-9' , '-2' , '-1' ) ; +test( macro , '-17' , '-9' , '1' , '-8' ) ; +test( macro , '17' , '11' , '1' , '6' ) ; +test( macro , '-17' , '11' , '-2' , '5' ) ; +test( macro , '17' , '-11' , '-2' , '-5' ) ; +test( macro , '-17' , '-11' , '1' , '-6' ) ; +test( macro , '17' , '17' , '1' , '0' ) ; +test( macro , '-17' , '17' , '-1' , '0' ) ; +test( macro , '17' , '-17' , '-1' , '0' ) ; +test( macro , '-17' , '-17' , '1' , '0' ) ; +test( macro , '17' , '22' , '0' , '17' ) ; +test( macro , '-17' , '22' , '-1' , '5' ) ; +test( macro , '17' , '-22' , '-1' , '-5' ) ; +test( macro , '-17' , '-22' , '0' , '-17' ) ; +test( macro , '17' , '24' , '0' , '17' ) ; +test( macro , '-17' , '24' , '-1' , '7' ) ; +test( macro , '17' , '-24' , '-1' , '-7' ) ; +test( macro , '-17' , '-24' , '0' , '-17' ) ; +test( macro , '17' , '27' , '0' , '17' ) ; +test( macro , '-17' , '27' , '-1' , '10' ) ; +test( macro , '17' , '-27' , '-1' , '-10' ) ; +test( macro , '-17' , '-27' , '0' , '-17' ) ; +test( macro , '17' , '29' , '0' , '17' ) ; +test( macro , '-17' , '29' , '-1' , '12' ) ; +test( macro , '17' , '-29' , '-1' , '-12' ) ; +test( macro , '-17' , '-29' , '0' , '-17' ) ; +test( macro , '17' , '1234' , '0' , '17' ) ; +test( macro , '-17' , '1234' , '-1' , '1217' ) ; +test( macro , '17' , '-1234' , '-1' , '-1217' ) ; +test( macro , '-17' , '-1234' , '0' , '-17' ) ; +test( macro , '17' , '5678' , '0' , '17' ) ; +test( macro , '-17' , '5678' , '-1' , '5661' ) ; +test( macro , '17' , '-5678' , '-1' , '-5661' ) ; +test( macro , '-17' , '-5678' , '0' , '-17' ) ; +test( macro , '17' , '1073741824' , '0' , '17' ) ; +test( macro , '-17' , '1073741824' , '-1' , '1073741807' ) ; +test( macro , '17' , '-1073741824' , '-1' , '-1073741807' ) ; +test( macro , '-17' , '-1073741824' , '0' , '-17' ) ; +test( macro , '17' , '51676101935731' , '0' , '17' ) ; +test( macro , '-17' , '51676101935731' , '-1' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-1' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '0' , '-17' ) ; +test( macro , '17' , '717897987691852588770249' , '0' , '17' ) ; +test( macro , '-17' , '717897987691852588770249' , '-1' , '717897987691852588770232' ) ; +test( macro , '17' , '-717897987691852588770249' , '-1' , '-717897987691852588770232' ) ; +test( macro , '-17' , '-717897987691852588770249' , '0' , '-17' ) ; +test( macro , '22' , '1' , '22' , '0' ) ; +test( macro , '-22' , '1' , '-22' , '0' ) ; +test( macro , '22' , '-1' , '-22' , '0' ) ; +test( macro , '-22' , '-1' , '22' , '0' ) ; +test( macro , '22' , '3' , '7' , '1' ) ; +test( macro , '-22' , '3' , '-8' , '2' ) ; +test( macro , '22' , '-3' , '-8' , '-2' ) ; +test( macro , '-22' , '-3' , '7' , '-1' ) ; +test( macro , '22' , '7' , '3' , '1' ) ; +test( macro , '-22' , '7' , '-4' , '6' ) ; +test( macro , '22' , '-7' , '-4' , '-6' ) ; +test( macro , '-22' , '-7' , '3' , '-1' ) ; +test( macro , '22' , '9' , '2' , '4' ) ; +test( macro , '-22' , '9' , '-3' , '5' ) ; +test( macro , '22' , '-9' , '-3' , '-5' ) ; +test( macro , '-22' , '-9' , '2' , '-4' ) ; +test( macro , '22' , '11' , '2' , '0' ) ; +test( macro , '-22' , '11' , '-2' , '0' ) ; +test( macro , '22' , '-11' , '-2' , '0' ) ; +test( macro , '-22' , '-11' , '2' , '0' ) ; +test( macro , '22' , '17' , '1' , '5' ) ; +test( macro , '-22' , '17' , '-2' , '12' ) ; +test( macro , '22' , '-17' , '-2' , '-12' ) ; +test( macro , '-22' , '-17' , '1' , '-5' ) ; +test( macro , '22' , '22' , '1' , '0' ) ; +test( macro , '-22' , '22' , '-1' , '0' ) ; +test( macro , '22' , '-22' , '-1' , '0' ) ; +test( macro , '-22' , '-22' , '1' , '0' ) ; +test( macro , '22' , '24' , '0' , '22' ) ; +test( macro , '-22' , '24' , '-1' , '2' ) ; +test( macro , '22' , '-24' , '-1' , '-2' ) ; +test( macro , '-22' , '-24' , '0' , '-22' ) ; +test( macro , '22' , '27' , '0' , '22' ) ; +test( macro , '-22' , '27' , '-1' , '5' ) ; +test( macro , '22' , '-27' , '-1' , '-5' ) ; +test( macro , '-22' , '-27' , '0' , '-22' ) ; +test( macro , '22' , '29' , '0' , '22' ) ; +test( macro , '-22' , '29' , '-1' , '7' ) ; +test( macro , '22' , '-29' , '-1' , '-7' ) ; +test( macro , '-22' , '-29' , '0' , '-22' ) ; +test( macro , '22' , '1234' , '0' , '22' ) ; +test( macro , '-22' , '1234' , '-1' , '1212' ) ; +test( macro , '22' , '-1234' , '-1' , '-1212' ) ; +test( macro , '-22' , '-1234' , '0' , '-22' ) ; +test( macro , '22' , '5678' , '0' , '22' ) ; +test( macro , '-22' , '5678' , '-1' , '5656' ) ; +test( macro , '22' , '-5678' , '-1' , '-5656' ) ; +test( macro , '-22' , '-5678' , '0' , '-22' ) ; +test( macro , '22' , '1073741824' , '0' , '22' ) ; +test( macro , '-22' , '1073741824' , '-1' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '0' , '-22' ) ; +test( macro , '22' , '51676101935731' , '0' , '22' ) ; +test( macro , '-22' , '51676101935731' , '-1' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-1' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '0' , '-22' ) ; +test( macro , '22' , '717897987691852588770249' , '0' , '22' ) ; +test( macro , '-22' , '717897987691852588770249' , '-1' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-1' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '0' , '-22' ) ; +test( macro , '24' , '1' , '24' , '0' ) ; +test( macro , '-24' , '1' , '-24' , '0' ) ; +test( macro , '24' , '-1' , '-24' , '0' ) ; +test( macro , '-24' , '-1' , '24' , '0' ) ; +test( macro , '24' , '3' , '8' , '0' ) ; +test( macro , '-24' , '3' , '-8' , '0' ) ; +test( macro , '24' , '-3' , '-8' , '0' ) ; +test( macro , '-24' , '-3' , '8' , '0' ) ; +test( macro , '24' , '7' , '3' , '3' ) ; +test( macro , '-24' , '7' , '-4' , '4' ) ; +test( macro , '24' , '-7' , '-4' , '-4' ) ; +test( macro , '-24' , '-7' , '3' , '-3' ) ; +test( macro , '24' , '9' , '2' , '6' ) ; +test( macro , '-24' , '9' , '-3' , '3' ) ; +test( macro , '24' , '-9' , '-3' , '-3' ) ; +test( macro , '-24' , '-9' , '2' , '-6' ) ; +test( macro , '24' , '11' , '2' , '2' ) ; +test( macro , '-24' , '11' , '-3' , '9' ) ; +test( macro , '24' , '-11' , '-3' , '-9' ) ; +test( macro , '-24' , '-11' , '2' , '-2' ) ; +test( macro , '24' , '17' , '1' , '7' ) ; +test( macro , '-24' , '17' , '-2' , '10' ) ; +test( macro , '24' , '-17' , '-2' , '-10' ) ; +test( macro , '-24' , '-17' , '1' , '-7' ) ; +test( macro , '24' , '22' , '1' , '2' ) ; +test( macro , '-24' , '22' , '-2' , '20' ) ; +test( macro , '24' , '-22' , '-2' , '-20' ) ; +test( macro , '-24' , '-22' , '1' , '-2' ) ; +test( macro , '24' , '24' , '1' , '0' ) ; +test( macro , '-24' , '24' , '-1' , '0' ) ; +test( macro , '24' , '-24' , '-1' , '0' ) ; +test( macro , '-24' , '-24' , '1' , '0' ) ; +test( macro , '24' , '27' , '0' , '24' ) ; +test( macro , '-24' , '27' , '-1' , '3' ) ; +test( macro , '24' , '-27' , '-1' , '-3' ) ; +test( macro , '-24' , '-27' , '0' , '-24' ) ; +test( macro , '24' , '29' , '0' , '24' ) ; +test( macro , '-24' , '29' , '-1' , '5' ) ; +test( macro , '24' , '-29' , '-1' , '-5' ) ; +test( macro , '-24' , '-29' , '0' , '-24' ) ; +test( macro , '24' , '1234' , '0' , '24' ) ; +test( macro , '-24' , '1234' , '-1' , '1210' ) ; +test( macro , '24' , '-1234' , '-1' , '-1210' ) ; +test( macro , '-24' , '-1234' , '0' , '-24' ) ; +test( macro , '24' , '5678' , '0' , '24' ) ; +test( macro , '-24' , '5678' , '-1' , '5654' ) ; +test( macro , '24' , '-5678' , '-1' , '-5654' ) ; +test( macro , '-24' , '-5678' , '0' , '-24' ) ; +test( macro , '24' , '1073741824' , '0' , '24' ) ; +test( macro , '-24' , '1073741824' , '-1' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '0' , '-24' ) ; +test( macro , '24' , '51676101935731' , '0' , '24' ) ; +test( macro , '-24' , '51676101935731' , '-1' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-1' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '0' , '-24' ) ; +test( macro , '24' , '717897987691852588770249' , '0' , '24' ) ; +test( macro , '-24' , '717897987691852588770249' , '-1' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-1' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '0' , '-24' ) ; +test( macro , '27' , '1' , '27' , '0' ) ; +test( macro , '-27' , '1' , '-27' , '0' ) ; +test( macro , '27' , '-1' , '-27' , '0' ) ; +test( macro , '-27' , '-1' , '27' , '0' ) ; +test( macro , '27' , '3' , '9' , '0' ) ; +test( macro , '-27' , '3' , '-9' , '0' ) ; +test( macro , '27' , '-3' , '-9' , '0' ) ; +test( macro , '-27' , '-3' , '9' , '0' ) ; +test( macro , '27' , '7' , '3' , '6' ) ; +test( macro , '-27' , '7' , '-4' , '1' ) ; +test( macro , '27' , '-7' , '-4' , '-1' ) ; +test( macro , '-27' , '-7' , '3' , '-6' ) ; +test( macro , '27' , '9' , '3' , '0' ) ; +test( macro , '-27' , '9' , '-3' , '0' ) ; +test( macro , '27' , '-9' , '-3' , '0' ) ; +test( macro , '-27' , '-9' , '3' , '0' ) ; +test( macro , '27' , '11' , '2' , '5' ) ; +test( macro , '-27' , '11' , '-3' , '6' ) ; +test( macro , '27' , '-11' , '-3' , '-6' ) ; +test( macro , '-27' , '-11' , '2' , '-5' ) ; +test( macro , '27' , '17' , '1' , '10' ) ; +test( macro , '-27' , '17' , '-2' , '7' ) ; +test( macro , '27' , '-17' , '-2' , '-7' ) ; +test( macro , '-27' , '-17' , '1' , '-10' ) ; +test( macro , '27' , '22' , '1' , '5' ) ; +test( macro , '-27' , '22' , '-2' , '17' ) ; +test( macro , '27' , '-22' , '-2' , '-17' ) ; +test( macro , '-27' , '-22' , '1' , '-5' ) ; +test( macro , '27' , '24' , '1' , '3' ) ; +test( macro , '-27' , '24' , '-2' , '21' ) ; +test( macro , '27' , '-24' , '-2' , '-21' ) ; +test( macro , '-27' , '-24' , '1' , '-3' ) ; +test( macro , '27' , '27' , '1' , '0' ) ; +test( macro , '-27' , '27' , '-1' , '0' ) ; +test( macro , '27' , '-27' , '-1' , '0' ) ; +test( macro , '-27' , '-27' , '1' , '0' ) ; +test( macro , '27' , '29' , '0' , '27' ) ; +test( macro , '-27' , '29' , '-1' , '2' ) ; +test( macro , '27' , '-29' , '-1' , '-2' ) ; +test( macro , '-27' , '-29' , '0' , '-27' ) ; +test( macro , '27' , '1234' , '0' , '27' ) ; +test( macro , '-27' , '1234' , '-1' , '1207' ) ; +test( macro , '27' , '-1234' , '-1' , '-1207' ) ; +test( macro , '-27' , '-1234' , '0' , '-27' ) ; +test( macro , '27' , '5678' , '0' , '27' ) ; +test( macro , '-27' , '5678' , '-1' , '5651' ) ; +test( macro , '27' , '-5678' , '-1' , '-5651' ) ; +test( macro , '-27' , '-5678' , '0' , '-27' ) ; +test( macro , '27' , '1073741824' , '0' , '27' ) ; +test( macro , '-27' , '1073741824' , '-1' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '0' , '-27' ) ; +test( macro , '27' , '51676101935731' , '0' , '27' ) ; +test( macro , '-27' , '51676101935731' , '-1' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-1' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '0' , '-27' ) ; +test( macro , '27' , '717897987691852588770249' , '0' , '27' ) ; +test( macro , '-27' , '717897987691852588770249' , '-1' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-1' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '0' , '-27' ) ; +test( macro , '29' , '1' , '29' , '0' ) ; +test( macro , '-29' , '1' , '-29' , '0' ) ; +test( macro , '29' , '-1' , '-29' , '0' ) ; +test( macro , '-29' , '-1' , '29' , '0' ) ; +test( macro , '29' , '3' , '9' , '2' ) ; +test( macro , '-29' , '3' , '-10' , '1' ) ; +test( macro , '29' , '-3' , '-10' , '-1' ) ; +test( macro , '-29' , '-3' , '9' , '-2' ) ; +test( macro , '29' , '7' , '4' , '1' ) ; +test( macro , '-29' , '7' , '-5' , '6' ) ; +test( macro , '29' , '-7' , '-5' , '-6' ) ; +test( macro , '-29' , '-7' , '4' , '-1' ) ; +test( macro , '29' , '9' , '3' , '2' ) ; +test( macro , '-29' , '9' , '-4' , '7' ) ; +test( macro , '29' , '-9' , '-4' , '-7' ) ; +test( macro , '-29' , '-9' , '3' , '-2' ) ; +test( macro , '29' , '11' , '2' , '7' ) ; +test( macro , '-29' , '11' , '-3' , '4' ) ; +test( macro , '29' , '-11' , '-3' , '-4' ) ; +test( macro , '-29' , '-11' , '2' , '-7' ) ; +test( macro , '29' , '17' , '1' , '12' ) ; +test( macro , '-29' , '17' , '-2' , '5' ) ; +test( macro , '29' , '-17' , '-2' , '-5' ) ; +test( macro , '-29' , '-17' , '1' , '-12' ) ; +test( macro , '29' , '22' , '1' , '7' ) ; +test( macro , '-29' , '22' , '-2' , '15' ) ; +test( macro , '29' , '-22' , '-2' , '-15' ) ; +test( macro , '-29' , '-22' , '1' , '-7' ) ; +test( macro , '29' , '24' , '1' , '5' ) ; +test( macro , '-29' , '24' , '-2' , '19' ) ; +test( macro , '29' , '-24' , '-2' , '-19' ) ; +test( macro , '-29' , '-24' , '1' , '-5' ) ; +test( macro , '29' , '27' , '1' , '2' ) ; +test( macro , '-29' , '27' , '-2' , '25' ) ; +test( macro , '29' , '-27' , '-2' , '-25' ) ; +test( macro , '-29' , '-27' , '1' , '-2' ) ; +test( macro , '29' , '29' , '1' , '0' ) ; +test( macro , '-29' , '29' , '-1' , '0' ) ; +test( macro , '29' , '-29' , '-1' , '0' ) ; +test( macro , '-29' , '-29' , '1' , '0' ) ; +test( macro , '29' , '1234' , '0' , '29' ) ; +test( macro , '-29' , '1234' , '-1' , '1205' ) ; +test( macro , '29' , '-1234' , '-1' , '-1205' ) ; +test( macro , '-29' , '-1234' , '0' , '-29' ) ; +test( macro , '29' , '5678' , '0' , '29' ) ; +test( macro , '-29' , '5678' , '-1' , '5649' ) ; +test( macro , '29' , '-5678' , '-1' , '-5649' ) ; +test( macro , '-29' , '-5678' , '0' , '-29' ) ; +test( macro , '29' , '1073741824' , '0' , '29' ) ; +test( macro , '-29' , '1073741824' , '-1' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '0' , '-29' ) ; +test( macro , '29' , '51676101935731' , '0' , '29' ) ; +test( macro , '-29' , '51676101935731' , '-1' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-1' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '0' , '-29' ) ; +test( macro , '29' , '717897987691852588770249' , '0' , '29' ) ; +test( macro , '-29' , '717897987691852588770249' , '-1' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-1' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '0' , '-29' ) ; +test( macro , '1234' , '1' , '1234' , '0' ) ; +test( macro , '-1234' , '1' , '-1234' , '0' ) ; +test( macro , '1234' , '-1' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1' , '1234' , '0' ) ; +test( macro , '1234' , '3' , '411' , '1' ) ; +test( macro , '-1234' , '3' , '-412' , '2' ) ; +test( macro , '1234' , '-3' , '-412' , '-2' ) ; +test( macro , '-1234' , '-3' , '411' , '-1' ) ; +test( macro , '1234' , '7' , '176' , '2' ) ; +test( macro , '-1234' , '7' , '-177' , '5' ) ; +test( macro , '1234' , '-7' , '-177' , '-5' ) ; +test( macro , '-1234' , '-7' , '176' , '-2' ) ; +test( macro , '1234' , '9' , '137' , '1' ) ; +test( macro , '-1234' , '9' , '-138' , '8' ) ; +test( macro , '1234' , '-9' , '-138' , '-8' ) ; +test( macro , '-1234' , '-9' , '137' , '-1' ) ; +test( macro , '1234' , '11' , '112' , '2' ) ; +test( macro , '-1234' , '11' , '-113' , '9' ) ; +test( macro , '1234' , '-11' , '-113' , '-9' ) ; +test( macro , '-1234' , '-11' , '112' , '-2' ) ; +test( macro , '1234' , '17' , '72' , '10' ) ; +test( macro , '-1234' , '17' , '-73' , '7' ) ; +test( macro , '1234' , '-17' , '-73' , '-7' ) ; +test( macro , '-1234' , '-17' , '72' , '-10' ) ; +test( macro , '1234' , '22' , '56' , '2' ) ; +test( macro , '-1234' , '22' , '-57' , '20' ) ; +test( macro , '1234' , '-22' , '-57' , '-20' ) ; +test( macro , '-1234' , '-22' , '56' , '-2' ) ; +test( macro , '1234' , '24' , '51' , '10' ) ; +test( macro , '-1234' , '24' , '-52' , '14' ) ; +test( macro , '1234' , '-24' , '-52' , '-14' ) ; +test( macro , '-1234' , '-24' , '51' , '-10' ) ; +test( macro , '1234' , '27' , '45' , '19' ) ; +test( macro , '-1234' , '27' , '-46' , '8' ) ; +test( macro , '1234' , '-27' , '-46' , '-8' ) ; +test( macro , '-1234' , '-27' , '45' , '-19' ) ; +test( macro , '1234' , '29' , '42' , '16' ) ; +test( macro , '-1234' , '29' , '-43' , '13' ) ; +test( macro , '1234' , '-29' , '-43' , '-13' ) ; +test( macro , '-1234' , '-29' , '42' , '-16' ) ; +test( macro , '1234' , '1234' , '1' , '0' ) ; +test( macro , '-1234' , '1234' , '-1' , '0' ) ; +test( macro , '1234' , '-1234' , '-1' , '0' ) ; +test( macro , '-1234' , '-1234' , '1' , '0' ) ; +test( macro , '1234' , '5678' , '0' , '1234' ) ; +test( macro , '-1234' , '5678' , '-1' , '4444' ) ; +test( macro , '1234' , '-5678' , '-1' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '0' , '-1234' ) ; +test( macro , '1234' , '1073741824' , '0' , '1234' ) ; +test( macro , '-1234' , '1073741824' , '-1' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '0' , '-1234' ) ; +test( macro , '1234' , '51676101935731' , '0' , '1234' ) ; +test( macro , '-1234' , '51676101935731' , '-1' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-1' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '0' , '-1234' ) ; +test( macro , '1234' , '717897987691852588770249' , '0' , '1234' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-1' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-1' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '0' , '-1234' ) ; +test( macro , '5678' , '1' , '5678' , '0' ) ; +test( macro , '-5678' , '1' , '-5678' , '0' ) ; +test( macro , '5678' , '-1' , '-5678' , '0' ) ; +test( macro , '-5678' , '-1' , '5678' , '0' ) ; +test( macro , '5678' , '3' , '1892' , '2' ) ; +test( macro , '-5678' , '3' , '-1893' , '1' ) ; +test( macro , '5678' , '-3' , '-1893' , '-1' ) ; +test( macro , '-5678' , '-3' , '1892' , '-2' ) ; +test( macro , '5678' , '7' , '811' , '1' ) ; +test( macro , '-5678' , '7' , '-812' , '6' ) ; +test( macro , '5678' , '-7' , '-812' , '-6' ) ; +test( macro , '-5678' , '-7' , '811' , '-1' ) ; +test( macro , '5678' , '9' , '630' , '8' ) ; +test( macro , '-5678' , '9' , '-631' , '1' ) ; +test( macro , '5678' , '-9' , '-631' , '-1' ) ; +test( macro , '-5678' , '-9' , '630' , '-8' ) ; +test( macro , '5678' , '11' , '516' , '2' ) ; +test( macro , '-5678' , '11' , '-517' , '9' ) ; +test( macro , '5678' , '-11' , '-517' , '-9' ) ; +test( macro , '-5678' , '-11' , '516' , '-2' ) ; +test( macro , '5678' , '17' , '334' , '0' ) ; +test( macro , '-5678' , '17' , '-334' , '0' ) ; +test( macro , '5678' , '-17' , '-334' , '0' ) ; +test( macro , '-5678' , '-17' , '334' , '0' ) ; +test( macro , '5678' , '22' , '258' , '2' ) ; +test( macro , '-5678' , '22' , '-259' , '20' ) ; +test( macro , '5678' , '-22' , '-259' , '-20' ) ; +test( macro , '-5678' , '-22' , '258' , '-2' ) ; +test( macro , '5678' , '24' , '236' , '14' ) ; +test( macro , '-5678' , '24' , '-237' , '10' ) ; +test( macro , '5678' , '-24' , '-237' , '-10' ) ; +test( macro , '-5678' , '-24' , '236' , '-14' ) ; +test( macro , '5678' , '27' , '210' , '8' ) ; +test( macro , '-5678' , '27' , '-211' , '19' ) ; +test( macro , '5678' , '-27' , '-211' , '-19' ) ; +test( macro , '-5678' , '-27' , '210' , '-8' ) ; +test( macro , '5678' , '29' , '195' , '23' ) ; +test( macro , '-5678' , '29' , '-196' , '6' ) ; +test( macro , '5678' , '-29' , '-196' , '-6' ) ; +test( macro , '-5678' , '-29' , '195' , '-23' ) ; +test( macro , '5678' , '1234' , '4' , '742' ) ; +test( macro , '-5678' , '1234' , '-5' , '492' ) ; +test( macro , '5678' , '-1234' , '-5' , '-492' ) ; +test( macro , '-5678' , '-1234' , '4' , '-742' ) ; +test( macro , '5678' , '5678' , '1' , '0' ) ; +test( macro , '-5678' , '5678' , '-1' , '0' ) ; +test( macro , '5678' , '-5678' , '-1' , '0' ) ; +test( macro , '-5678' , '-5678' , '1' , '0' ) ; +test( macro , '5678' , '1073741824' , '0' , '5678' ) ; +test( macro , '-5678' , '1073741824' , '-1' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '0' , '-5678' ) ; +test( macro , '5678' , '51676101935731' , '0' , '5678' ) ; +test( macro , '-5678' , '51676101935731' , '-1' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-1' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '0' , '-5678' ) ; +test( macro , '5678' , '717897987691852588770249' , '0' , '5678' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-1' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-1' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '0' , '-5678' ) ; +test( macro , '1073741824' , '1' , '1073741824' , '0' ) ; +test( macro , '-1073741824' , '1' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '-1' , '-1073741824' , '0' ) ; +test( macro , '-1073741824' , '-1' , '1073741824' , '0' ) ; +test( macro , '1073741824' , '3' , '357913941' , '1' ) ; +test( macro , '-1073741824' , '3' , '-357913942' , '2' ) ; +test( macro , '1073741824' , '-3' , '-357913942' , '-2' ) ; +test( macro , '-1073741824' , '-3' , '357913941' , '-1' ) ; +test( macro , '1073741824' , '7' , '153391689' , '1' ) ; +test( macro , '-1073741824' , '7' , '-153391690' , '6' ) ; +test( macro , '1073741824' , '-7' , '-153391690' , '-6' ) ; +test( macro , '-1073741824' , '-7' , '153391689' , '-1' ) ; +test( macro , '1073741824' , '9' , '119304647' , '1' ) ; +test( macro , '-1073741824' , '9' , '-119304648' , '8' ) ; +test( macro , '1073741824' , '-9' , '-119304648' , '-8' ) ; +test( macro , '-1073741824' , '-9' , '119304647' , '-1' ) ; +test( macro , '1073741824' , '11' , '97612893' , '1' ) ; +test( macro , '-1073741824' , '11' , '-97612894' , '10' ) ; +test( macro , '1073741824' , '-11' , '-97612894' , '-10' ) ; +test( macro , '-1073741824' , '-11' , '97612893' , '-1' ) ; +test( macro , '1073741824' , '17' , '63161283' , '13' ) ; +test( macro , '-1073741824' , '17' , '-63161284' , '4' ) ; +test( macro , '1073741824' , '-17' , '-63161284' , '-4' ) ; +test( macro , '-1073741824' , '-17' , '63161283' , '-13' ) ; +test( macro , '1073741824' , '22' , '48806446' , '12' ) ; +test( macro , '-1073741824' , '22' , '-48806447' , '10' ) ; +test( macro , '1073741824' , '-22' , '-48806447' , '-10' ) ; +test( macro , '-1073741824' , '-22' , '48806446' , '-12' ) ; +test( macro , '1073741824' , '24' , '44739242' , '16' ) ; +test( macro , '-1073741824' , '24' , '-44739243' , '8' ) ; +test( macro , '1073741824' , '-24' , '-44739243' , '-8' ) ; +test( macro , '-1073741824' , '-24' , '44739242' , '-16' ) ; +test( macro , '1073741824' , '27' , '39768215' , '19' ) ; +test( macro , '-1073741824' , '27' , '-39768216' , '8' ) ; +test( macro , '1073741824' , '-27' , '-39768216' , '-8' ) ; +test( macro , '-1073741824' , '-27' , '39768215' , '-19' ) ; +test( macro , '1073741824' , '29' , '37025580' , '4' ) ; +test( macro , '-1073741824' , '29' , '-37025581' , '25' ) ; +test( macro , '1073741824' , '-29' , '-37025581' , '-25' ) ; +test( macro , '-1073741824' , '-29' , '37025580' , '-4' ) ; +test( macro , '1073741824' , '1234' , '870131' , '170' ) ; +test( macro , '-1073741824' , '1234' , '-870132' , '1064' ) ; +test( macro , '1073741824' , '-1234' , '-870132' , '-1064' ) ; +test( macro , '-1073741824' , '-1234' , '870131' , '-170' ) ; +test( macro , '1073741824' , '5678' , '189105' , '3634' ) ; +test( macro , '-1073741824' , '5678' , '-189106' , '2044' ) ; +test( macro , '1073741824' , '-5678' , '-189106' , '-2044' ) ; +test( macro , '-1073741824' , '-5678' , '189105' , '-3634' ) ; +test( macro , '1073741824' , '1073741824' , '1' , '0' ) ; +test( macro , '-1073741824' , '1073741824' , '-1' , '0' ) ; +test( macro , '1073741824' , '-1073741824' , '-1' , '0' ) ; +test( macro , '-1073741824' , '-1073741824' , '1' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '51676101935731' , '-1' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-1' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '0' , '-1073741824' ) ; +test( macro , '1073741824' , '717897987691852588770249' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '717897987691852588770249' , '-1' , '717897987691851515028425' ) ; +test( macro , '1073741824' , '-717897987691852588770249' , '-1' , '-717897987691851515028425' ) ; +test( macro , '-1073741824' , '-717897987691852588770249' , '0' , '-1073741824' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '3' , '17225367311910' , '1' ) ; +test( macro , '-51676101935731' , '3' , '-17225367311911' , '2' ) ; +test( macro , '51676101935731' , '-3' , '-17225367311911' , '-2' ) ; +test( macro , '-51676101935731' , '-3' , '17225367311910' , '-1' ) ; +test( macro , '51676101935731' , '7' , '7382300276533' , '0' ) ; +test( macro , '-51676101935731' , '7' , '-7382300276533' , '0' ) ; +test( macro , '51676101935731' , '-7' , '-7382300276533' , '0' ) ; +test( macro , '-51676101935731' , '-7' , '7382300276533' , '0' ) ; +test( macro , '51676101935731' , '9' , '5741789103970' , '1' ) ; +test( macro , '-51676101935731' , '9' , '-5741789103971' , '8' ) ; +test( macro , '51676101935731' , '-9' , '-5741789103971' , '-8' ) ; +test( macro , '-51676101935731' , '-9' , '5741789103970' , '-1' ) ; +test( macro , '51676101935731' , '11' , '4697827448702' , '9' ) ; +test( macro , '-51676101935731' , '11' , '-4697827448703' , '2' ) ; +test( macro , '51676101935731' , '-11' , '-4697827448703' , '-2' ) ; +test( macro , '-51676101935731' , '-11' , '4697827448702' , '-9' ) ; +test( macro , '51676101935731' , '17' , '3039770702101' , '14' ) ; +test( macro , '-51676101935731' , '17' , '-3039770702102' , '3' ) ; +test( macro , '51676101935731' , '-17' , '-3039770702102' , '-3' ) ; +test( macro , '-51676101935731' , '-17' , '3039770702101' , '-14' ) ; +test( macro , '51676101935731' , '22' , '2348913724351' , '9' ) ; +test( macro , '-51676101935731' , '22' , '-2348913724352' , '13' ) ; +test( macro , '51676101935731' , '-22' , '-2348913724352' , '-13' ) ; +test( macro , '-51676101935731' , '-22' , '2348913724351' , '-9' ) ; +test( macro , '51676101935731' , '24' , '2153170913988' , '19' ) ; +test( macro , '-51676101935731' , '24' , '-2153170913989' , '5' ) ; +test( macro , '51676101935731' , '-24' , '-2153170913989' , '-5' ) ; +test( macro , '-51676101935731' , '-24' , '2153170913988' , '-19' ) ; +test( macro , '51676101935731' , '27' , '1913929701323' , '10' ) ; +test( macro , '-51676101935731' , '27' , '-1913929701324' , '17' ) ; +test( macro , '51676101935731' , '-27' , '-1913929701324' , '-17' ) ; +test( macro , '-51676101935731' , '-27' , '1913929701323' , '-10' ) ; +test( macro , '51676101935731' , '29' , '1781934549507' , '28' ) ; +test( macro , '-51676101935731' , '29' , '-1781934549508' , '1' ) ; +test( macro , '51676101935731' , '-29' , '-1781934549508' , '-1' ) ; +test( macro , '-51676101935731' , '-29' , '1781934549507' , '-28' ) ; +test( macro , '51676101935731' , '1234' , '41876905944' , '835' ) ; +test( macro , '-51676101935731' , '1234' , '-41876905945' , '399' ) ; +test( macro , '51676101935731' , '-1234' , '-41876905945' , '-399' ) ; +test( macro , '-51676101935731' , '-1234' , '41876905944' , '-835' ) ; +test( macro , '51676101935731' , '5678' , '9101109886' , '3023' ) ; +test( macro , '-51676101935731' , '5678' , '-9101109887' , '2655' ) ; +test( macro , '51676101935731' , '-5678' , '-9101109887' , '-2655' ) ; +test( macro , '-51676101935731' , '-5678' , '9101109886' , '-3023' ) ; +test( macro , '51676101935731' , '1073741824' , '48127' , '129172083' ) ; +test( macro , '-51676101935731' , '1073741824' , '-48128' , '944569741' ) ; +test( macro , '51676101935731' , '-1073741824' , '-48128' , '-944569741' ) ; +test( macro , '-51676101935731' , '-1073741824' , '48127' , '-129172083' ) ; +test( macro , '51676101935731' , '51676101935731' , '1' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-1' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-1' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '1' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-1' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-1' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '0' , '-51676101935731' ) ; +test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , '3' , '239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , '3' , '-239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , '-3' , '-239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , '-3' , '239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , '7' , '102556855384550369824321' , '2' ) ; +test( macro , '-717897987691852588770249' , '7' , '-102556855384550369824322' , '5' ) ; +test( macro , '717897987691852588770249' , '-7' , '-102556855384550369824322' , '-5' ) ; +test( macro , '-717897987691852588770249' , '-7' , '102556855384550369824321' , '-2' ) ; +test( macro , '717897987691852588770249' , '9' , '79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , '9' , '-79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , '-9' , '-79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , '-9' , '79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , '11' , '65263453426532053524568' , '1' ) ; +test( macro , '-717897987691852588770249' , '11' , '-65263453426532053524569' , '10' ) ; +test( macro , '717897987691852588770249' , '-11' , '-65263453426532053524569' , '-10' ) ; +test( macro , '-717897987691852588770249' , '-11' , '65263453426532053524568' , '-1' ) ; +test( macro , '717897987691852588770249' , '17' , '42229293393638387574720' , '9' ) ; +test( macro , '-717897987691852588770249' , '17' , '-42229293393638387574721' , '8' ) ; +test( macro , '717897987691852588770249' , '-17' , '-42229293393638387574721' , '-8' ) ; +test( macro , '-717897987691852588770249' , '-17' , '42229293393638387574720' , '-9' ) ; +test( macro , '717897987691852588770249' , '22' , '32631726713266026762284' , '1' ) ; +test( macro , '-717897987691852588770249' , '22' , '-32631726713266026762285' , '21' ) ; +test( macro , '717897987691852588770249' , '-22' , '-32631726713266026762285' , '-21' ) ; +test( macro , '-717897987691852588770249' , '-22' , '32631726713266026762284' , '-1' ) ; +test( macro , '717897987691852588770249' , '24' , '29912416153827191198760' , '9' ) ; +test( macro , '-717897987691852588770249' , '24' , '-29912416153827191198761' , '15' ) ; +test( macro , '717897987691852588770249' , '-24' , '-29912416153827191198761' , '-15' ) ; +test( macro , '-717897987691852588770249' , '-24' , '29912416153827191198760' , '-9' ) ; +test( macro , '717897987691852588770249' , '27' , '26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , '27' , '-26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , '-27' , '-26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , '-27' , '26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , '29' , '24755103023856985819663' , '22' ) ; +test( macro , '-717897987691852588770249' , '29' , '-24755103023856985819664' , '7' ) ; +test( macro , '717897987691852588770249' , '-29' , '-24755103023856985819664' , '-7' ) ; +test( macro , '-717897987691852588770249' , '-29' , '24755103023856985819663' , '-22' ) ; +test( macro , '717897987691852588770249' , '1234' , '581764981922084755891' , '755' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-581764981922084755892' , '479' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-581764981922084755892' , '-479' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '581764981922084755891' , '-755' ) ; +test( macro , '717897987691852588770249' , '5678' , '126435010160593974774' , '3477' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-126435010160593974775' , '2201' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-126435010160593974775' , '-2201' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '126435010160593974774' , '-3477' ) ; +test( macro , '717897987691852588770249' , '1073741824' , '668594602208447' , '278782921' ) ; +test( macro , '-717897987691852588770249' , '1073741824' , '-668594602208448' , '794958903' ) ; +test( macro , '717897987691852588770249' , '-1073741824' , '-668594602208448' , '-794958903' ) ; +test( macro , '-717897987691852588770249' , '-1073741824' , '668594602208447' , '-278782921' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' , '417440429124' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' , '-51258661506607' ) ; +test( macro , '717897987691852588770249' , '717897987691852588770249' , '1' , '0' ) ; +test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1' , '0' ) ; +test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-1' , '0' ) ; +test( macro , '-717897987691852588770249' , '-717897987691852588770249' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/divmodn.js b/test/src/integer/arithmetic/divmodn.js new file mode 100644 index 0000000..fed6787 --- /dev/null +++ b/test/src/integer/arithmetic/divmodn.js @@ -0,0 +1,853 @@ +import test from 'ava' ; +import { parse , stringify , divmodn } from '../../../../src' ; + +function macro ( t , A , B , C , D ) { + const a = parse( A ) ; + const [c, d] = divmodn( a , B ) ; + t.is( stringify( a ) , A ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +} + +macro.title = ( _ , A , B , C , D ) => `divmodn(${A},${B}) = [${C},${D}]` ; + +test( macro , '1' , 1 , '1' , '0' ) ; +test( macro , '-1' , 1 , '-1' , '0' ) ; +test( macro , '1' , -1 , '-1' , '0' ) ; +test( macro , '-1' , -1 , '1' , '0' ) ; +test( macro , '1' , 3 , '0' , '1' ) ; +test( macro , '-1' , 3 , '-1' , '2' ) ; +test( macro , '1' , -3 , '-1' , '-2' ) ; +test( macro , '-1' , -3 , '0' , '-1' ) ; +test( macro , '1' , 7 , '0' , '1' ) ; +test( macro , '-1' , 7 , '-1' , '6' ) ; +test( macro , '1' , -7 , '-1' , '-6' ) ; +test( macro , '-1' , -7 , '0' , '-1' ) ; +test( macro , '1' , 9 , '0' , '1' ) ; +test( macro , '-1' , 9 , '-1' , '8' ) ; +test( macro , '1' , -9 , '-1' , '-8' ) ; +test( macro , '-1' , -9 , '0' , '-1' ) ; +test( macro , '1' , 11 , '0' , '1' ) ; +test( macro , '-1' , 11 , '-1' , '10' ) ; +test( macro , '1' , -11 , '-1' , '-10' ) ; +test( macro , '-1' , -11 , '0' , '-1' ) ; +test( macro , '1' , 17 , '0' , '1' ) ; +test( macro , '-1' , 17 , '-1' , '16' ) ; +test( macro , '1' , -17 , '-1' , '-16' ) ; +test( macro , '-1' , -17 , '0' , '-1' ) ; +test( macro , '1' , 22 , '0' , '1' ) ; +test( macro , '-1' , 22 , '-1' , '21' ) ; +test( macro , '1' , -22 , '-1' , '-21' ) ; +test( macro , '-1' , -22 , '0' , '-1' ) ; +test( macro , '1' , 24 , '0' , '1' ) ; +test( macro , '-1' , 24 , '-1' , '23' ) ; +test( macro , '1' , -24 , '-1' , '-23' ) ; +test( macro , '-1' , -24 , '0' , '-1' ) ; +test( macro , '1' , 27 , '0' , '1' ) ; +test( macro , '-1' , 27 , '-1' , '26' ) ; +test( macro , '1' , -27 , '-1' , '-26' ) ; +test( macro , '-1' , -27 , '0' , '-1' ) ; +test( macro , '1' , 29 , '0' , '1' ) ; +test( macro , '-1' , 29 , '-1' , '28' ) ; +test( macro , '1' , -29 , '-1' , '-28' ) ; +test( macro , '-1' , -29 , '0' , '-1' ) ; +test( macro , '1' , 1234 , '0' , '1' ) ; +test( macro , '-1' , 1234 , '-1' , '1233' ) ; +test( macro , '1' , -1234 , '-1' , '-1233' ) ; +test( macro , '-1' , -1234 , '0' , '-1' ) ; +test( macro , '1' , 5678 , '0' , '1' ) ; +test( macro , '-1' , 5678 , '-1' , '5677' ) ; +test( macro , '1' , -5678 , '-1' , '-5677' ) ; +test( macro , '-1' , -5678 , '0' , '-1' ) ; +test( macro , '1' , 1073741824 , '0' , '1' ) ; +test( macro , '-1' , 1073741824 , '-1' , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1' , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '0' , '-1' ) ; +test( macro , '1' , 51676101935731 , '0' , '1' ) ; +test( macro , '-1' , 51676101935731 , '-1' , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-1' , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '0' , '-1' ) ; +test( macro , '3' , 1 , '3' , '0' ) ; +test( macro , '-3' , 1 , '-3' , '0' ) ; +test( macro , '3' , -1 , '-3' , '0' ) ; +test( macro , '-3' , -1 , '3' , '0' ) ; +test( macro , '3' , 3 , '1' , '0' ) ; +test( macro , '-3' , 3 , '-1' , '0' ) ; +test( macro , '3' , -3 , '-1' , '0' ) ; +test( macro , '-3' , -3 , '1' , '0' ) ; +test( macro , '3' , 7 , '0' , '3' ) ; +test( macro , '-3' , 7 , '-1' , '4' ) ; +test( macro , '3' , -7 , '-1' , '-4' ) ; +test( macro , '-3' , -7 , '0' , '-3' ) ; +test( macro , '3' , 9 , '0' , '3' ) ; +test( macro , '-3' , 9 , '-1' , '6' ) ; +test( macro , '3' , -9 , '-1' , '-6' ) ; +test( macro , '-3' , -9 , '0' , '-3' ) ; +test( macro , '3' , 11 , '0' , '3' ) ; +test( macro , '-3' , 11 , '-1' , '8' ) ; +test( macro , '3' , -11 , '-1' , '-8' ) ; +test( macro , '-3' , -11 , '0' , '-3' ) ; +test( macro , '3' , 17 , '0' , '3' ) ; +test( macro , '-3' , 17 , '-1' , '14' ) ; +test( macro , '3' , -17 , '-1' , '-14' ) ; +test( macro , '-3' , -17 , '0' , '-3' ) ; +test( macro , '3' , 22 , '0' , '3' ) ; +test( macro , '-3' , 22 , '-1' , '19' ) ; +test( macro , '3' , -22 , '-1' , '-19' ) ; +test( macro , '-3' , -22 , '0' , '-3' ) ; +test( macro , '3' , 24 , '0' , '3' ) ; +test( macro , '-3' , 24 , '-1' , '21' ) ; +test( macro , '3' , -24 , '-1' , '-21' ) ; +test( macro , '-3' , -24 , '0' , '-3' ) ; +test( macro , '3' , 27 , '0' , '3' ) ; +test( macro , '-3' , 27 , '-1' , '24' ) ; +test( macro , '3' , -27 , '-1' , '-24' ) ; +test( macro , '-3' , -27 , '0' , '-3' ) ; +test( macro , '3' , 29 , '0' , '3' ) ; +test( macro , '-3' , 29 , '-1' , '26' ) ; +test( macro , '3' , -29 , '-1' , '-26' ) ; +test( macro , '-3' , -29 , '0' , '-3' ) ; +test( macro , '3' , 1234 , '0' , '3' ) ; +test( macro , '-3' , 1234 , '-1' , '1231' ) ; +test( macro , '3' , -1234 , '-1' , '-1231' ) ; +test( macro , '-3' , -1234 , '0' , '-3' ) ; +test( macro , '3' , 5678 , '0' , '3' ) ; +test( macro , '-3' , 5678 , '-1' , '5675' ) ; +test( macro , '3' , -5678 , '-1' , '-5675' ) ; +test( macro , '-3' , -5678 , '0' , '-3' ) ; +test( macro , '3' , 1073741824 , '0' , '3' ) ; +test( macro , '-3' , 1073741824 , '-1' , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1' , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '0' , '-3' ) ; +test( macro , '3' , 51676101935731 , '0' , '3' ) ; +test( macro , '-3' , 51676101935731 , '-1' , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-1' , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '0' , '-3' ) ; +test( macro , '7' , 1 , '7' , '0' ) ; +test( macro , '-7' , 1 , '-7' , '0' ) ; +test( macro , '7' , -1 , '-7' , '0' ) ; +test( macro , '-7' , -1 , '7' , '0' ) ; +test( macro , '7' , 3 , '2' , '1' ) ; +test( macro , '-7' , 3 , '-3' , '2' ) ; +test( macro , '7' , -3 , '-3' , '-2' ) ; +test( macro , '-7' , -3 , '2' , '-1' ) ; +test( macro , '7' , 7 , '1' , '0' ) ; +test( macro , '-7' , 7 , '-1' , '0' ) ; +test( macro , '7' , -7 , '-1' , '0' ) ; +test( macro , '-7' , -7 , '1' , '0' ) ; +test( macro , '7' , 9 , '0' , '7' ) ; +test( macro , '-7' , 9 , '-1' , '2' ) ; +test( macro , '7' , -9 , '-1' , '-2' ) ; +test( macro , '-7' , -9 , '0' , '-7' ) ; +test( macro , '7' , 11 , '0' , '7' ) ; +test( macro , '-7' , 11 , '-1' , '4' ) ; +test( macro , '7' , -11 , '-1' , '-4' ) ; +test( macro , '-7' , -11 , '0' , '-7' ) ; +test( macro , '7' , 17 , '0' , '7' ) ; +test( macro , '-7' , 17 , '-1' , '10' ) ; +test( macro , '7' , -17 , '-1' , '-10' ) ; +test( macro , '-7' , -17 , '0' , '-7' ) ; +test( macro , '7' , 22 , '0' , '7' ) ; +test( macro , '-7' , 22 , '-1' , '15' ) ; +test( macro , '7' , -22 , '-1' , '-15' ) ; +test( macro , '-7' , -22 , '0' , '-7' ) ; +test( macro , '7' , 24 , '0' , '7' ) ; +test( macro , '-7' , 24 , '-1' , '17' ) ; +test( macro , '7' , -24 , '-1' , '-17' ) ; +test( macro , '-7' , -24 , '0' , '-7' ) ; +test( macro , '7' , 27 , '0' , '7' ) ; +test( macro , '-7' , 27 , '-1' , '20' ) ; +test( macro , '7' , -27 , '-1' , '-20' ) ; +test( macro , '-7' , -27 , '0' , '-7' ) ; +test( macro , '7' , 29 , '0' , '7' ) ; +test( macro , '-7' , 29 , '-1' , '22' ) ; +test( macro , '7' , -29 , '-1' , '-22' ) ; +test( macro , '-7' , -29 , '0' , '-7' ) ; +test( macro , '7' , 1234 , '0' , '7' ) ; +test( macro , '-7' , 1234 , '-1' , '1227' ) ; +test( macro , '7' , -1234 , '-1' , '-1227' ) ; +test( macro , '-7' , -1234 , '0' , '-7' ) ; +test( macro , '7' , 5678 , '0' , '7' ) ; +test( macro , '-7' , 5678 , '-1' , '5671' ) ; +test( macro , '7' , -5678 , '-1' , '-5671' ) ; +test( macro , '-7' , -5678 , '0' , '-7' ) ; +test( macro , '7' , 1073741824 , '0' , '7' ) ; +test( macro , '-7' , 1073741824 , '-1' , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1' , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '0' , '-7' ) ; +test( macro , '7' , 51676101935731 , '0' , '7' ) ; +test( macro , '-7' , 51676101935731 , '-1' , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-1' , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '0' , '-7' ) ; +test( macro , '9' , 1 , '9' , '0' ) ; +test( macro , '-9' , 1 , '-9' , '0' ) ; +test( macro , '9' , -1 , '-9' , '0' ) ; +test( macro , '-9' , -1 , '9' , '0' ) ; +test( macro , '9' , 3 , '3' , '0' ) ; +test( macro , '-9' , 3 , '-3' , '0' ) ; +test( macro , '9' , -3 , '-3' , '0' ) ; +test( macro , '-9' , -3 , '3' , '0' ) ; +test( macro , '9' , 7 , '1' , '2' ) ; +test( macro , '-9' , 7 , '-2' , '5' ) ; +test( macro , '9' , -7 , '-2' , '-5' ) ; +test( macro , '-9' , -7 , '1' , '-2' ) ; +test( macro , '9' , 9 , '1' , '0' ) ; +test( macro , '-9' , 9 , '-1' , '0' ) ; +test( macro , '9' , -9 , '-1' , '0' ) ; +test( macro , '-9' , -9 , '1' , '0' ) ; +test( macro , '9' , 11 , '0' , '9' ) ; +test( macro , '-9' , 11 , '-1' , '2' ) ; +test( macro , '9' , -11 , '-1' , '-2' ) ; +test( macro , '-9' , -11 , '0' , '-9' ) ; +test( macro , '9' , 17 , '0' , '9' ) ; +test( macro , '-9' , 17 , '-1' , '8' ) ; +test( macro , '9' , -17 , '-1' , '-8' ) ; +test( macro , '-9' , -17 , '0' , '-9' ) ; +test( macro , '9' , 22 , '0' , '9' ) ; +test( macro , '-9' , 22 , '-1' , '13' ) ; +test( macro , '9' , -22 , '-1' , '-13' ) ; +test( macro , '-9' , -22 , '0' , '-9' ) ; +test( macro , '9' , 24 , '0' , '9' ) ; +test( macro , '-9' , 24 , '-1' , '15' ) ; +test( macro , '9' , -24 , '-1' , '-15' ) ; +test( macro , '-9' , -24 , '0' , '-9' ) ; +test( macro , '9' , 27 , '0' , '9' ) ; +test( macro , '-9' , 27 , '-1' , '18' ) ; +test( macro , '9' , -27 , '-1' , '-18' ) ; +test( macro , '-9' , -27 , '0' , '-9' ) ; +test( macro , '9' , 29 , '0' , '9' ) ; +test( macro , '-9' , 29 , '-1' , '20' ) ; +test( macro , '9' , -29 , '-1' , '-20' ) ; +test( macro , '-9' , -29 , '0' , '-9' ) ; +test( macro , '9' , 1234 , '0' , '9' ) ; +test( macro , '-9' , 1234 , '-1' , '1225' ) ; +test( macro , '9' , -1234 , '-1' , '-1225' ) ; +test( macro , '-9' , -1234 , '0' , '-9' ) ; +test( macro , '9' , 5678 , '0' , '9' ) ; +test( macro , '-9' , 5678 , '-1' , '5669' ) ; +test( macro , '9' , -5678 , '-1' , '-5669' ) ; +test( macro , '-9' , -5678 , '0' , '-9' ) ; +test( macro , '9' , 1073741824 , '0' , '9' ) ; +test( macro , '-9' , 1073741824 , '-1' , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1' , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '0' , '-9' ) ; +test( macro , '9' , 51676101935731 , '0' , '9' ) ; +test( macro , '-9' , 51676101935731 , '-1' , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-1' , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '0' , '-9' ) ; +test( macro , '11' , 1 , '11' , '0' ) ; +test( macro , '-11' , 1 , '-11' , '0' ) ; +test( macro , '11' , -1 , '-11' , '0' ) ; +test( macro , '-11' , -1 , '11' , '0' ) ; +test( macro , '11' , 3 , '3' , '2' ) ; +test( macro , '-11' , 3 , '-4' , '1' ) ; +test( macro , '11' , -3 , '-4' , '-1' ) ; +test( macro , '-11' , -3 , '3' , '-2' ) ; +test( macro , '11' , 7 , '1' , '4' ) ; +test( macro , '-11' , 7 , '-2' , '3' ) ; +test( macro , '11' , -7 , '-2' , '-3' ) ; +test( macro , '-11' , -7 , '1' , '-4' ) ; +test( macro , '11' , 9 , '1' , '2' ) ; +test( macro , '-11' , 9 , '-2' , '7' ) ; +test( macro , '11' , -9 , '-2' , '-7' ) ; +test( macro , '-11' , -9 , '1' , '-2' ) ; +test( macro , '11' , 11 , '1' , '0' ) ; +test( macro , '-11' , 11 , '-1' , '0' ) ; +test( macro , '11' , -11 , '-1' , '0' ) ; +test( macro , '-11' , -11 , '1' , '0' ) ; +test( macro , '11' , 17 , '0' , '11' ) ; +test( macro , '-11' , 17 , '-1' , '6' ) ; +test( macro , '11' , -17 , '-1' , '-6' ) ; +test( macro , '-11' , -17 , '0' , '-11' ) ; +test( macro , '11' , 22 , '0' , '11' ) ; +test( macro , '-11' , 22 , '-1' , '11' ) ; +test( macro , '11' , -22 , '-1' , '-11' ) ; +test( macro , '-11' , -22 , '0' , '-11' ) ; +test( macro , '11' , 24 , '0' , '11' ) ; +test( macro , '-11' , 24 , '-1' , '13' ) ; +test( macro , '11' , -24 , '-1' , '-13' ) ; +test( macro , '-11' , -24 , '0' , '-11' ) ; +test( macro , '11' , 27 , '0' , '11' ) ; +test( macro , '-11' , 27 , '-1' , '16' ) ; +test( macro , '11' , -27 , '-1' , '-16' ) ; +test( macro , '-11' , -27 , '0' , '-11' ) ; +test( macro , '11' , 29 , '0' , '11' ) ; +test( macro , '-11' , 29 , '-1' , '18' ) ; +test( macro , '11' , -29 , '-1' , '-18' ) ; +test( macro , '-11' , -29 , '0' , '-11' ) ; +test( macro , '11' , 1234 , '0' , '11' ) ; +test( macro , '-11' , 1234 , '-1' , '1223' ) ; +test( macro , '11' , -1234 , '-1' , '-1223' ) ; +test( macro , '-11' , -1234 , '0' , '-11' ) ; +test( macro , '11' , 5678 , '0' , '11' ) ; +test( macro , '-11' , 5678 , '-1' , '5667' ) ; +test( macro , '11' , -5678 , '-1' , '-5667' ) ; +test( macro , '-11' , -5678 , '0' , '-11' ) ; +test( macro , '11' , 1073741824 , '0' , '11' ) ; +test( macro , '-11' , 1073741824 , '-1' , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1' , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '0' , '-11' ) ; +test( macro , '11' , 51676101935731 , '0' , '11' ) ; +test( macro , '-11' , 51676101935731 , '-1' , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-1' , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '0' , '-11' ) ; +test( macro , '17' , 1 , '17' , '0' ) ; +test( macro , '-17' , 1 , '-17' , '0' ) ; +test( macro , '17' , -1 , '-17' , '0' ) ; +test( macro , '-17' , -1 , '17' , '0' ) ; +test( macro , '17' , 3 , '5' , '2' ) ; +test( macro , '-17' , 3 , '-6' , '1' ) ; +test( macro , '17' , -3 , '-6' , '-1' ) ; +test( macro , '-17' , -3 , '5' , '-2' ) ; +test( macro , '17' , 7 , '2' , '3' ) ; +test( macro , '-17' , 7 , '-3' , '4' ) ; +test( macro , '17' , -7 , '-3' , '-4' ) ; +test( macro , '-17' , -7 , '2' , '-3' ) ; +test( macro , '17' , 9 , '1' , '8' ) ; +test( macro , '-17' , 9 , '-2' , '1' ) ; +test( macro , '17' , -9 , '-2' , '-1' ) ; +test( macro , '-17' , -9 , '1' , '-8' ) ; +test( macro , '17' , 11 , '1' , '6' ) ; +test( macro , '-17' , 11 , '-2' , '5' ) ; +test( macro , '17' , -11 , '-2' , '-5' ) ; +test( macro , '-17' , -11 , '1' , '-6' ) ; +test( macro , '17' , 17 , '1' , '0' ) ; +test( macro , '-17' , 17 , '-1' , '0' ) ; +test( macro , '17' , -17 , '-1' , '0' ) ; +test( macro , '-17' , -17 , '1' , '0' ) ; +test( macro , '17' , 22 , '0' , '17' ) ; +test( macro , '-17' , 22 , '-1' , '5' ) ; +test( macro , '17' , -22 , '-1' , '-5' ) ; +test( macro , '-17' , -22 , '0' , '-17' ) ; +test( macro , '17' , 24 , '0' , '17' ) ; +test( macro , '-17' , 24 , '-1' , '7' ) ; +test( macro , '17' , -24 , '-1' , '-7' ) ; +test( macro , '-17' , -24 , '0' , '-17' ) ; +test( macro , '17' , 27 , '0' , '17' ) ; +test( macro , '-17' , 27 , '-1' , '10' ) ; +test( macro , '17' , -27 , '-1' , '-10' ) ; +test( macro , '-17' , -27 , '0' , '-17' ) ; +test( macro , '17' , 29 , '0' , '17' ) ; +test( macro , '-17' , 29 , '-1' , '12' ) ; +test( macro , '17' , -29 , '-1' , '-12' ) ; +test( macro , '-17' , -29 , '0' , '-17' ) ; +test( macro , '17' , 1234 , '0' , '17' ) ; +test( macro , '-17' , 1234 , '-1' , '1217' ) ; +test( macro , '17' , -1234 , '-1' , '-1217' ) ; +test( macro , '-17' , -1234 , '0' , '-17' ) ; +test( macro , '17' , 5678 , '0' , '17' ) ; +test( macro , '-17' , 5678 , '-1' , '5661' ) ; +test( macro , '17' , -5678 , '-1' , '-5661' ) ; +test( macro , '-17' , -5678 , '0' , '-17' ) ; +test( macro , '17' , 1073741824 , '0' , '17' ) ; +test( macro , '-17' , 1073741824 , '-1' , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1' , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '0' , '-17' ) ; +test( macro , '17' , 51676101935731 , '0' , '17' ) ; +test( macro , '-17' , 51676101935731 , '-1' , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-1' , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '0' , '-17' ) ; +test( macro , '22' , 1 , '22' , '0' ) ; +test( macro , '-22' , 1 , '-22' , '0' ) ; +test( macro , '22' , -1 , '-22' , '0' ) ; +test( macro , '-22' , -1 , '22' , '0' ) ; +test( macro , '22' , 3 , '7' , '1' ) ; +test( macro , '-22' , 3 , '-8' , '2' ) ; +test( macro , '22' , -3 , '-8' , '-2' ) ; +test( macro , '-22' , -3 , '7' , '-1' ) ; +test( macro , '22' , 7 , '3' , '1' ) ; +test( macro , '-22' , 7 , '-4' , '6' ) ; +test( macro , '22' , -7 , '-4' , '-6' ) ; +test( macro , '-22' , -7 , '3' , '-1' ) ; +test( macro , '22' , 9 , '2' , '4' ) ; +test( macro , '-22' , 9 , '-3' , '5' ) ; +test( macro , '22' , -9 , '-3' , '-5' ) ; +test( macro , '-22' , -9 , '2' , '-4' ) ; +test( macro , '22' , 11 , '2' , '0' ) ; +test( macro , '-22' , 11 , '-2' , '0' ) ; +test( macro , '22' , -11 , '-2' , '0' ) ; +test( macro , '-22' , -11 , '2' , '0' ) ; +test( macro , '22' , 17 , '1' , '5' ) ; +test( macro , '-22' , 17 , '-2' , '12' ) ; +test( macro , '22' , -17 , '-2' , '-12' ) ; +test( macro , '-22' , -17 , '1' , '-5' ) ; +test( macro , '22' , 22 , '1' , '0' ) ; +test( macro , '-22' , 22 , '-1' , '0' ) ; +test( macro , '22' , -22 , '-1' , '0' ) ; +test( macro , '-22' , -22 , '1' , '0' ) ; +test( macro , '22' , 24 , '0' , '22' ) ; +test( macro , '-22' , 24 , '-1' , '2' ) ; +test( macro , '22' , -24 , '-1' , '-2' ) ; +test( macro , '-22' , -24 , '0' , '-22' ) ; +test( macro , '22' , 27 , '0' , '22' ) ; +test( macro , '-22' , 27 , '-1' , '5' ) ; +test( macro , '22' , -27 , '-1' , '-5' ) ; +test( macro , '-22' , -27 , '0' , '-22' ) ; +test( macro , '22' , 29 , '0' , '22' ) ; +test( macro , '-22' , 29 , '-1' , '7' ) ; +test( macro , '22' , -29 , '-1' , '-7' ) ; +test( macro , '-22' , -29 , '0' , '-22' ) ; +test( macro , '22' , 1234 , '0' , '22' ) ; +test( macro , '-22' , 1234 , '-1' , '1212' ) ; +test( macro , '22' , -1234 , '-1' , '-1212' ) ; +test( macro , '-22' , -1234 , '0' , '-22' ) ; +test( macro , '22' , 5678 , '0' , '22' ) ; +test( macro , '-22' , 5678 , '-1' , '5656' ) ; +test( macro , '22' , -5678 , '-1' , '-5656' ) ; +test( macro , '-22' , -5678 , '0' , '-22' ) ; +test( macro , '22' , 1073741824 , '0' , '22' ) ; +test( macro , '-22' , 1073741824 , '-1' , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1' , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '0' , '-22' ) ; +test( macro , '22' , 51676101935731 , '0' , '22' ) ; +test( macro , '-22' , 51676101935731 , '-1' , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-1' , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '0' , '-22' ) ; +test( macro , '24' , 1 , '24' , '0' ) ; +test( macro , '-24' , 1 , '-24' , '0' ) ; +test( macro , '24' , -1 , '-24' , '0' ) ; +test( macro , '-24' , -1 , '24' , '0' ) ; +test( macro , '24' , 3 , '8' , '0' ) ; +test( macro , '-24' , 3 , '-8' , '0' ) ; +test( macro , '24' , -3 , '-8' , '0' ) ; +test( macro , '-24' , -3 , '8' , '0' ) ; +test( macro , '24' , 7 , '3' , '3' ) ; +test( macro , '-24' , 7 , '-4' , '4' ) ; +test( macro , '24' , -7 , '-4' , '-4' ) ; +test( macro , '-24' , -7 , '3' , '-3' ) ; +test( macro , '24' , 9 , '2' , '6' ) ; +test( macro , '-24' , 9 , '-3' , '3' ) ; +test( macro , '24' , -9 , '-3' , '-3' ) ; +test( macro , '-24' , -9 , '2' , '-6' ) ; +test( macro , '24' , 11 , '2' , '2' ) ; +test( macro , '-24' , 11 , '-3' , '9' ) ; +test( macro , '24' , -11 , '-3' , '-9' ) ; +test( macro , '-24' , -11 , '2' , '-2' ) ; +test( macro , '24' , 17 , '1' , '7' ) ; +test( macro , '-24' , 17 , '-2' , '10' ) ; +test( macro , '24' , -17 , '-2' , '-10' ) ; +test( macro , '-24' , -17 , '1' , '-7' ) ; +test( macro , '24' , 22 , '1' , '2' ) ; +test( macro , '-24' , 22 , '-2' , '20' ) ; +test( macro , '24' , -22 , '-2' , '-20' ) ; +test( macro , '-24' , -22 , '1' , '-2' ) ; +test( macro , '24' , 24 , '1' , '0' ) ; +test( macro , '-24' , 24 , '-1' , '0' ) ; +test( macro , '24' , -24 , '-1' , '0' ) ; +test( macro , '-24' , -24 , '1' , '0' ) ; +test( macro , '24' , 27 , '0' , '24' ) ; +test( macro , '-24' , 27 , '-1' , '3' ) ; +test( macro , '24' , -27 , '-1' , '-3' ) ; +test( macro , '-24' , -27 , '0' , '-24' ) ; +test( macro , '24' , 29 , '0' , '24' ) ; +test( macro , '-24' , 29 , '-1' , '5' ) ; +test( macro , '24' , -29 , '-1' , '-5' ) ; +test( macro , '-24' , -29 , '0' , '-24' ) ; +test( macro , '24' , 1234 , '0' , '24' ) ; +test( macro , '-24' , 1234 , '-1' , '1210' ) ; +test( macro , '24' , -1234 , '-1' , '-1210' ) ; +test( macro , '-24' , -1234 , '0' , '-24' ) ; +test( macro , '24' , 5678 , '0' , '24' ) ; +test( macro , '-24' , 5678 , '-1' , '5654' ) ; +test( macro , '24' , -5678 , '-1' , '-5654' ) ; +test( macro , '-24' , -5678 , '0' , '-24' ) ; +test( macro , '24' , 1073741824 , '0' , '24' ) ; +test( macro , '-24' , 1073741824 , '-1' , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1' , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '0' , '-24' ) ; +test( macro , '24' , 51676101935731 , '0' , '24' ) ; +test( macro , '-24' , 51676101935731 , '-1' , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-1' , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '0' , '-24' ) ; +test( macro , '27' , 1 , '27' , '0' ) ; +test( macro , '-27' , 1 , '-27' , '0' ) ; +test( macro , '27' , -1 , '-27' , '0' ) ; +test( macro , '-27' , -1 , '27' , '0' ) ; +test( macro , '27' , 3 , '9' , '0' ) ; +test( macro , '-27' , 3 , '-9' , '0' ) ; +test( macro , '27' , -3 , '-9' , '0' ) ; +test( macro , '-27' , -3 , '9' , '0' ) ; +test( macro , '27' , 7 , '3' , '6' ) ; +test( macro , '-27' , 7 , '-4' , '1' ) ; +test( macro , '27' , -7 , '-4' , '-1' ) ; +test( macro , '-27' , -7 , '3' , '-6' ) ; +test( macro , '27' , 9 , '3' , '0' ) ; +test( macro , '-27' , 9 , '-3' , '0' ) ; +test( macro , '27' , -9 , '-3' , '0' ) ; +test( macro , '-27' , -9 , '3' , '0' ) ; +test( macro , '27' , 11 , '2' , '5' ) ; +test( macro , '-27' , 11 , '-3' , '6' ) ; +test( macro , '27' , -11 , '-3' , '-6' ) ; +test( macro , '-27' , -11 , '2' , '-5' ) ; +test( macro , '27' , 17 , '1' , '10' ) ; +test( macro , '-27' , 17 , '-2' , '7' ) ; +test( macro , '27' , -17 , '-2' , '-7' ) ; +test( macro , '-27' , -17 , '1' , '-10' ) ; +test( macro , '27' , 22 , '1' , '5' ) ; +test( macro , '-27' , 22 , '-2' , '17' ) ; +test( macro , '27' , -22 , '-2' , '-17' ) ; +test( macro , '-27' , -22 , '1' , '-5' ) ; +test( macro , '27' , 24 , '1' , '3' ) ; +test( macro , '-27' , 24 , '-2' , '21' ) ; +test( macro , '27' , -24 , '-2' , '-21' ) ; +test( macro , '-27' , -24 , '1' , '-3' ) ; +test( macro , '27' , 27 , '1' , '0' ) ; +test( macro , '-27' , 27 , '-1' , '0' ) ; +test( macro , '27' , -27 , '-1' , '0' ) ; +test( macro , '-27' , -27 , '1' , '0' ) ; +test( macro , '27' , 29 , '0' , '27' ) ; +test( macro , '-27' , 29 , '-1' , '2' ) ; +test( macro , '27' , -29 , '-1' , '-2' ) ; +test( macro , '-27' , -29 , '0' , '-27' ) ; +test( macro , '27' , 1234 , '0' , '27' ) ; +test( macro , '-27' , 1234 , '-1' , '1207' ) ; +test( macro , '27' , -1234 , '-1' , '-1207' ) ; +test( macro , '-27' , -1234 , '0' , '-27' ) ; +test( macro , '27' , 5678 , '0' , '27' ) ; +test( macro , '-27' , 5678 , '-1' , '5651' ) ; +test( macro , '27' , -5678 , '-1' , '-5651' ) ; +test( macro , '-27' , -5678 , '0' , '-27' ) ; +test( macro , '27' , 1073741824 , '0' , '27' ) ; +test( macro , '-27' , 1073741824 , '-1' , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1' , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '0' , '-27' ) ; +test( macro , '27' , 51676101935731 , '0' , '27' ) ; +test( macro , '-27' , 51676101935731 , '-1' , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-1' , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '0' , '-27' ) ; +test( macro , '29' , 1 , '29' , '0' ) ; +test( macro , '-29' , 1 , '-29' , '0' ) ; +test( macro , '29' , -1 , '-29' , '0' ) ; +test( macro , '-29' , -1 , '29' , '0' ) ; +test( macro , '29' , 3 , '9' , '2' ) ; +test( macro , '-29' , 3 , '-10' , '1' ) ; +test( macro , '29' , -3 , '-10' , '-1' ) ; +test( macro , '-29' , -3 , '9' , '-2' ) ; +test( macro , '29' , 7 , '4' , '1' ) ; +test( macro , '-29' , 7 , '-5' , '6' ) ; +test( macro , '29' , -7 , '-5' , '-6' ) ; +test( macro , '-29' , -7 , '4' , '-1' ) ; +test( macro , '29' , 9 , '3' , '2' ) ; +test( macro , '-29' , 9 , '-4' , '7' ) ; +test( macro , '29' , -9 , '-4' , '-7' ) ; +test( macro , '-29' , -9 , '3' , '-2' ) ; +test( macro , '29' , 11 , '2' , '7' ) ; +test( macro , '-29' , 11 , '-3' , '4' ) ; +test( macro , '29' , -11 , '-3' , '-4' ) ; +test( macro , '-29' , -11 , '2' , '-7' ) ; +test( macro , '29' , 17 , '1' , '12' ) ; +test( macro , '-29' , 17 , '-2' , '5' ) ; +test( macro , '29' , -17 , '-2' , '-5' ) ; +test( macro , '-29' , -17 , '1' , '-12' ) ; +test( macro , '29' , 22 , '1' , '7' ) ; +test( macro , '-29' , 22 , '-2' , '15' ) ; +test( macro , '29' , -22 , '-2' , '-15' ) ; +test( macro , '-29' , -22 , '1' , '-7' ) ; +test( macro , '29' , 24 , '1' , '5' ) ; +test( macro , '-29' , 24 , '-2' , '19' ) ; +test( macro , '29' , -24 , '-2' , '-19' ) ; +test( macro , '-29' , -24 , '1' , '-5' ) ; +test( macro , '29' , 27 , '1' , '2' ) ; +test( macro , '-29' , 27 , '-2' , '25' ) ; +test( macro , '29' , -27 , '-2' , '-25' ) ; +test( macro , '-29' , -27 , '1' , '-2' ) ; +test( macro , '29' , 29 , '1' , '0' ) ; +test( macro , '-29' , 29 , '-1' , '0' ) ; +test( macro , '29' , -29 , '-1' , '0' ) ; +test( macro , '-29' , -29 , '1' , '0' ) ; +test( macro , '29' , 1234 , '0' , '29' ) ; +test( macro , '-29' , 1234 , '-1' , '1205' ) ; +test( macro , '29' , -1234 , '-1' , '-1205' ) ; +test( macro , '-29' , -1234 , '0' , '-29' ) ; +test( macro , '29' , 5678 , '0' , '29' ) ; +test( macro , '-29' , 5678 , '-1' , '5649' ) ; +test( macro , '29' , -5678 , '-1' , '-5649' ) ; +test( macro , '-29' , -5678 , '0' , '-29' ) ; +test( macro , '29' , 1073741824 , '0' , '29' ) ; +test( macro , '-29' , 1073741824 , '-1' , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1' , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '0' , '-29' ) ; +test( macro , '29' , 51676101935731 , '0' , '29' ) ; +test( macro , '-29' , 51676101935731 , '-1' , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-1' , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '0' , '-29' ) ; +test( macro , '1234' , 1 , '1234' , '0' ) ; +test( macro , '-1234' , 1 , '-1234' , '0' ) ; +test( macro , '1234' , -1 , '-1234' , '0' ) ; +test( macro , '-1234' , -1 , '1234' , '0' ) ; +test( macro , '1234' , 3 , '411' , '1' ) ; +test( macro , '-1234' , 3 , '-412' , '2' ) ; +test( macro , '1234' , -3 , '-412' , '-2' ) ; +test( macro , '-1234' , -3 , '411' , '-1' ) ; +test( macro , '1234' , 7 , '176' , '2' ) ; +test( macro , '-1234' , 7 , '-177' , '5' ) ; +test( macro , '1234' , -7 , '-177' , '-5' ) ; +test( macro , '-1234' , -7 , '176' , '-2' ) ; +test( macro , '1234' , 9 , '137' , '1' ) ; +test( macro , '-1234' , 9 , '-138' , '8' ) ; +test( macro , '1234' , -9 , '-138' , '-8' ) ; +test( macro , '-1234' , -9 , '137' , '-1' ) ; +test( macro , '1234' , 11 , '112' , '2' ) ; +test( macro , '-1234' , 11 , '-113' , '9' ) ; +test( macro , '1234' , -11 , '-113' , '-9' ) ; +test( macro , '-1234' , -11 , '112' , '-2' ) ; +test( macro , '1234' , 17 , '72' , '10' ) ; +test( macro , '-1234' , 17 , '-73' , '7' ) ; +test( macro , '1234' , -17 , '-73' , '-7' ) ; +test( macro , '-1234' , -17 , '72' , '-10' ) ; +test( macro , '1234' , 22 , '56' , '2' ) ; +test( macro , '-1234' , 22 , '-57' , '20' ) ; +test( macro , '1234' , -22 , '-57' , '-20' ) ; +test( macro , '-1234' , -22 , '56' , '-2' ) ; +test( macro , '1234' , 24 , '51' , '10' ) ; +test( macro , '-1234' , 24 , '-52' , '14' ) ; +test( macro , '1234' , -24 , '-52' , '-14' ) ; +test( macro , '-1234' , -24 , '51' , '-10' ) ; +test( macro , '1234' , 27 , '45' , '19' ) ; +test( macro , '-1234' , 27 , '-46' , '8' ) ; +test( macro , '1234' , -27 , '-46' , '-8' ) ; +test( macro , '-1234' , -27 , '45' , '-19' ) ; +test( macro , '1234' , 29 , '42' , '16' ) ; +test( macro , '-1234' , 29 , '-43' , '13' ) ; +test( macro , '1234' , -29 , '-43' , '-13' ) ; +test( macro , '-1234' , -29 , '42' , '-16' ) ; +test( macro , '1234' , 1234 , '1' , '0' ) ; +test( macro , '-1234' , 1234 , '-1' , '0' ) ; +test( macro , '1234' , -1234 , '-1' , '0' ) ; +test( macro , '-1234' , -1234 , '1' , '0' ) ; +test( macro , '1234' , 5678 , '0' , '1234' ) ; +test( macro , '-1234' , 5678 , '-1' , '4444' ) ; +test( macro , '1234' , -5678 , '-1' , '-4444' ) ; +test( macro , '-1234' , -5678 , '0' , '-1234' ) ; +test( macro , '1234' , 1073741824 , '0' , '1234' ) ; +test( macro , '-1234' , 1073741824 , '-1' , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1' , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '0' , '-1234' ) ; +test( macro , '1234' , 51676101935731 , '0' , '1234' ) ; +test( macro , '-1234' , 51676101935731 , '-1' , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-1' , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '0' , '-1234' ) ; +test( macro , '5678' , 1 , '5678' , '0' ) ; +test( macro , '-5678' , 1 , '-5678' , '0' ) ; +test( macro , '5678' , -1 , '-5678' , '0' ) ; +test( macro , '-5678' , -1 , '5678' , '0' ) ; +test( macro , '5678' , 3 , '1892' , '2' ) ; +test( macro , '-5678' , 3 , '-1893' , '1' ) ; +test( macro , '5678' , -3 , '-1893' , '-1' ) ; +test( macro , '-5678' , -3 , '1892' , '-2' ) ; +test( macro , '5678' , 7 , '811' , '1' ) ; +test( macro , '-5678' , 7 , '-812' , '6' ) ; +test( macro , '5678' , -7 , '-812' , '-6' ) ; +test( macro , '-5678' , -7 , '811' , '-1' ) ; +test( macro , '5678' , 9 , '630' , '8' ) ; +test( macro , '-5678' , 9 , '-631' , '1' ) ; +test( macro , '5678' , -9 , '-631' , '-1' ) ; +test( macro , '-5678' , -9 , '630' , '-8' ) ; +test( macro , '5678' , 11 , '516' , '2' ) ; +test( macro , '-5678' , 11 , '-517' , '9' ) ; +test( macro , '5678' , -11 , '-517' , '-9' ) ; +test( macro , '-5678' , -11 , '516' , '-2' ) ; +test( macro , '5678' , 17 , '334' , '0' ) ; +test( macro , '-5678' , 17 , '-334' , '0' ) ; +test( macro , '5678' , -17 , '-334' , '0' ) ; +test( macro , '-5678' , -17 , '334' , '0' ) ; +test( macro , '5678' , 22 , '258' , '2' ) ; +test( macro , '-5678' , 22 , '-259' , '20' ) ; +test( macro , '5678' , -22 , '-259' , '-20' ) ; +test( macro , '-5678' , -22 , '258' , '-2' ) ; +test( macro , '5678' , 24 , '236' , '14' ) ; +test( macro , '-5678' , 24 , '-237' , '10' ) ; +test( macro , '5678' , -24 , '-237' , '-10' ) ; +test( macro , '-5678' , -24 , '236' , '-14' ) ; +test( macro , '5678' , 27 , '210' , '8' ) ; +test( macro , '-5678' , 27 , '-211' , '19' ) ; +test( macro , '5678' , -27 , '-211' , '-19' ) ; +test( macro , '-5678' , -27 , '210' , '-8' ) ; +test( macro , '5678' , 29 , '195' , '23' ) ; +test( macro , '-5678' , 29 , '-196' , '6' ) ; +test( macro , '5678' , -29 , '-196' , '-6' ) ; +test( macro , '-5678' , -29 , '195' , '-23' ) ; +test( macro , '5678' , 1234 , '4' , '742' ) ; +test( macro , '-5678' , 1234 , '-5' , '492' ) ; +test( macro , '5678' , -1234 , '-5' , '-492' ) ; +test( macro , '-5678' , -1234 , '4' , '-742' ) ; +test( macro , '5678' , 5678 , '1' , '0' ) ; +test( macro , '-5678' , 5678 , '-1' , '0' ) ; +test( macro , '5678' , -5678 , '-1' , '0' ) ; +test( macro , '-5678' , -5678 , '1' , '0' ) ; +test( macro , '5678' , 1073741824 , '0' , '5678' ) ; +test( macro , '-5678' , 1073741824 , '-1' , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1' , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '0' , '-5678' ) ; +test( macro , '5678' , 51676101935731 , '0' , '5678' ) ; +test( macro , '-5678' , 51676101935731 , '-1' , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-1' , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '0' , '-5678' ) ; +test( macro , '1073741824' , 1 , '1073741824' , '0' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' , '0' ) ; +test( macro , '1073741824' , -1 , '-1073741824' , '0' ) ; +test( macro , '-1073741824' , -1 , '1073741824' , '0' ) ; +test( macro , '1073741824' , 3 , '357913941' , '1' ) ; +test( macro , '-1073741824' , 3 , '-357913942' , '2' ) ; +test( macro , '1073741824' , -3 , '-357913942' , '-2' ) ; +test( macro , '-1073741824' , -3 , '357913941' , '-1' ) ; +test( macro , '1073741824' , 7 , '153391689' , '1' ) ; +test( macro , '-1073741824' , 7 , '-153391690' , '6' ) ; +test( macro , '1073741824' , -7 , '-153391690' , '-6' ) ; +test( macro , '-1073741824' , -7 , '153391689' , '-1' ) ; +test( macro , '1073741824' , 9 , '119304647' , '1' ) ; +test( macro , '-1073741824' , 9 , '-119304648' , '8' ) ; +test( macro , '1073741824' , -9 , '-119304648' , '-8' ) ; +test( macro , '-1073741824' , -9 , '119304647' , '-1' ) ; +test( macro , '1073741824' , 11 , '97612893' , '1' ) ; +test( macro , '-1073741824' , 11 , '-97612894' , '10' ) ; +test( macro , '1073741824' , -11 , '-97612894' , '-10' ) ; +test( macro , '-1073741824' , -11 , '97612893' , '-1' ) ; +test( macro , '1073741824' , 17 , '63161283' , '13' ) ; +test( macro , '-1073741824' , 17 , '-63161284' , '4' ) ; +test( macro , '1073741824' , -17 , '-63161284' , '-4' ) ; +test( macro , '-1073741824' , -17 , '63161283' , '-13' ) ; +test( macro , '1073741824' , 22 , '48806446' , '12' ) ; +test( macro , '-1073741824' , 22 , '-48806447' , '10' ) ; +test( macro , '1073741824' , -22 , '-48806447' , '-10' ) ; +test( macro , '-1073741824' , -22 , '48806446' , '-12' ) ; +test( macro , '1073741824' , 24 , '44739242' , '16' ) ; +test( macro , '-1073741824' , 24 , '-44739243' , '8' ) ; +test( macro , '1073741824' , -24 , '-44739243' , '-8' ) ; +test( macro , '-1073741824' , -24 , '44739242' , '-16' ) ; +test( macro , '1073741824' , 27 , '39768215' , '19' ) ; +test( macro , '-1073741824' , 27 , '-39768216' , '8' ) ; +test( macro , '1073741824' , -27 , '-39768216' , '-8' ) ; +test( macro , '-1073741824' , -27 , '39768215' , '-19' ) ; +test( macro , '1073741824' , 29 , '37025580' , '4' ) ; +test( macro , '-1073741824' , 29 , '-37025581' , '25' ) ; +test( macro , '1073741824' , -29 , '-37025581' , '-25' ) ; +test( macro , '-1073741824' , -29 , '37025580' , '-4' ) ; +test( macro , '1073741824' , 1234 , '870131' , '170' ) ; +test( macro , '-1073741824' , 1234 , '-870132' , '1064' ) ; +test( macro , '1073741824' , -1234 , '-870132' , '-1064' ) ; +test( macro , '-1073741824' , -1234 , '870131' , '-170' ) ; +test( macro , '1073741824' , 5678 , '189105' , '3634' ) ; +test( macro , '-1073741824' , 5678 , '-189106' , '2044' ) ; +test( macro , '1073741824' , -5678 , '-189106' , '-2044' ) ; +test( macro , '-1073741824' , -5678 , '189105' , '-3634' ) ; +test( macro , '1073741824' , 1073741824 , '1' , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '-1' , '0' ) ; +test( macro , '1073741824' , -1073741824 , '-1' , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '1' , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '0' , '1073741824' ) ; +test( macro , '-1073741824' , 51676101935731 , '-1' , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-1' , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '0' , '-1073741824' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , 3 , '17225367311910' , '1' ) ; +test( macro , '-51676101935731' , 3 , '-17225367311911' , '2' ) ; +test( macro , '51676101935731' , -3 , '-17225367311911' , '-2' ) ; +test( macro , '-51676101935731' , -3 , '17225367311910' , '-1' ) ; +test( macro , '51676101935731' , 7 , '7382300276533' , '0' ) ; +test( macro , '-51676101935731' , 7 , '-7382300276533' , '0' ) ; +test( macro , '51676101935731' , -7 , '-7382300276533' , '0' ) ; +test( macro , '-51676101935731' , -7 , '7382300276533' , '0' ) ; +test( macro , '51676101935731' , 9 , '5741789103970' , '1' ) ; +test( macro , '-51676101935731' , 9 , '-5741789103971' , '8' ) ; +test( macro , '51676101935731' , -9 , '-5741789103971' , '-8' ) ; +test( macro , '-51676101935731' , -9 , '5741789103970' , '-1' ) ; +test( macro , '51676101935731' , 11 , '4697827448702' , '9' ) ; +test( macro , '-51676101935731' , 11 , '-4697827448703' , '2' ) ; +test( macro , '51676101935731' , -11 , '-4697827448703' , '-2' ) ; +test( macro , '-51676101935731' , -11 , '4697827448702' , '-9' ) ; +test( macro , '51676101935731' , 17 , '3039770702101' , '14' ) ; +test( macro , '-51676101935731' , 17 , '-3039770702102' , '3' ) ; +test( macro , '51676101935731' , -17 , '-3039770702102' , '-3' ) ; +test( macro , '-51676101935731' , -17 , '3039770702101' , '-14' ) ; +test( macro , '51676101935731' , 22 , '2348913724351' , '9' ) ; +test( macro , '-51676101935731' , 22 , '-2348913724352' , '13' ) ; +test( macro , '51676101935731' , -22 , '-2348913724352' , '-13' ) ; +test( macro , '-51676101935731' , -22 , '2348913724351' , '-9' ) ; +test( macro , '51676101935731' , 24 , '2153170913988' , '19' ) ; +test( macro , '-51676101935731' , 24 , '-2153170913989' , '5' ) ; +test( macro , '51676101935731' , -24 , '-2153170913989' , '-5' ) ; +test( macro , '-51676101935731' , -24 , '2153170913988' , '-19' ) ; +test( macro , '51676101935731' , 27 , '1913929701323' , '10' ) ; +test( macro , '-51676101935731' , 27 , '-1913929701324' , '17' ) ; +test( macro , '51676101935731' , -27 , '-1913929701324' , '-17' ) ; +test( macro , '-51676101935731' , -27 , '1913929701323' , '-10' ) ; +test( macro , '51676101935731' , 29 , '1781934549507' , '28' ) ; +test( macro , '-51676101935731' , 29 , '-1781934549508' , '1' ) ; +test( macro , '51676101935731' , -29 , '-1781934549508' , '-1' ) ; +test( macro , '-51676101935731' , -29 , '1781934549507' , '-28' ) ; +test( macro , '51676101935731' , 1234 , '41876905944' , '835' ) ; +test( macro , '-51676101935731' , 1234 , '-41876905945' , '399' ) ; +test( macro , '51676101935731' , -1234 , '-41876905945' , '-399' ) ; +test( macro , '-51676101935731' , -1234 , '41876905944' , '-835' ) ; +test( macro , '51676101935731' , 5678 , '9101109886' , '3023' ) ; +test( macro , '-51676101935731' , 5678 , '-9101109887' , '2655' ) ; +test( macro , '51676101935731' , -5678 , '-9101109887' , '-2655' ) ; +test( macro , '-51676101935731' , -5678 , '9101109886' , '-3023' ) ; +test( macro , '51676101935731' , 1073741824 , '48127' , '129172083' ) ; +test( macro , '-51676101935731' , 1073741824 , '-48128' , '944569741' ) ; +test( macro , '51676101935731' , -1073741824 , '-48128' , '-944569741' ) ; +test( macro , '-51676101935731' , -1073741824 , '48127' , '-129172083' ) ; +test( macro , '51676101935731' , 51676101935731 , '1' , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-1' , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '-1' , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '1' , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , 3 , '239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , 3 , '-239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , -3 , '-239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , -3 , '239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , 7 , '102556855384550369824321' , '2' ) ; +test( macro , '-717897987691852588770249' , 7 , '-102556855384550369824322' , '5' ) ; +test( macro , '717897987691852588770249' , -7 , '-102556855384550369824322' , '-5' ) ; +test( macro , '-717897987691852588770249' , -7 , '102556855384550369824321' , '-2' ) ; +test( macro , '717897987691852588770249' , 9 , '79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , 9 , '-79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , -9 , '-79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , -9 , '79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , 11 , '65263453426532053524568' , '1' ) ; +test( macro , '-717897987691852588770249' , 11 , '-65263453426532053524569' , '10' ) ; +test( macro , '717897987691852588770249' , -11 , '-65263453426532053524569' , '-10' ) ; +test( macro , '-717897987691852588770249' , -11 , '65263453426532053524568' , '-1' ) ; +test( macro , '717897987691852588770249' , 17 , '42229293393638387574720' , '9' ) ; +test( macro , '-717897987691852588770249' , 17 , '-42229293393638387574721' , '8' ) ; +test( macro , '717897987691852588770249' , -17 , '-42229293393638387574721' , '-8' ) ; +test( macro , '-717897987691852588770249' , -17 , '42229293393638387574720' , '-9' ) ; +test( macro , '717897987691852588770249' , 22 , '32631726713266026762284' , '1' ) ; +test( macro , '-717897987691852588770249' , 22 , '-32631726713266026762285' , '21' ) ; +test( macro , '717897987691852588770249' , -22 , '-32631726713266026762285' , '-21' ) ; +test( macro , '-717897987691852588770249' , -22 , '32631726713266026762284' , '-1' ) ; +test( macro , '717897987691852588770249' , 24 , '29912416153827191198760' , '9' ) ; +test( macro , '-717897987691852588770249' , 24 , '-29912416153827191198761' , '15' ) ; +test( macro , '717897987691852588770249' , -24 , '-29912416153827191198761' , '-15' ) ; +test( macro , '-717897987691852588770249' , -24 , '29912416153827191198760' , '-9' ) ; +test( macro , '717897987691852588770249' , 27 , '26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , 27 , '-26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , -27 , '-26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , -27 , '26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , 29 , '24755103023856985819663' , '22' ) ; +test( macro , '-717897987691852588770249' , 29 , '-24755103023856985819664' , '7' ) ; +test( macro , '717897987691852588770249' , -29 , '-24755103023856985819664' , '-7' ) ; +test( macro , '-717897987691852588770249' , -29 , '24755103023856985819663' , '-22' ) ; +test( macro , '717897987691852588770249' , 1234 , '581764981922084755891' , '755' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-581764981922084755892' , '479' ) ; +test( macro , '717897987691852588770249' , -1234 , '-581764981922084755892' , '-479' ) ; +test( macro , '-717897987691852588770249' , -1234 , '581764981922084755891' , '-755' ) ; +test( macro , '717897987691852588770249' , 5678 , '126435010160593974774' , '3477' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-126435010160593974775' , '2201' ) ; +test( macro , '717897987691852588770249' , -5678 , '-126435010160593974775' , '-2201' ) ; +test( macro , '-717897987691852588770249' , -5678 , '126435010160593974774' , '-3477' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '668594602208447' , '278782921' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-668594602208448' , '794958903' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-668594602208448' , '-794958903' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '668594602208447' , '-278782921' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '13892262782' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-13892262783' , '417440429124' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-13892262783' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '13892262782' , '-51258661506607' ) ; diff --git a/test/src/integer/arithmetic/idivmod.js b/test/src/integer/arithmetic/idivmod.js new file mode 100644 index 0000000..2755bab --- /dev/null +++ b/test/src/integer/arithmetic/idivmod.js @@ -0,0 +1,915 @@ +import test from 'ava' ; +import { parse , stringify , idivmod } from '../../../../src' ; + +function macro ( t , A , B , C , D ) { + const a = parse( A ) ; + const b = parse( B ) ; + const [c, d] = idivmod( a , b ) ; + t.is( stringify( a ) , D ) ; + t.is( stringify( b ) , B ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +} + +macro.title = ( _ , A , B , C , D ) => `idivmod(${A},${B}) = [${C},${D}]` ; + +test( macro , '1' , '1' , '1' , '0' ) ; +test( macro , '-1' , '1' , '-1' , '0' ) ; +test( macro , '1' , '-1' , '-1' , '0' ) ; +test( macro , '-1' , '-1' , '1' , '0' ) ; +test( macro , '1' , '3' , '0' , '1' ) ; +test( macro , '-1' , '3' , '-1' , '2' ) ; +test( macro , '1' , '-3' , '-1' , '-2' ) ; +test( macro , '-1' , '-3' , '0' , '-1' ) ; +test( macro , '1' , '7' , '0' , '1' ) ; +test( macro , '-1' , '7' , '-1' , '6' ) ; +test( macro , '1' , '-7' , '-1' , '-6' ) ; +test( macro , '-1' , '-7' , '0' , '-1' ) ; +test( macro , '1' , '9' , '0' , '1' ) ; +test( macro , '-1' , '9' , '-1' , '8' ) ; +test( macro , '1' , '-9' , '-1' , '-8' ) ; +test( macro , '-1' , '-9' , '0' , '-1' ) ; +test( macro , '1' , '11' , '0' , '1' ) ; +test( macro , '-1' , '11' , '-1' , '10' ) ; +test( macro , '1' , '-11' , '-1' , '-10' ) ; +test( macro , '-1' , '-11' , '0' , '-1' ) ; +test( macro , '1' , '17' , '0' , '1' ) ; +test( macro , '-1' , '17' , '-1' , '16' ) ; +test( macro , '1' , '-17' , '-1' , '-16' ) ; +test( macro , '-1' , '-17' , '0' , '-1' ) ; +test( macro , '1' , '22' , '0' , '1' ) ; +test( macro , '-1' , '22' , '-1' , '21' ) ; +test( macro , '1' , '-22' , '-1' , '-21' ) ; +test( macro , '-1' , '-22' , '0' , '-1' ) ; +test( macro , '1' , '24' , '0' , '1' ) ; +test( macro , '-1' , '24' , '-1' , '23' ) ; +test( macro , '1' , '-24' , '-1' , '-23' ) ; +test( macro , '-1' , '-24' , '0' , '-1' ) ; +test( macro , '1' , '27' , '0' , '1' ) ; +test( macro , '-1' , '27' , '-1' , '26' ) ; +test( macro , '1' , '-27' , '-1' , '-26' ) ; +test( macro , '-1' , '-27' , '0' , '-1' ) ; +test( macro , '1' , '29' , '0' , '1' ) ; +test( macro , '-1' , '29' , '-1' , '28' ) ; +test( macro , '1' , '-29' , '-1' , '-28' ) ; +test( macro , '-1' , '-29' , '0' , '-1' ) ; +test( macro , '1' , '1234' , '0' , '1' ) ; +test( macro , '-1' , '1234' , '-1' , '1233' ) ; +test( macro , '1' , '-1234' , '-1' , '-1233' ) ; +test( macro , '-1' , '-1234' , '0' , '-1' ) ; +test( macro , '1' , '5678' , '0' , '1' ) ; +test( macro , '-1' , '5678' , '-1' , '5677' ) ; +test( macro , '1' , '-5678' , '-1' , '-5677' ) ; +test( macro , '-1' , '-5678' , '0' , '-1' ) ; +test( macro , '1' , '1073741824' , '0' , '1' ) ; +test( macro , '-1' , '1073741824' , '-1' , '1073741823' ) ; +test( macro , '1' , '-1073741824' , '-1' , '-1073741823' ) ; +test( macro , '-1' , '-1073741824' , '0' , '-1' ) ; +test( macro , '1' , '51676101935731' , '0' , '1' ) ; +test( macro , '-1' , '51676101935731' , '-1' , '51676101935730' ) ; +test( macro , '1' , '-51676101935731' , '-1' , '-51676101935730' ) ; +test( macro , '-1' , '-51676101935731' , '0' , '-1' ) ; +test( macro , '1' , '717897987691852588770249' , '0' , '1' ) ; +test( macro , '-1' , '717897987691852588770249' , '-1' , '717897987691852588770248' ) ; +test( macro , '1' , '-717897987691852588770249' , '-1' , '-717897987691852588770248' ) ; +test( macro , '-1' , '-717897987691852588770249' , '0' , '-1' ) ; +test( macro , '3' , '1' , '3' , '0' ) ; +test( macro , '-3' , '1' , '-3' , '0' ) ; +test( macro , '3' , '-1' , '-3' , '0' ) ; +test( macro , '-3' , '-1' , '3' , '0' ) ; +test( macro , '3' , '3' , '1' , '0' ) ; +test( macro , '-3' , '3' , '-1' , '0' ) ; +test( macro , '3' , '-3' , '-1' , '0' ) ; +test( macro , '-3' , '-3' , '1' , '0' ) ; +test( macro , '3' , '7' , '0' , '3' ) ; +test( macro , '-3' , '7' , '-1' , '4' ) ; +test( macro , '3' , '-7' , '-1' , '-4' ) ; +test( macro , '-3' , '-7' , '0' , '-3' ) ; +test( macro , '3' , '9' , '0' , '3' ) ; +test( macro , '-3' , '9' , '-1' , '6' ) ; +test( macro , '3' , '-9' , '-1' , '-6' ) ; +test( macro , '-3' , '-9' , '0' , '-3' ) ; +test( macro , '3' , '11' , '0' , '3' ) ; +test( macro , '-3' , '11' , '-1' , '8' ) ; +test( macro , '3' , '-11' , '-1' , '-8' ) ; +test( macro , '-3' , '-11' , '0' , '-3' ) ; +test( macro , '3' , '17' , '0' , '3' ) ; +test( macro , '-3' , '17' , '-1' , '14' ) ; +test( macro , '3' , '-17' , '-1' , '-14' ) ; +test( macro , '-3' , '-17' , '0' , '-3' ) ; +test( macro , '3' , '22' , '0' , '3' ) ; +test( macro , '-3' , '22' , '-1' , '19' ) ; +test( macro , '3' , '-22' , '-1' , '-19' ) ; +test( macro , '-3' , '-22' , '0' , '-3' ) ; +test( macro , '3' , '24' , '0' , '3' ) ; +test( macro , '-3' , '24' , '-1' , '21' ) ; +test( macro , '3' , '-24' , '-1' , '-21' ) ; +test( macro , '-3' , '-24' , '0' , '-3' ) ; +test( macro , '3' , '27' , '0' , '3' ) ; +test( macro , '-3' , '27' , '-1' , '24' ) ; +test( macro , '3' , '-27' , '-1' , '-24' ) ; +test( macro , '-3' , '-27' , '0' , '-3' ) ; +test( macro , '3' , '29' , '0' , '3' ) ; +test( macro , '-3' , '29' , '-1' , '26' ) ; +test( macro , '3' , '-29' , '-1' , '-26' ) ; +test( macro , '-3' , '-29' , '0' , '-3' ) ; +test( macro , '3' , '1234' , '0' , '3' ) ; +test( macro , '-3' , '1234' , '-1' , '1231' ) ; +test( macro , '3' , '-1234' , '-1' , '-1231' ) ; +test( macro , '-3' , '-1234' , '0' , '-3' ) ; +test( macro , '3' , '5678' , '0' , '3' ) ; +test( macro , '-3' , '5678' , '-1' , '5675' ) ; +test( macro , '3' , '-5678' , '-1' , '-5675' ) ; +test( macro , '-3' , '-5678' , '0' , '-3' ) ; +test( macro , '3' , '1073741824' , '0' , '3' ) ; +test( macro , '-3' , '1073741824' , '-1' , '1073741821' ) ; +test( macro , '3' , '-1073741824' , '-1' , '-1073741821' ) ; +test( macro , '-3' , '-1073741824' , '0' , '-3' ) ; +test( macro , '3' , '51676101935731' , '0' , '3' ) ; +test( macro , '-3' , '51676101935731' , '-1' , '51676101935728' ) ; +test( macro , '3' , '-51676101935731' , '-1' , '-51676101935728' ) ; +test( macro , '-3' , '-51676101935731' , '0' , '-3' ) ; +test( macro , '3' , '717897987691852588770249' , '0' , '3' ) ; +test( macro , '-3' , '717897987691852588770249' , '-1' , '717897987691852588770246' ) ; +test( macro , '3' , '-717897987691852588770249' , '-1' , '-717897987691852588770246' ) ; +test( macro , '-3' , '-717897987691852588770249' , '0' , '-3' ) ; +test( macro , '7' , '1' , '7' , '0' ) ; +test( macro , '-7' , '1' , '-7' , '0' ) ; +test( macro , '7' , '-1' , '-7' , '0' ) ; +test( macro , '-7' , '-1' , '7' , '0' ) ; +test( macro , '7' , '3' , '2' , '1' ) ; +test( macro , '-7' , '3' , '-3' , '2' ) ; +test( macro , '7' , '-3' , '-3' , '-2' ) ; +test( macro , '-7' , '-3' , '2' , '-1' ) ; +test( macro , '7' , '7' , '1' , '0' ) ; +test( macro , '-7' , '7' , '-1' , '0' ) ; +test( macro , '7' , '-7' , '-1' , '0' ) ; +test( macro , '-7' , '-7' , '1' , '0' ) ; +test( macro , '7' , '9' , '0' , '7' ) ; +test( macro , '-7' , '9' , '-1' , '2' ) ; +test( macro , '7' , '-9' , '-1' , '-2' ) ; +test( macro , '-7' , '-9' , '0' , '-7' ) ; +test( macro , '7' , '11' , '0' , '7' ) ; +test( macro , '-7' , '11' , '-1' , '4' ) ; +test( macro , '7' , '-11' , '-1' , '-4' ) ; +test( macro , '-7' , '-11' , '0' , '-7' ) ; +test( macro , '7' , '17' , '0' , '7' ) ; +test( macro , '-7' , '17' , '-1' , '10' ) ; +test( macro , '7' , '-17' , '-1' , '-10' ) ; +test( macro , '-7' , '-17' , '0' , '-7' ) ; +test( macro , '7' , '22' , '0' , '7' ) ; +test( macro , '-7' , '22' , '-1' , '15' ) ; +test( macro , '7' , '-22' , '-1' , '-15' ) ; +test( macro , '-7' , '-22' , '0' , '-7' ) ; +test( macro , '7' , '24' , '0' , '7' ) ; +test( macro , '-7' , '24' , '-1' , '17' ) ; +test( macro , '7' , '-24' , '-1' , '-17' ) ; +test( macro , '-7' , '-24' , '0' , '-7' ) ; +test( macro , '7' , '27' , '0' , '7' ) ; +test( macro , '-7' , '27' , '-1' , '20' ) ; +test( macro , '7' , '-27' , '-1' , '-20' ) ; +test( macro , '-7' , '-27' , '0' , '-7' ) ; +test( macro , '7' , '29' , '0' , '7' ) ; +test( macro , '-7' , '29' , '-1' , '22' ) ; +test( macro , '7' , '-29' , '-1' , '-22' ) ; +test( macro , '-7' , '-29' , '0' , '-7' ) ; +test( macro , '7' , '1234' , '0' , '7' ) ; +test( macro , '-7' , '1234' , '-1' , '1227' ) ; +test( macro , '7' , '-1234' , '-1' , '-1227' ) ; +test( macro , '-7' , '-1234' , '0' , '-7' ) ; +test( macro , '7' , '5678' , '0' , '7' ) ; +test( macro , '-7' , '5678' , '-1' , '5671' ) ; +test( macro , '7' , '-5678' , '-1' , '-5671' ) ; +test( macro , '-7' , '-5678' , '0' , '-7' ) ; +test( macro , '7' , '1073741824' , '0' , '7' ) ; +test( macro , '-7' , '1073741824' , '-1' , '1073741817' ) ; +test( macro , '7' , '-1073741824' , '-1' , '-1073741817' ) ; +test( macro , '-7' , '-1073741824' , '0' , '-7' ) ; +test( macro , '7' , '51676101935731' , '0' , '7' ) ; +test( macro , '-7' , '51676101935731' , '-1' , '51676101935724' ) ; +test( macro , '7' , '-51676101935731' , '-1' , '-51676101935724' ) ; +test( macro , '-7' , '-51676101935731' , '0' , '-7' ) ; +test( macro , '7' , '717897987691852588770249' , '0' , '7' ) ; +test( macro , '-7' , '717897987691852588770249' , '-1' , '717897987691852588770242' ) ; +test( macro , '7' , '-717897987691852588770249' , '-1' , '-717897987691852588770242' ) ; +test( macro , '-7' , '-717897987691852588770249' , '0' , '-7' ) ; +test( macro , '9' , '1' , '9' , '0' ) ; +test( macro , '-9' , '1' , '-9' , '0' ) ; +test( macro , '9' , '-1' , '-9' , '0' ) ; +test( macro , '-9' , '-1' , '9' , '0' ) ; +test( macro , '9' , '3' , '3' , '0' ) ; +test( macro , '-9' , '3' , '-3' , '0' ) ; +test( macro , '9' , '-3' , '-3' , '0' ) ; +test( macro , '-9' , '-3' , '3' , '0' ) ; +test( macro , '9' , '7' , '1' , '2' ) ; +test( macro , '-9' , '7' , '-2' , '5' ) ; +test( macro , '9' , '-7' , '-2' , '-5' ) ; +test( macro , '-9' , '-7' , '1' , '-2' ) ; +test( macro , '9' , '9' , '1' , '0' ) ; +test( macro , '-9' , '9' , '-1' , '0' ) ; +test( macro , '9' , '-9' , '-1' , '0' ) ; +test( macro , '-9' , '-9' , '1' , '0' ) ; +test( macro , '9' , '11' , '0' , '9' ) ; +test( macro , '-9' , '11' , '-1' , '2' ) ; +test( macro , '9' , '-11' , '-1' , '-2' ) ; +test( macro , '-9' , '-11' , '0' , '-9' ) ; +test( macro , '9' , '17' , '0' , '9' ) ; +test( macro , '-9' , '17' , '-1' , '8' ) ; +test( macro , '9' , '-17' , '-1' , '-8' ) ; +test( macro , '-9' , '-17' , '0' , '-9' ) ; +test( macro , '9' , '22' , '0' , '9' ) ; +test( macro , '-9' , '22' , '-1' , '13' ) ; +test( macro , '9' , '-22' , '-1' , '-13' ) ; +test( macro , '-9' , '-22' , '0' , '-9' ) ; +test( macro , '9' , '24' , '0' , '9' ) ; +test( macro , '-9' , '24' , '-1' , '15' ) ; +test( macro , '9' , '-24' , '-1' , '-15' ) ; +test( macro , '-9' , '-24' , '0' , '-9' ) ; +test( macro , '9' , '27' , '0' , '9' ) ; +test( macro , '-9' , '27' , '-1' , '18' ) ; +test( macro , '9' , '-27' , '-1' , '-18' ) ; +test( macro , '-9' , '-27' , '0' , '-9' ) ; +test( macro , '9' , '29' , '0' , '9' ) ; +test( macro , '-9' , '29' , '-1' , '20' ) ; +test( macro , '9' , '-29' , '-1' , '-20' ) ; +test( macro , '-9' , '-29' , '0' , '-9' ) ; +test( macro , '9' , '1234' , '0' , '9' ) ; +test( macro , '-9' , '1234' , '-1' , '1225' ) ; +test( macro , '9' , '-1234' , '-1' , '-1225' ) ; +test( macro , '-9' , '-1234' , '0' , '-9' ) ; +test( macro , '9' , '5678' , '0' , '9' ) ; +test( macro , '-9' , '5678' , '-1' , '5669' ) ; +test( macro , '9' , '-5678' , '-1' , '-5669' ) ; +test( macro , '-9' , '-5678' , '0' , '-9' ) ; +test( macro , '9' , '1073741824' , '0' , '9' ) ; +test( macro , '-9' , '1073741824' , '-1' , '1073741815' ) ; +test( macro , '9' , '-1073741824' , '-1' , '-1073741815' ) ; +test( macro , '-9' , '-1073741824' , '0' , '-9' ) ; +test( macro , '9' , '51676101935731' , '0' , '9' ) ; +test( macro , '-9' , '51676101935731' , '-1' , '51676101935722' ) ; +test( macro , '9' , '-51676101935731' , '-1' , '-51676101935722' ) ; +test( macro , '-9' , '-51676101935731' , '0' , '-9' ) ; +test( macro , '9' , '717897987691852588770249' , '0' , '9' ) ; +test( macro , '-9' , '717897987691852588770249' , '-1' , '717897987691852588770240' ) ; +test( macro , '9' , '-717897987691852588770249' , '-1' , '-717897987691852588770240' ) ; +test( macro , '-9' , '-717897987691852588770249' , '0' , '-9' ) ; +test( macro , '11' , '1' , '11' , '0' ) ; +test( macro , '-11' , '1' , '-11' , '0' ) ; +test( macro , '11' , '-1' , '-11' , '0' ) ; +test( macro , '-11' , '-1' , '11' , '0' ) ; +test( macro , '11' , '3' , '3' , '2' ) ; +test( macro , '-11' , '3' , '-4' , '1' ) ; +test( macro , '11' , '-3' , '-4' , '-1' ) ; +test( macro , '-11' , '-3' , '3' , '-2' ) ; +test( macro , '11' , '7' , '1' , '4' ) ; +test( macro , '-11' , '7' , '-2' , '3' ) ; +test( macro , '11' , '-7' , '-2' , '-3' ) ; +test( macro , '-11' , '-7' , '1' , '-4' ) ; +test( macro , '11' , '9' , '1' , '2' ) ; +test( macro , '-11' , '9' , '-2' , '7' ) ; +test( macro , '11' , '-9' , '-2' , '-7' ) ; +test( macro , '-11' , '-9' , '1' , '-2' ) ; +test( macro , '11' , '11' , '1' , '0' ) ; +test( macro , '-11' , '11' , '-1' , '0' ) ; +test( macro , '11' , '-11' , '-1' , '0' ) ; +test( macro , '-11' , '-11' , '1' , '0' ) ; +test( macro , '11' , '17' , '0' , '11' ) ; +test( macro , '-11' , '17' , '-1' , '6' ) ; +test( macro , '11' , '-17' , '-1' , '-6' ) ; +test( macro , '-11' , '-17' , '0' , '-11' ) ; +test( macro , '11' , '22' , '0' , '11' ) ; +test( macro , '-11' , '22' , '-1' , '11' ) ; +test( macro , '11' , '-22' , '-1' , '-11' ) ; +test( macro , '-11' , '-22' , '0' , '-11' ) ; +test( macro , '11' , '24' , '0' , '11' ) ; +test( macro , '-11' , '24' , '-1' , '13' ) ; +test( macro , '11' , '-24' , '-1' , '-13' ) ; +test( macro , '-11' , '-24' , '0' , '-11' ) ; +test( macro , '11' , '27' , '0' , '11' ) ; +test( macro , '-11' , '27' , '-1' , '16' ) ; +test( macro , '11' , '-27' , '-1' , '-16' ) ; +test( macro , '-11' , '-27' , '0' , '-11' ) ; +test( macro , '11' , '29' , '0' , '11' ) ; +test( macro , '-11' , '29' , '-1' , '18' ) ; +test( macro , '11' , '-29' , '-1' , '-18' ) ; +test( macro , '-11' , '-29' , '0' , '-11' ) ; +test( macro , '11' , '1234' , '0' , '11' ) ; +test( macro , '-11' , '1234' , '-1' , '1223' ) ; +test( macro , '11' , '-1234' , '-1' , '-1223' ) ; +test( macro , '-11' , '-1234' , '0' , '-11' ) ; +test( macro , '11' , '5678' , '0' , '11' ) ; +test( macro , '-11' , '5678' , '-1' , '5667' ) ; +test( macro , '11' , '-5678' , '-1' , '-5667' ) ; +test( macro , '-11' , '-5678' , '0' , '-11' ) ; +test( macro , '11' , '1073741824' , '0' , '11' ) ; +test( macro , '-11' , '1073741824' , '-1' , '1073741813' ) ; +test( macro , '11' , '-1073741824' , '-1' , '-1073741813' ) ; +test( macro , '-11' , '-1073741824' , '0' , '-11' ) ; +test( macro , '11' , '51676101935731' , '0' , '11' ) ; +test( macro , '-11' , '51676101935731' , '-1' , '51676101935720' ) ; +test( macro , '11' , '-51676101935731' , '-1' , '-51676101935720' ) ; +test( macro , '-11' , '-51676101935731' , '0' , '-11' ) ; +test( macro , '11' , '717897987691852588770249' , '0' , '11' ) ; +test( macro , '-11' , '717897987691852588770249' , '-1' , '717897987691852588770238' ) ; +test( macro , '11' , '-717897987691852588770249' , '-1' , '-717897987691852588770238' ) ; +test( macro , '-11' , '-717897987691852588770249' , '0' , '-11' ) ; +test( macro , '17' , '1' , '17' , '0' ) ; +test( macro , '-17' , '1' , '-17' , '0' ) ; +test( macro , '17' , '-1' , '-17' , '0' ) ; +test( macro , '-17' , '-1' , '17' , '0' ) ; +test( macro , '17' , '3' , '5' , '2' ) ; +test( macro , '-17' , '3' , '-6' , '1' ) ; +test( macro , '17' , '-3' , '-6' , '-1' ) ; +test( macro , '-17' , '-3' , '5' , '-2' ) ; +test( macro , '17' , '7' , '2' , '3' ) ; +test( macro , '-17' , '7' , '-3' , '4' ) ; +test( macro , '17' , '-7' , '-3' , '-4' ) ; +test( macro , '-17' , '-7' , '2' , '-3' ) ; +test( macro , '17' , '9' , '1' , '8' ) ; +test( macro , '-17' , '9' , '-2' , '1' ) ; +test( macro , '17' , '-9' , '-2' , '-1' ) ; +test( macro , '-17' , '-9' , '1' , '-8' ) ; +test( macro , '17' , '11' , '1' , '6' ) ; +test( macro , '-17' , '11' , '-2' , '5' ) ; +test( macro , '17' , '-11' , '-2' , '-5' ) ; +test( macro , '-17' , '-11' , '1' , '-6' ) ; +test( macro , '17' , '17' , '1' , '0' ) ; +test( macro , '-17' , '17' , '-1' , '0' ) ; +test( macro , '17' , '-17' , '-1' , '0' ) ; +test( macro , '-17' , '-17' , '1' , '0' ) ; +test( macro , '17' , '22' , '0' , '17' ) ; +test( macro , '-17' , '22' , '-1' , '5' ) ; +test( macro , '17' , '-22' , '-1' , '-5' ) ; +test( macro , '-17' , '-22' , '0' , '-17' ) ; +test( macro , '17' , '24' , '0' , '17' ) ; +test( macro , '-17' , '24' , '-1' , '7' ) ; +test( macro , '17' , '-24' , '-1' , '-7' ) ; +test( macro , '-17' , '-24' , '0' , '-17' ) ; +test( macro , '17' , '27' , '0' , '17' ) ; +test( macro , '-17' , '27' , '-1' , '10' ) ; +test( macro , '17' , '-27' , '-1' , '-10' ) ; +test( macro , '-17' , '-27' , '0' , '-17' ) ; +test( macro , '17' , '29' , '0' , '17' ) ; +test( macro , '-17' , '29' , '-1' , '12' ) ; +test( macro , '17' , '-29' , '-1' , '-12' ) ; +test( macro , '-17' , '-29' , '0' , '-17' ) ; +test( macro , '17' , '1234' , '0' , '17' ) ; +test( macro , '-17' , '1234' , '-1' , '1217' ) ; +test( macro , '17' , '-1234' , '-1' , '-1217' ) ; +test( macro , '-17' , '-1234' , '0' , '-17' ) ; +test( macro , '17' , '5678' , '0' , '17' ) ; +test( macro , '-17' , '5678' , '-1' , '5661' ) ; +test( macro , '17' , '-5678' , '-1' , '-5661' ) ; +test( macro , '-17' , '-5678' , '0' , '-17' ) ; +test( macro , '17' , '1073741824' , '0' , '17' ) ; +test( macro , '-17' , '1073741824' , '-1' , '1073741807' ) ; +test( macro , '17' , '-1073741824' , '-1' , '-1073741807' ) ; +test( macro , '-17' , '-1073741824' , '0' , '-17' ) ; +test( macro , '17' , '51676101935731' , '0' , '17' ) ; +test( macro , '-17' , '51676101935731' , '-1' , '51676101935714' ) ; +test( macro , '17' , '-51676101935731' , '-1' , '-51676101935714' ) ; +test( macro , '-17' , '-51676101935731' , '0' , '-17' ) ; +test( macro , '17' , '717897987691852588770249' , '0' , '17' ) ; +test( macro , '-17' , '717897987691852588770249' , '-1' , '717897987691852588770232' ) ; +test( macro , '17' , '-717897987691852588770249' , '-1' , '-717897987691852588770232' ) ; +test( macro , '-17' , '-717897987691852588770249' , '0' , '-17' ) ; +test( macro , '22' , '1' , '22' , '0' ) ; +test( macro , '-22' , '1' , '-22' , '0' ) ; +test( macro , '22' , '-1' , '-22' , '0' ) ; +test( macro , '-22' , '-1' , '22' , '0' ) ; +test( macro , '22' , '3' , '7' , '1' ) ; +test( macro , '-22' , '3' , '-8' , '2' ) ; +test( macro , '22' , '-3' , '-8' , '-2' ) ; +test( macro , '-22' , '-3' , '7' , '-1' ) ; +test( macro , '22' , '7' , '3' , '1' ) ; +test( macro , '-22' , '7' , '-4' , '6' ) ; +test( macro , '22' , '-7' , '-4' , '-6' ) ; +test( macro , '-22' , '-7' , '3' , '-1' ) ; +test( macro , '22' , '9' , '2' , '4' ) ; +test( macro , '-22' , '9' , '-3' , '5' ) ; +test( macro , '22' , '-9' , '-3' , '-5' ) ; +test( macro , '-22' , '-9' , '2' , '-4' ) ; +test( macro , '22' , '11' , '2' , '0' ) ; +test( macro , '-22' , '11' , '-2' , '0' ) ; +test( macro , '22' , '-11' , '-2' , '0' ) ; +test( macro , '-22' , '-11' , '2' , '0' ) ; +test( macro , '22' , '17' , '1' , '5' ) ; +test( macro , '-22' , '17' , '-2' , '12' ) ; +test( macro , '22' , '-17' , '-2' , '-12' ) ; +test( macro , '-22' , '-17' , '1' , '-5' ) ; +test( macro , '22' , '22' , '1' , '0' ) ; +test( macro , '-22' , '22' , '-1' , '0' ) ; +test( macro , '22' , '-22' , '-1' , '0' ) ; +test( macro , '-22' , '-22' , '1' , '0' ) ; +test( macro , '22' , '24' , '0' , '22' ) ; +test( macro , '-22' , '24' , '-1' , '2' ) ; +test( macro , '22' , '-24' , '-1' , '-2' ) ; +test( macro , '-22' , '-24' , '0' , '-22' ) ; +test( macro , '22' , '27' , '0' , '22' ) ; +test( macro , '-22' , '27' , '-1' , '5' ) ; +test( macro , '22' , '-27' , '-1' , '-5' ) ; +test( macro , '-22' , '-27' , '0' , '-22' ) ; +test( macro , '22' , '29' , '0' , '22' ) ; +test( macro , '-22' , '29' , '-1' , '7' ) ; +test( macro , '22' , '-29' , '-1' , '-7' ) ; +test( macro , '-22' , '-29' , '0' , '-22' ) ; +test( macro , '22' , '1234' , '0' , '22' ) ; +test( macro , '-22' , '1234' , '-1' , '1212' ) ; +test( macro , '22' , '-1234' , '-1' , '-1212' ) ; +test( macro , '-22' , '-1234' , '0' , '-22' ) ; +test( macro , '22' , '5678' , '0' , '22' ) ; +test( macro , '-22' , '5678' , '-1' , '5656' ) ; +test( macro , '22' , '-5678' , '-1' , '-5656' ) ; +test( macro , '-22' , '-5678' , '0' , '-22' ) ; +test( macro , '22' , '1073741824' , '0' , '22' ) ; +test( macro , '-22' , '1073741824' , '-1' , '1073741802' ) ; +test( macro , '22' , '-1073741824' , '-1' , '-1073741802' ) ; +test( macro , '-22' , '-1073741824' , '0' , '-22' ) ; +test( macro , '22' , '51676101935731' , '0' , '22' ) ; +test( macro , '-22' , '51676101935731' , '-1' , '51676101935709' ) ; +test( macro , '22' , '-51676101935731' , '-1' , '-51676101935709' ) ; +test( macro , '-22' , '-51676101935731' , '0' , '-22' ) ; +test( macro , '22' , '717897987691852588770249' , '0' , '22' ) ; +test( macro , '-22' , '717897987691852588770249' , '-1' , '717897987691852588770227' ) ; +test( macro , '22' , '-717897987691852588770249' , '-1' , '-717897987691852588770227' ) ; +test( macro , '-22' , '-717897987691852588770249' , '0' , '-22' ) ; +test( macro , '24' , '1' , '24' , '0' ) ; +test( macro , '-24' , '1' , '-24' , '0' ) ; +test( macro , '24' , '-1' , '-24' , '0' ) ; +test( macro , '-24' , '-1' , '24' , '0' ) ; +test( macro , '24' , '3' , '8' , '0' ) ; +test( macro , '-24' , '3' , '-8' , '0' ) ; +test( macro , '24' , '-3' , '-8' , '0' ) ; +test( macro , '-24' , '-3' , '8' , '0' ) ; +test( macro , '24' , '7' , '3' , '3' ) ; +test( macro , '-24' , '7' , '-4' , '4' ) ; +test( macro , '24' , '-7' , '-4' , '-4' ) ; +test( macro , '-24' , '-7' , '3' , '-3' ) ; +test( macro , '24' , '9' , '2' , '6' ) ; +test( macro , '-24' , '9' , '-3' , '3' ) ; +test( macro , '24' , '-9' , '-3' , '-3' ) ; +test( macro , '-24' , '-9' , '2' , '-6' ) ; +test( macro , '24' , '11' , '2' , '2' ) ; +test( macro , '-24' , '11' , '-3' , '9' ) ; +test( macro , '24' , '-11' , '-3' , '-9' ) ; +test( macro , '-24' , '-11' , '2' , '-2' ) ; +test( macro , '24' , '17' , '1' , '7' ) ; +test( macro , '-24' , '17' , '-2' , '10' ) ; +test( macro , '24' , '-17' , '-2' , '-10' ) ; +test( macro , '-24' , '-17' , '1' , '-7' ) ; +test( macro , '24' , '22' , '1' , '2' ) ; +test( macro , '-24' , '22' , '-2' , '20' ) ; +test( macro , '24' , '-22' , '-2' , '-20' ) ; +test( macro , '-24' , '-22' , '1' , '-2' ) ; +test( macro , '24' , '24' , '1' , '0' ) ; +test( macro , '-24' , '24' , '-1' , '0' ) ; +test( macro , '24' , '-24' , '-1' , '0' ) ; +test( macro , '-24' , '-24' , '1' , '0' ) ; +test( macro , '24' , '27' , '0' , '24' ) ; +test( macro , '-24' , '27' , '-1' , '3' ) ; +test( macro , '24' , '-27' , '-1' , '-3' ) ; +test( macro , '-24' , '-27' , '0' , '-24' ) ; +test( macro , '24' , '29' , '0' , '24' ) ; +test( macro , '-24' , '29' , '-1' , '5' ) ; +test( macro , '24' , '-29' , '-1' , '-5' ) ; +test( macro , '-24' , '-29' , '0' , '-24' ) ; +test( macro , '24' , '1234' , '0' , '24' ) ; +test( macro , '-24' , '1234' , '-1' , '1210' ) ; +test( macro , '24' , '-1234' , '-1' , '-1210' ) ; +test( macro , '-24' , '-1234' , '0' , '-24' ) ; +test( macro , '24' , '5678' , '0' , '24' ) ; +test( macro , '-24' , '5678' , '-1' , '5654' ) ; +test( macro , '24' , '-5678' , '-1' , '-5654' ) ; +test( macro , '-24' , '-5678' , '0' , '-24' ) ; +test( macro , '24' , '1073741824' , '0' , '24' ) ; +test( macro , '-24' , '1073741824' , '-1' , '1073741800' ) ; +test( macro , '24' , '-1073741824' , '-1' , '-1073741800' ) ; +test( macro , '-24' , '-1073741824' , '0' , '-24' ) ; +test( macro , '24' , '51676101935731' , '0' , '24' ) ; +test( macro , '-24' , '51676101935731' , '-1' , '51676101935707' ) ; +test( macro , '24' , '-51676101935731' , '-1' , '-51676101935707' ) ; +test( macro , '-24' , '-51676101935731' , '0' , '-24' ) ; +test( macro , '24' , '717897987691852588770249' , '0' , '24' ) ; +test( macro , '-24' , '717897987691852588770249' , '-1' , '717897987691852588770225' ) ; +test( macro , '24' , '-717897987691852588770249' , '-1' , '-717897987691852588770225' ) ; +test( macro , '-24' , '-717897987691852588770249' , '0' , '-24' ) ; +test( macro , '27' , '1' , '27' , '0' ) ; +test( macro , '-27' , '1' , '-27' , '0' ) ; +test( macro , '27' , '-1' , '-27' , '0' ) ; +test( macro , '-27' , '-1' , '27' , '0' ) ; +test( macro , '27' , '3' , '9' , '0' ) ; +test( macro , '-27' , '3' , '-9' , '0' ) ; +test( macro , '27' , '-3' , '-9' , '0' ) ; +test( macro , '-27' , '-3' , '9' , '0' ) ; +test( macro , '27' , '7' , '3' , '6' ) ; +test( macro , '-27' , '7' , '-4' , '1' ) ; +test( macro , '27' , '-7' , '-4' , '-1' ) ; +test( macro , '-27' , '-7' , '3' , '-6' ) ; +test( macro , '27' , '9' , '3' , '0' ) ; +test( macro , '-27' , '9' , '-3' , '0' ) ; +test( macro , '27' , '-9' , '-3' , '0' ) ; +test( macro , '-27' , '-9' , '3' , '0' ) ; +test( macro , '27' , '11' , '2' , '5' ) ; +test( macro , '-27' , '11' , '-3' , '6' ) ; +test( macro , '27' , '-11' , '-3' , '-6' ) ; +test( macro , '-27' , '-11' , '2' , '-5' ) ; +test( macro , '27' , '17' , '1' , '10' ) ; +test( macro , '-27' , '17' , '-2' , '7' ) ; +test( macro , '27' , '-17' , '-2' , '-7' ) ; +test( macro , '-27' , '-17' , '1' , '-10' ) ; +test( macro , '27' , '22' , '1' , '5' ) ; +test( macro , '-27' , '22' , '-2' , '17' ) ; +test( macro , '27' , '-22' , '-2' , '-17' ) ; +test( macro , '-27' , '-22' , '1' , '-5' ) ; +test( macro , '27' , '24' , '1' , '3' ) ; +test( macro , '-27' , '24' , '-2' , '21' ) ; +test( macro , '27' , '-24' , '-2' , '-21' ) ; +test( macro , '-27' , '-24' , '1' , '-3' ) ; +test( macro , '27' , '27' , '1' , '0' ) ; +test( macro , '-27' , '27' , '-1' , '0' ) ; +test( macro , '27' , '-27' , '-1' , '0' ) ; +test( macro , '-27' , '-27' , '1' , '0' ) ; +test( macro , '27' , '29' , '0' , '27' ) ; +test( macro , '-27' , '29' , '-1' , '2' ) ; +test( macro , '27' , '-29' , '-1' , '-2' ) ; +test( macro , '-27' , '-29' , '0' , '-27' ) ; +test( macro , '27' , '1234' , '0' , '27' ) ; +test( macro , '-27' , '1234' , '-1' , '1207' ) ; +test( macro , '27' , '-1234' , '-1' , '-1207' ) ; +test( macro , '-27' , '-1234' , '0' , '-27' ) ; +test( macro , '27' , '5678' , '0' , '27' ) ; +test( macro , '-27' , '5678' , '-1' , '5651' ) ; +test( macro , '27' , '-5678' , '-1' , '-5651' ) ; +test( macro , '-27' , '-5678' , '0' , '-27' ) ; +test( macro , '27' , '1073741824' , '0' , '27' ) ; +test( macro , '-27' , '1073741824' , '-1' , '1073741797' ) ; +test( macro , '27' , '-1073741824' , '-1' , '-1073741797' ) ; +test( macro , '-27' , '-1073741824' , '0' , '-27' ) ; +test( macro , '27' , '51676101935731' , '0' , '27' ) ; +test( macro , '-27' , '51676101935731' , '-1' , '51676101935704' ) ; +test( macro , '27' , '-51676101935731' , '-1' , '-51676101935704' ) ; +test( macro , '-27' , '-51676101935731' , '0' , '-27' ) ; +test( macro , '27' , '717897987691852588770249' , '0' , '27' ) ; +test( macro , '-27' , '717897987691852588770249' , '-1' , '717897987691852588770222' ) ; +test( macro , '27' , '-717897987691852588770249' , '-1' , '-717897987691852588770222' ) ; +test( macro , '-27' , '-717897987691852588770249' , '0' , '-27' ) ; +test( macro , '29' , '1' , '29' , '0' ) ; +test( macro , '-29' , '1' , '-29' , '0' ) ; +test( macro , '29' , '-1' , '-29' , '0' ) ; +test( macro , '-29' , '-1' , '29' , '0' ) ; +test( macro , '29' , '3' , '9' , '2' ) ; +test( macro , '-29' , '3' , '-10' , '1' ) ; +test( macro , '29' , '-3' , '-10' , '-1' ) ; +test( macro , '-29' , '-3' , '9' , '-2' ) ; +test( macro , '29' , '7' , '4' , '1' ) ; +test( macro , '-29' , '7' , '-5' , '6' ) ; +test( macro , '29' , '-7' , '-5' , '-6' ) ; +test( macro , '-29' , '-7' , '4' , '-1' ) ; +test( macro , '29' , '9' , '3' , '2' ) ; +test( macro , '-29' , '9' , '-4' , '7' ) ; +test( macro , '29' , '-9' , '-4' , '-7' ) ; +test( macro , '-29' , '-9' , '3' , '-2' ) ; +test( macro , '29' , '11' , '2' , '7' ) ; +test( macro , '-29' , '11' , '-3' , '4' ) ; +test( macro , '29' , '-11' , '-3' , '-4' ) ; +test( macro , '-29' , '-11' , '2' , '-7' ) ; +test( macro , '29' , '17' , '1' , '12' ) ; +test( macro , '-29' , '17' , '-2' , '5' ) ; +test( macro , '29' , '-17' , '-2' , '-5' ) ; +test( macro , '-29' , '-17' , '1' , '-12' ) ; +test( macro , '29' , '22' , '1' , '7' ) ; +test( macro , '-29' , '22' , '-2' , '15' ) ; +test( macro , '29' , '-22' , '-2' , '-15' ) ; +test( macro , '-29' , '-22' , '1' , '-7' ) ; +test( macro , '29' , '24' , '1' , '5' ) ; +test( macro , '-29' , '24' , '-2' , '19' ) ; +test( macro , '29' , '-24' , '-2' , '-19' ) ; +test( macro , '-29' , '-24' , '1' , '-5' ) ; +test( macro , '29' , '27' , '1' , '2' ) ; +test( macro , '-29' , '27' , '-2' , '25' ) ; +test( macro , '29' , '-27' , '-2' , '-25' ) ; +test( macro , '-29' , '-27' , '1' , '-2' ) ; +test( macro , '29' , '29' , '1' , '0' ) ; +test( macro , '-29' , '29' , '-1' , '0' ) ; +test( macro , '29' , '-29' , '-1' , '0' ) ; +test( macro , '-29' , '-29' , '1' , '0' ) ; +test( macro , '29' , '1234' , '0' , '29' ) ; +test( macro , '-29' , '1234' , '-1' , '1205' ) ; +test( macro , '29' , '-1234' , '-1' , '-1205' ) ; +test( macro , '-29' , '-1234' , '0' , '-29' ) ; +test( macro , '29' , '5678' , '0' , '29' ) ; +test( macro , '-29' , '5678' , '-1' , '5649' ) ; +test( macro , '29' , '-5678' , '-1' , '-5649' ) ; +test( macro , '-29' , '-5678' , '0' , '-29' ) ; +test( macro , '29' , '1073741824' , '0' , '29' ) ; +test( macro , '-29' , '1073741824' , '-1' , '1073741795' ) ; +test( macro , '29' , '-1073741824' , '-1' , '-1073741795' ) ; +test( macro , '-29' , '-1073741824' , '0' , '-29' ) ; +test( macro , '29' , '51676101935731' , '0' , '29' ) ; +test( macro , '-29' , '51676101935731' , '-1' , '51676101935702' ) ; +test( macro , '29' , '-51676101935731' , '-1' , '-51676101935702' ) ; +test( macro , '-29' , '-51676101935731' , '0' , '-29' ) ; +test( macro , '29' , '717897987691852588770249' , '0' , '29' ) ; +test( macro , '-29' , '717897987691852588770249' , '-1' , '717897987691852588770220' ) ; +test( macro , '29' , '-717897987691852588770249' , '-1' , '-717897987691852588770220' ) ; +test( macro , '-29' , '-717897987691852588770249' , '0' , '-29' ) ; +test( macro , '1234' , '1' , '1234' , '0' ) ; +test( macro , '-1234' , '1' , '-1234' , '0' ) ; +test( macro , '1234' , '-1' , '-1234' , '0' ) ; +test( macro , '-1234' , '-1' , '1234' , '0' ) ; +test( macro , '1234' , '3' , '411' , '1' ) ; +test( macro , '-1234' , '3' , '-412' , '2' ) ; +test( macro , '1234' , '-3' , '-412' , '-2' ) ; +test( macro , '-1234' , '-3' , '411' , '-1' ) ; +test( macro , '1234' , '7' , '176' , '2' ) ; +test( macro , '-1234' , '7' , '-177' , '5' ) ; +test( macro , '1234' , '-7' , '-177' , '-5' ) ; +test( macro , '-1234' , '-7' , '176' , '-2' ) ; +test( macro , '1234' , '9' , '137' , '1' ) ; +test( macro , '-1234' , '9' , '-138' , '8' ) ; +test( macro , '1234' , '-9' , '-138' , '-8' ) ; +test( macro , '-1234' , '-9' , '137' , '-1' ) ; +test( macro , '1234' , '11' , '112' , '2' ) ; +test( macro , '-1234' , '11' , '-113' , '9' ) ; +test( macro , '1234' , '-11' , '-113' , '-9' ) ; +test( macro , '-1234' , '-11' , '112' , '-2' ) ; +test( macro , '1234' , '17' , '72' , '10' ) ; +test( macro , '-1234' , '17' , '-73' , '7' ) ; +test( macro , '1234' , '-17' , '-73' , '-7' ) ; +test( macro , '-1234' , '-17' , '72' , '-10' ) ; +test( macro , '1234' , '22' , '56' , '2' ) ; +test( macro , '-1234' , '22' , '-57' , '20' ) ; +test( macro , '1234' , '-22' , '-57' , '-20' ) ; +test( macro , '-1234' , '-22' , '56' , '-2' ) ; +test( macro , '1234' , '24' , '51' , '10' ) ; +test( macro , '-1234' , '24' , '-52' , '14' ) ; +test( macro , '1234' , '-24' , '-52' , '-14' ) ; +test( macro , '-1234' , '-24' , '51' , '-10' ) ; +test( macro , '1234' , '27' , '45' , '19' ) ; +test( macro , '-1234' , '27' , '-46' , '8' ) ; +test( macro , '1234' , '-27' , '-46' , '-8' ) ; +test( macro , '-1234' , '-27' , '45' , '-19' ) ; +test( macro , '1234' , '29' , '42' , '16' ) ; +test( macro , '-1234' , '29' , '-43' , '13' ) ; +test( macro , '1234' , '-29' , '-43' , '-13' ) ; +test( macro , '-1234' , '-29' , '42' , '-16' ) ; +test( macro , '1234' , '1234' , '1' , '0' ) ; +test( macro , '-1234' , '1234' , '-1' , '0' ) ; +test( macro , '1234' , '-1234' , '-1' , '0' ) ; +test( macro , '-1234' , '-1234' , '1' , '0' ) ; +test( macro , '1234' , '5678' , '0' , '1234' ) ; +test( macro , '-1234' , '5678' , '-1' , '4444' ) ; +test( macro , '1234' , '-5678' , '-1' , '-4444' ) ; +test( macro , '-1234' , '-5678' , '0' , '-1234' ) ; +test( macro , '1234' , '1073741824' , '0' , '1234' ) ; +test( macro , '-1234' , '1073741824' , '-1' , '1073740590' ) ; +test( macro , '1234' , '-1073741824' , '-1' , '-1073740590' ) ; +test( macro , '-1234' , '-1073741824' , '0' , '-1234' ) ; +test( macro , '1234' , '51676101935731' , '0' , '1234' ) ; +test( macro , '-1234' , '51676101935731' , '-1' , '51676101934497' ) ; +test( macro , '1234' , '-51676101935731' , '-1' , '-51676101934497' ) ; +test( macro , '-1234' , '-51676101935731' , '0' , '-1234' ) ; +test( macro , '1234' , '717897987691852588770249' , '0' , '1234' ) ; +test( macro , '-1234' , '717897987691852588770249' , '-1' , '717897987691852588769015' ) ; +test( macro , '1234' , '-717897987691852588770249' , '-1' , '-717897987691852588769015' ) ; +test( macro , '-1234' , '-717897987691852588770249' , '0' , '-1234' ) ; +test( macro , '5678' , '1' , '5678' , '0' ) ; +test( macro , '-5678' , '1' , '-5678' , '0' ) ; +test( macro , '5678' , '-1' , '-5678' , '0' ) ; +test( macro , '-5678' , '-1' , '5678' , '0' ) ; +test( macro , '5678' , '3' , '1892' , '2' ) ; +test( macro , '-5678' , '3' , '-1893' , '1' ) ; +test( macro , '5678' , '-3' , '-1893' , '-1' ) ; +test( macro , '-5678' , '-3' , '1892' , '-2' ) ; +test( macro , '5678' , '7' , '811' , '1' ) ; +test( macro , '-5678' , '7' , '-812' , '6' ) ; +test( macro , '5678' , '-7' , '-812' , '-6' ) ; +test( macro , '-5678' , '-7' , '811' , '-1' ) ; +test( macro , '5678' , '9' , '630' , '8' ) ; +test( macro , '-5678' , '9' , '-631' , '1' ) ; +test( macro , '5678' , '-9' , '-631' , '-1' ) ; +test( macro , '-5678' , '-9' , '630' , '-8' ) ; +test( macro , '5678' , '11' , '516' , '2' ) ; +test( macro , '-5678' , '11' , '-517' , '9' ) ; +test( macro , '5678' , '-11' , '-517' , '-9' ) ; +test( macro , '-5678' , '-11' , '516' , '-2' ) ; +test( macro , '5678' , '17' , '334' , '0' ) ; +test( macro , '-5678' , '17' , '-334' , '0' ) ; +test( macro , '5678' , '-17' , '-334' , '0' ) ; +test( macro , '-5678' , '-17' , '334' , '0' ) ; +test( macro , '5678' , '22' , '258' , '2' ) ; +test( macro , '-5678' , '22' , '-259' , '20' ) ; +test( macro , '5678' , '-22' , '-259' , '-20' ) ; +test( macro , '-5678' , '-22' , '258' , '-2' ) ; +test( macro , '5678' , '24' , '236' , '14' ) ; +test( macro , '-5678' , '24' , '-237' , '10' ) ; +test( macro , '5678' , '-24' , '-237' , '-10' ) ; +test( macro , '-5678' , '-24' , '236' , '-14' ) ; +test( macro , '5678' , '27' , '210' , '8' ) ; +test( macro , '-5678' , '27' , '-211' , '19' ) ; +test( macro , '5678' , '-27' , '-211' , '-19' ) ; +test( macro , '-5678' , '-27' , '210' , '-8' ) ; +test( macro , '5678' , '29' , '195' , '23' ) ; +test( macro , '-5678' , '29' , '-196' , '6' ) ; +test( macro , '5678' , '-29' , '-196' , '-6' ) ; +test( macro , '-5678' , '-29' , '195' , '-23' ) ; +test( macro , '5678' , '1234' , '4' , '742' ) ; +test( macro , '-5678' , '1234' , '-5' , '492' ) ; +test( macro , '5678' , '-1234' , '-5' , '-492' ) ; +test( macro , '-5678' , '-1234' , '4' , '-742' ) ; +test( macro , '5678' , '5678' , '1' , '0' ) ; +test( macro , '-5678' , '5678' , '-1' , '0' ) ; +test( macro , '5678' , '-5678' , '-1' , '0' ) ; +test( macro , '-5678' , '-5678' , '1' , '0' ) ; +test( macro , '5678' , '1073741824' , '0' , '5678' ) ; +test( macro , '-5678' , '1073741824' , '-1' , '1073736146' ) ; +test( macro , '5678' , '-1073741824' , '-1' , '-1073736146' ) ; +test( macro , '-5678' , '-1073741824' , '0' , '-5678' ) ; +test( macro , '5678' , '51676101935731' , '0' , '5678' ) ; +test( macro , '-5678' , '51676101935731' , '-1' , '51676101930053' ) ; +test( macro , '5678' , '-51676101935731' , '-1' , '-51676101930053' ) ; +test( macro , '-5678' , '-51676101935731' , '0' , '-5678' ) ; +test( macro , '5678' , '717897987691852588770249' , '0' , '5678' ) ; +test( macro , '-5678' , '717897987691852588770249' , '-1' , '717897987691852588764571' ) ; +test( macro , '5678' , '-717897987691852588770249' , '-1' , '-717897987691852588764571' ) ; +test( macro , '-5678' , '-717897987691852588770249' , '0' , '-5678' ) ; +test( macro , '1073741824' , '1' , '1073741824' , '0' ) ; +test( macro , '-1073741824' , '1' , '-1073741824' , '0' ) ; +test( macro , '1073741824' , '-1' , '-1073741824' , '0' ) ; +test( macro , '-1073741824' , '-1' , '1073741824' , '0' ) ; +test( macro , '1073741824' , '3' , '357913941' , '1' ) ; +test( macro , '-1073741824' , '3' , '-357913942' , '2' ) ; +test( macro , '1073741824' , '-3' , '-357913942' , '-2' ) ; +test( macro , '-1073741824' , '-3' , '357913941' , '-1' ) ; +test( macro , '1073741824' , '7' , '153391689' , '1' ) ; +test( macro , '-1073741824' , '7' , '-153391690' , '6' ) ; +test( macro , '1073741824' , '-7' , '-153391690' , '-6' ) ; +test( macro , '-1073741824' , '-7' , '153391689' , '-1' ) ; +test( macro , '1073741824' , '9' , '119304647' , '1' ) ; +test( macro , '-1073741824' , '9' , '-119304648' , '8' ) ; +test( macro , '1073741824' , '-9' , '-119304648' , '-8' ) ; +test( macro , '-1073741824' , '-9' , '119304647' , '-1' ) ; +test( macro , '1073741824' , '11' , '97612893' , '1' ) ; +test( macro , '-1073741824' , '11' , '-97612894' , '10' ) ; +test( macro , '1073741824' , '-11' , '-97612894' , '-10' ) ; +test( macro , '-1073741824' , '-11' , '97612893' , '-1' ) ; +test( macro , '1073741824' , '17' , '63161283' , '13' ) ; +test( macro , '-1073741824' , '17' , '-63161284' , '4' ) ; +test( macro , '1073741824' , '-17' , '-63161284' , '-4' ) ; +test( macro , '-1073741824' , '-17' , '63161283' , '-13' ) ; +test( macro , '1073741824' , '22' , '48806446' , '12' ) ; +test( macro , '-1073741824' , '22' , '-48806447' , '10' ) ; +test( macro , '1073741824' , '-22' , '-48806447' , '-10' ) ; +test( macro , '-1073741824' , '-22' , '48806446' , '-12' ) ; +test( macro , '1073741824' , '24' , '44739242' , '16' ) ; +test( macro , '-1073741824' , '24' , '-44739243' , '8' ) ; +test( macro , '1073741824' , '-24' , '-44739243' , '-8' ) ; +test( macro , '-1073741824' , '-24' , '44739242' , '-16' ) ; +test( macro , '1073741824' , '27' , '39768215' , '19' ) ; +test( macro , '-1073741824' , '27' , '-39768216' , '8' ) ; +test( macro , '1073741824' , '-27' , '-39768216' , '-8' ) ; +test( macro , '-1073741824' , '-27' , '39768215' , '-19' ) ; +test( macro , '1073741824' , '29' , '37025580' , '4' ) ; +test( macro , '-1073741824' , '29' , '-37025581' , '25' ) ; +test( macro , '1073741824' , '-29' , '-37025581' , '-25' ) ; +test( macro , '-1073741824' , '-29' , '37025580' , '-4' ) ; +test( macro , '1073741824' , '1234' , '870131' , '170' ) ; +test( macro , '-1073741824' , '1234' , '-870132' , '1064' ) ; +test( macro , '1073741824' , '-1234' , '-870132' , '-1064' ) ; +test( macro , '-1073741824' , '-1234' , '870131' , '-170' ) ; +test( macro , '1073741824' , '5678' , '189105' , '3634' ) ; +test( macro , '-1073741824' , '5678' , '-189106' , '2044' ) ; +test( macro , '1073741824' , '-5678' , '-189106' , '-2044' ) ; +test( macro , '-1073741824' , '-5678' , '189105' , '-3634' ) ; +test( macro , '1073741824' , '1073741824' , '1' , '0' ) ; +test( macro , '-1073741824' , '1073741824' , '-1' , '0' ) ; +test( macro , '1073741824' , '-1073741824' , '-1' , '0' ) ; +test( macro , '-1073741824' , '-1073741824' , '1' , '0' ) ; +test( macro , '1073741824' , '51676101935731' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '51676101935731' , '-1' , '51675028193907' ) ; +test( macro , '1073741824' , '-51676101935731' , '-1' , '-51675028193907' ) ; +test( macro , '-1073741824' , '-51676101935731' , '0' , '-1073741824' ) ; +test( macro , '1073741824' , '717897987691852588770249' , '0' , '1073741824' ) ; +test( macro , '-1073741824' , '717897987691852588770249' , '-1' , '717897987691851515028425' ) ; +test( macro , '1073741824' , '-717897987691852588770249' , '-1' , '-717897987691851515028425' ) ; +test( macro , '-1073741824' , '-717897987691852588770249' , '0' , '-1073741824' ) ; +test( macro , '51676101935731' , '1' , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '1' , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , '-1' , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , '-1' , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , '3' , '17225367311910' , '1' ) ; +test( macro , '-51676101935731' , '3' , '-17225367311911' , '2' ) ; +test( macro , '51676101935731' , '-3' , '-17225367311911' , '-2' ) ; +test( macro , '-51676101935731' , '-3' , '17225367311910' , '-1' ) ; +test( macro , '51676101935731' , '7' , '7382300276533' , '0' ) ; +test( macro , '-51676101935731' , '7' , '-7382300276533' , '0' ) ; +test( macro , '51676101935731' , '-7' , '-7382300276533' , '0' ) ; +test( macro , '-51676101935731' , '-7' , '7382300276533' , '0' ) ; +test( macro , '51676101935731' , '9' , '5741789103970' , '1' ) ; +test( macro , '-51676101935731' , '9' , '-5741789103971' , '8' ) ; +test( macro , '51676101935731' , '-9' , '-5741789103971' , '-8' ) ; +test( macro , '-51676101935731' , '-9' , '5741789103970' , '-1' ) ; +test( macro , '51676101935731' , '11' , '4697827448702' , '9' ) ; +test( macro , '-51676101935731' , '11' , '-4697827448703' , '2' ) ; +test( macro , '51676101935731' , '-11' , '-4697827448703' , '-2' ) ; +test( macro , '-51676101935731' , '-11' , '4697827448702' , '-9' ) ; +test( macro , '51676101935731' , '17' , '3039770702101' , '14' ) ; +test( macro , '-51676101935731' , '17' , '-3039770702102' , '3' ) ; +test( macro , '51676101935731' , '-17' , '-3039770702102' , '-3' ) ; +test( macro , '-51676101935731' , '-17' , '3039770702101' , '-14' ) ; +test( macro , '51676101935731' , '22' , '2348913724351' , '9' ) ; +test( macro , '-51676101935731' , '22' , '-2348913724352' , '13' ) ; +test( macro , '51676101935731' , '-22' , '-2348913724352' , '-13' ) ; +test( macro , '-51676101935731' , '-22' , '2348913724351' , '-9' ) ; +test( macro , '51676101935731' , '24' , '2153170913988' , '19' ) ; +test( macro , '-51676101935731' , '24' , '-2153170913989' , '5' ) ; +test( macro , '51676101935731' , '-24' , '-2153170913989' , '-5' ) ; +test( macro , '-51676101935731' , '-24' , '2153170913988' , '-19' ) ; +test( macro , '51676101935731' , '27' , '1913929701323' , '10' ) ; +test( macro , '-51676101935731' , '27' , '-1913929701324' , '17' ) ; +test( macro , '51676101935731' , '-27' , '-1913929701324' , '-17' ) ; +test( macro , '-51676101935731' , '-27' , '1913929701323' , '-10' ) ; +test( macro , '51676101935731' , '29' , '1781934549507' , '28' ) ; +test( macro , '-51676101935731' , '29' , '-1781934549508' , '1' ) ; +test( macro , '51676101935731' , '-29' , '-1781934549508' , '-1' ) ; +test( macro , '-51676101935731' , '-29' , '1781934549507' , '-28' ) ; +test( macro , '51676101935731' , '1234' , '41876905944' , '835' ) ; +test( macro , '-51676101935731' , '1234' , '-41876905945' , '399' ) ; +test( macro , '51676101935731' , '-1234' , '-41876905945' , '-399' ) ; +test( macro , '-51676101935731' , '-1234' , '41876905944' , '-835' ) ; +test( macro , '51676101935731' , '5678' , '9101109886' , '3023' ) ; +test( macro , '-51676101935731' , '5678' , '-9101109887' , '2655' ) ; +test( macro , '51676101935731' , '-5678' , '-9101109887' , '-2655' ) ; +test( macro , '-51676101935731' , '-5678' , '9101109886' , '-3023' ) ; +test( macro , '51676101935731' , '1073741824' , '48127' , '129172083' ) ; +test( macro , '-51676101935731' , '1073741824' , '-48128' , '944569741' ) ; +test( macro , '51676101935731' , '-1073741824' , '-48128' , '-944569741' ) ; +test( macro , '-51676101935731' , '-1073741824' , '48127' , '-129172083' ) ; +test( macro , '51676101935731' , '51676101935731' , '1' , '0' ) ; +test( macro , '-51676101935731' , '51676101935731' , '-1' , '0' ) ; +test( macro , '51676101935731' , '-51676101935731' , '-1' , '0' ) ; +test( macro , '-51676101935731' , '-51676101935731' , '1' , '0' ) ; +test( macro , '51676101935731' , '717897987691852588770249' , '0' , '51676101935731' ) ; +test( macro , '-51676101935731' , '717897987691852588770249' , '-1' , '717897987640176486834518' ) ; +test( macro , '51676101935731' , '-717897987691852588770249' , '-1' , '-717897987640176486834518' ) ; +test( macro , '-51676101935731' , '-717897987691852588770249' , '0' , '-51676101935731' ) ; +test( macro , '717897987691852588770249' , '1' , '717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , '1' , '-717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , '-1' , '-717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , '-1' , '717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , '3' , '239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , '3' , '-239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , '-3' , '-239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , '-3' , '239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , '7' , '102556855384550369824321' , '2' ) ; +test( macro , '-717897987691852588770249' , '7' , '-102556855384550369824322' , '5' ) ; +test( macro , '717897987691852588770249' , '-7' , '-102556855384550369824322' , '-5' ) ; +test( macro , '-717897987691852588770249' , '-7' , '102556855384550369824321' , '-2' ) ; +test( macro , '717897987691852588770249' , '9' , '79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , '9' , '-79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , '-9' , '-79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , '-9' , '79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , '11' , '65263453426532053524568' , '1' ) ; +test( macro , '-717897987691852588770249' , '11' , '-65263453426532053524569' , '10' ) ; +test( macro , '717897987691852588770249' , '-11' , '-65263453426532053524569' , '-10' ) ; +test( macro , '-717897987691852588770249' , '-11' , '65263453426532053524568' , '-1' ) ; +test( macro , '717897987691852588770249' , '17' , '42229293393638387574720' , '9' ) ; +test( macro , '-717897987691852588770249' , '17' , '-42229293393638387574721' , '8' ) ; +test( macro , '717897987691852588770249' , '-17' , '-42229293393638387574721' , '-8' ) ; +test( macro , '-717897987691852588770249' , '-17' , '42229293393638387574720' , '-9' ) ; +test( macro , '717897987691852588770249' , '22' , '32631726713266026762284' , '1' ) ; +test( macro , '-717897987691852588770249' , '22' , '-32631726713266026762285' , '21' ) ; +test( macro , '717897987691852588770249' , '-22' , '-32631726713266026762285' , '-21' ) ; +test( macro , '-717897987691852588770249' , '-22' , '32631726713266026762284' , '-1' ) ; +test( macro , '717897987691852588770249' , '24' , '29912416153827191198760' , '9' ) ; +test( macro , '-717897987691852588770249' , '24' , '-29912416153827191198761' , '15' ) ; +test( macro , '717897987691852588770249' , '-24' , '-29912416153827191198761' , '-15' ) ; +test( macro , '-717897987691852588770249' , '-24' , '29912416153827191198760' , '-9' ) ; +test( macro , '717897987691852588770249' , '27' , '26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , '27' , '-26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , '-27' , '-26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , '-27' , '26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , '29' , '24755103023856985819663' , '22' ) ; +test( macro , '-717897987691852588770249' , '29' , '-24755103023856985819664' , '7' ) ; +test( macro , '717897987691852588770249' , '-29' , '-24755103023856985819664' , '-7' ) ; +test( macro , '-717897987691852588770249' , '-29' , '24755103023856985819663' , '-22' ) ; +test( macro , '717897987691852588770249' , '1234' , '581764981922084755891' , '755' ) ; +test( macro , '-717897987691852588770249' , '1234' , '-581764981922084755892' , '479' ) ; +test( macro , '717897987691852588770249' , '-1234' , '-581764981922084755892' , '-479' ) ; +test( macro , '-717897987691852588770249' , '-1234' , '581764981922084755891' , '-755' ) ; +test( macro , '717897987691852588770249' , '5678' , '126435010160593974774' , '3477' ) ; +test( macro , '-717897987691852588770249' , '5678' , '-126435010160593974775' , '2201' ) ; +test( macro , '717897987691852588770249' , '-5678' , '-126435010160593974775' , '-2201' ) ; +test( macro , '-717897987691852588770249' , '-5678' , '126435010160593974774' , '-3477' ) ; +test( macro , '717897987691852588770249' , '1073741824' , '668594602208447' , '278782921' ) ; +test( macro , '-717897987691852588770249' , '1073741824' , '-668594602208448' , '794958903' ) ; +test( macro , '717897987691852588770249' , '-1073741824' , '-668594602208448' , '-794958903' ) ; +test( macro , '-717897987691852588770249' , '-1073741824' , '668594602208447' , '-278782921' ) ; +test( macro , '717897987691852588770249' , '51676101935731' , '13892262782' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , '51676101935731' , '-13892262783' , '417440429124' ) ; +test( macro , '717897987691852588770249' , '-51676101935731' , '-13892262783' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , '-51676101935731' , '13892262782' , '-51258661506607' ) ; +test( macro , '717897987691852588770249' , '717897987691852588770249' , '1' , '0' ) ; +test( macro , '-717897987691852588770249' , '717897987691852588770249' , '-1' , '0' ) ; +test( macro , '717897987691852588770249' , '-717897987691852588770249' , '-1' , '0' ) ; +test( macro , '-717897987691852588770249' , '-717897987691852588770249' , '1' , '0' ) ; diff --git a/test/src/integer/arithmetic/idivmodn.js b/test/src/integer/arithmetic/idivmodn.js new file mode 100644 index 0000000..3390296 --- /dev/null +++ b/test/src/integer/arithmetic/idivmodn.js @@ -0,0 +1,853 @@ +import test from 'ava' ; +import { parse , stringify , idivmodn } from '../../../../src' ; + +function macro ( t , A , B , C , D ) { + const a = parse( A ) ; + const [c, d] = idivmodn( a , B ) ; + t.is( stringify( a ) , D ) ; + t.is( stringify( c ) , C ) ; + t.is( stringify( d ) , D ) ; +} + +macro.title = ( _ , A , B , C , D ) => `idivmodn(${A},${B}) = [${C},${D}]` ; + +test( macro , '1' , 1 , '1' , '0' ) ; +test( macro , '-1' , 1 , '-1' , '0' ) ; +test( macro , '1' , -1 , '-1' , '0' ) ; +test( macro , '-1' , -1 , '1' , '0' ) ; +test( macro , '1' , 3 , '0' , '1' ) ; +test( macro , '-1' , 3 , '-1' , '2' ) ; +test( macro , '1' , -3 , '-1' , '-2' ) ; +test( macro , '-1' , -3 , '0' , '-1' ) ; +test( macro , '1' , 7 , '0' , '1' ) ; +test( macro , '-1' , 7 , '-1' , '6' ) ; +test( macro , '1' , -7 , '-1' , '-6' ) ; +test( macro , '-1' , -7 , '0' , '-1' ) ; +test( macro , '1' , 9 , '0' , '1' ) ; +test( macro , '-1' , 9 , '-1' , '8' ) ; +test( macro , '1' , -9 , '-1' , '-8' ) ; +test( macro , '-1' , -9 , '0' , '-1' ) ; +test( macro , '1' , 11 , '0' , '1' ) ; +test( macro , '-1' , 11 , '-1' , '10' ) ; +test( macro , '1' , -11 , '-1' , '-10' ) ; +test( macro , '-1' , -11 , '0' , '-1' ) ; +test( macro , '1' , 17 , '0' , '1' ) ; +test( macro , '-1' , 17 , '-1' , '16' ) ; +test( macro , '1' , -17 , '-1' , '-16' ) ; +test( macro , '-1' , -17 , '0' , '-1' ) ; +test( macro , '1' , 22 , '0' , '1' ) ; +test( macro , '-1' , 22 , '-1' , '21' ) ; +test( macro , '1' , -22 , '-1' , '-21' ) ; +test( macro , '-1' , -22 , '0' , '-1' ) ; +test( macro , '1' , 24 , '0' , '1' ) ; +test( macro , '-1' , 24 , '-1' , '23' ) ; +test( macro , '1' , -24 , '-1' , '-23' ) ; +test( macro , '-1' , -24 , '0' , '-1' ) ; +test( macro , '1' , 27 , '0' , '1' ) ; +test( macro , '-1' , 27 , '-1' , '26' ) ; +test( macro , '1' , -27 , '-1' , '-26' ) ; +test( macro , '-1' , -27 , '0' , '-1' ) ; +test( macro , '1' , 29 , '0' , '1' ) ; +test( macro , '-1' , 29 , '-1' , '28' ) ; +test( macro , '1' , -29 , '-1' , '-28' ) ; +test( macro , '-1' , -29 , '0' , '-1' ) ; +test( macro , '1' , 1234 , '0' , '1' ) ; +test( macro , '-1' , 1234 , '-1' , '1233' ) ; +test( macro , '1' , -1234 , '-1' , '-1233' ) ; +test( macro , '-1' , -1234 , '0' , '-1' ) ; +test( macro , '1' , 5678 , '0' , '1' ) ; +test( macro , '-1' , 5678 , '-1' , '5677' ) ; +test( macro , '1' , -5678 , '-1' , '-5677' ) ; +test( macro , '-1' , -5678 , '0' , '-1' ) ; +test( macro , '1' , 1073741824 , '0' , '1' ) ; +test( macro , '-1' , 1073741824 , '-1' , '1073741823' ) ; +test( macro , '1' , -1073741824 , '-1' , '-1073741823' ) ; +test( macro , '-1' , -1073741824 , '0' , '-1' ) ; +test( macro , '1' , 51676101935731 , '0' , '1' ) ; +test( macro , '-1' , 51676101935731 , '-1' , '51676101935730' ) ; +test( macro , '1' , -51676101935731 , '-1' , '-51676101935730' ) ; +test( macro , '-1' , -51676101935731 , '0' , '-1' ) ; +test( macro , '3' , 1 , '3' , '0' ) ; +test( macro , '-3' , 1 , '-3' , '0' ) ; +test( macro , '3' , -1 , '-3' , '0' ) ; +test( macro , '-3' , -1 , '3' , '0' ) ; +test( macro , '3' , 3 , '1' , '0' ) ; +test( macro , '-3' , 3 , '-1' , '0' ) ; +test( macro , '3' , -3 , '-1' , '0' ) ; +test( macro , '-3' , -3 , '1' , '0' ) ; +test( macro , '3' , 7 , '0' , '3' ) ; +test( macro , '-3' , 7 , '-1' , '4' ) ; +test( macro , '3' , -7 , '-1' , '-4' ) ; +test( macro , '-3' , -7 , '0' , '-3' ) ; +test( macro , '3' , 9 , '0' , '3' ) ; +test( macro , '-3' , 9 , '-1' , '6' ) ; +test( macro , '3' , -9 , '-1' , '-6' ) ; +test( macro , '-3' , -9 , '0' , '-3' ) ; +test( macro , '3' , 11 , '0' , '3' ) ; +test( macro , '-3' , 11 , '-1' , '8' ) ; +test( macro , '3' , -11 , '-1' , '-8' ) ; +test( macro , '-3' , -11 , '0' , '-3' ) ; +test( macro , '3' , 17 , '0' , '3' ) ; +test( macro , '-3' , 17 , '-1' , '14' ) ; +test( macro , '3' , -17 , '-1' , '-14' ) ; +test( macro , '-3' , -17 , '0' , '-3' ) ; +test( macro , '3' , 22 , '0' , '3' ) ; +test( macro , '-3' , 22 , '-1' , '19' ) ; +test( macro , '3' , -22 , '-1' , '-19' ) ; +test( macro , '-3' , -22 , '0' , '-3' ) ; +test( macro , '3' , 24 , '0' , '3' ) ; +test( macro , '-3' , 24 , '-1' , '21' ) ; +test( macro , '3' , -24 , '-1' , '-21' ) ; +test( macro , '-3' , -24 , '0' , '-3' ) ; +test( macro , '3' , 27 , '0' , '3' ) ; +test( macro , '-3' , 27 , '-1' , '24' ) ; +test( macro , '3' , -27 , '-1' , '-24' ) ; +test( macro , '-3' , -27 , '0' , '-3' ) ; +test( macro , '3' , 29 , '0' , '3' ) ; +test( macro , '-3' , 29 , '-1' , '26' ) ; +test( macro , '3' , -29 , '-1' , '-26' ) ; +test( macro , '-3' , -29 , '0' , '-3' ) ; +test( macro , '3' , 1234 , '0' , '3' ) ; +test( macro , '-3' , 1234 , '-1' , '1231' ) ; +test( macro , '3' , -1234 , '-1' , '-1231' ) ; +test( macro , '-3' , -1234 , '0' , '-3' ) ; +test( macro , '3' , 5678 , '0' , '3' ) ; +test( macro , '-3' , 5678 , '-1' , '5675' ) ; +test( macro , '3' , -5678 , '-1' , '-5675' ) ; +test( macro , '-3' , -5678 , '0' , '-3' ) ; +test( macro , '3' , 1073741824 , '0' , '3' ) ; +test( macro , '-3' , 1073741824 , '-1' , '1073741821' ) ; +test( macro , '3' , -1073741824 , '-1' , '-1073741821' ) ; +test( macro , '-3' , -1073741824 , '0' , '-3' ) ; +test( macro , '3' , 51676101935731 , '0' , '3' ) ; +test( macro , '-3' , 51676101935731 , '-1' , '51676101935728' ) ; +test( macro , '3' , -51676101935731 , '-1' , '-51676101935728' ) ; +test( macro , '-3' , -51676101935731 , '0' , '-3' ) ; +test( macro , '7' , 1 , '7' , '0' ) ; +test( macro , '-7' , 1 , '-7' , '0' ) ; +test( macro , '7' , -1 , '-7' , '0' ) ; +test( macro , '-7' , -1 , '7' , '0' ) ; +test( macro , '7' , 3 , '2' , '1' ) ; +test( macro , '-7' , 3 , '-3' , '2' ) ; +test( macro , '7' , -3 , '-3' , '-2' ) ; +test( macro , '-7' , -3 , '2' , '-1' ) ; +test( macro , '7' , 7 , '1' , '0' ) ; +test( macro , '-7' , 7 , '-1' , '0' ) ; +test( macro , '7' , -7 , '-1' , '0' ) ; +test( macro , '-7' , -7 , '1' , '0' ) ; +test( macro , '7' , 9 , '0' , '7' ) ; +test( macro , '-7' , 9 , '-1' , '2' ) ; +test( macro , '7' , -9 , '-1' , '-2' ) ; +test( macro , '-7' , -9 , '0' , '-7' ) ; +test( macro , '7' , 11 , '0' , '7' ) ; +test( macro , '-7' , 11 , '-1' , '4' ) ; +test( macro , '7' , -11 , '-1' , '-4' ) ; +test( macro , '-7' , -11 , '0' , '-7' ) ; +test( macro , '7' , 17 , '0' , '7' ) ; +test( macro , '-7' , 17 , '-1' , '10' ) ; +test( macro , '7' , -17 , '-1' , '-10' ) ; +test( macro , '-7' , -17 , '0' , '-7' ) ; +test( macro , '7' , 22 , '0' , '7' ) ; +test( macro , '-7' , 22 , '-1' , '15' ) ; +test( macro , '7' , -22 , '-1' , '-15' ) ; +test( macro , '-7' , -22 , '0' , '-7' ) ; +test( macro , '7' , 24 , '0' , '7' ) ; +test( macro , '-7' , 24 , '-1' , '17' ) ; +test( macro , '7' , -24 , '-1' , '-17' ) ; +test( macro , '-7' , -24 , '0' , '-7' ) ; +test( macro , '7' , 27 , '0' , '7' ) ; +test( macro , '-7' , 27 , '-1' , '20' ) ; +test( macro , '7' , -27 , '-1' , '-20' ) ; +test( macro , '-7' , -27 , '0' , '-7' ) ; +test( macro , '7' , 29 , '0' , '7' ) ; +test( macro , '-7' , 29 , '-1' , '22' ) ; +test( macro , '7' , -29 , '-1' , '-22' ) ; +test( macro , '-7' , -29 , '0' , '-7' ) ; +test( macro , '7' , 1234 , '0' , '7' ) ; +test( macro , '-7' , 1234 , '-1' , '1227' ) ; +test( macro , '7' , -1234 , '-1' , '-1227' ) ; +test( macro , '-7' , -1234 , '0' , '-7' ) ; +test( macro , '7' , 5678 , '0' , '7' ) ; +test( macro , '-7' , 5678 , '-1' , '5671' ) ; +test( macro , '7' , -5678 , '-1' , '-5671' ) ; +test( macro , '-7' , -5678 , '0' , '-7' ) ; +test( macro , '7' , 1073741824 , '0' , '7' ) ; +test( macro , '-7' , 1073741824 , '-1' , '1073741817' ) ; +test( macro , '7' , -1073741824 , '-1' , '-1073741817' ) ; +test( macro , '-7' , -1073741824 , '0' , '-7' ) ; +test( macro , '7' , 51676101935731 , '0' , '7' ) ; +test( macro , '-7' , 51676101935731 , '-1' , '51676101935724' ) ; +test( macro , '7' , -51676101935731 , '-1' , '-51676101935724' ) ; +test( macro , '-7' , -51676101935731 , '0' , '-7' ) ; +test( macro , '9' , 1 , '9' , '0' ) ; +test( macro , '-9' , 1 , '-9' , '0' ) ; +test( macro , '9' , -1 , '-9' , '0' ) ; +test( macro , '-9' , -1 , '9' , '0' ) ; +test( macro , '9' , 3 , '3' , '0' ) ; +test( macro , '-9' , 3 , '-3' , '0' ) ; +test( macro , '9' , -3 , '-3' , '0' ) ; +test( macro , '-9' , -3 , '3' , '0' ) ; +test( macro , '9' , 7 , '1' , '2' ) ; +test( macro , '-9' , 7 , '-2' , '5' ) ; +test( macro , '9' , -7 , '-2' , '-5' ) ; +test( macro , '-9' , -7 , '1' , '-2' ) ; +test( macro , '9' , 9 , '1' , '0' ) ; +test( macro , '-9' , 9 , '-1' , '0' ) ; +test( macro , '9' , -9 , '-1' , '0' ) ; +test( macro , '-9' , -9 , '1' , '0' ) ; +test( macro , '9' , 11 , '0' , '9' ) ; +test( macro , '-9' , 11 , '-1' , '2' ) ; +test( macro , '9' , -11 , '-1' , '-2' ) ; +test( macro , '-9' , -11 , '0' , '-9' ) ; +test( macro , '9' , 17 , '0' , '9' ) ; +test( macro , '-9' , 17 , '-1' , '8' ) ; +test( macro , '9' , -17 , '-1' , '-8' ) ; +test( macro , '-9' , -17 , '0' , '-9' ) ; +test( macro , '9' , 22 , '0' , '9' ) ; +test( macro , '-9' , 22 , '-1' , '13' ) ; +test( macro , '9' , -22 , '-1' , '-13' ) ; +test( macro , '-9' , -22 , '0' , '-9' ) ; +test( macro , '9' , 24 , '0' , '9' ) ; +test( macro , '-9' , 24 , '-1' , '15' ) ; +test( macro , '9' , -24 , '-1' , '-15' ) ; +test( macro , '-9' , -24 , '0' , '-9' ) ; +test( macro , '9' , 27 , '0' , '9' ) ; +test( macro , '-9' , 27 , '-1' , '18' ) ; +test( macro , '9' , -27 , '-1' , '-18' ) ; +test( macro , '-9' , -27 , '0' , '-9' ) ; +test( macro , '9' , 29 , '0' , '9' ) ; +test( macro , '-9' , 29 , '-1' , '20' ) ; +test( macro , '9' , -29 , '-1' , '-20' ) ; +test( macro , '-9' , -29 , '0' , '-9' ) ; +test( macro , '9' , 1234 , '0' , '9' ) ; +test( macro , '-9' , 1234 , '-1' , '1225' ) ; +test( macro , '9' , -1234 , '-1' , '-1225' ) ; +test( macro , '-9' , -1234 , '0' , '-9' ) ; +test( macro , '9' , 5678 , '0' , '9' ) ; +test( macro , '-9' , 5678 , '-1' , '5669' ) ; +test( macro , '9' , -5678 , '-1' , '-5669' ) ; +test( macro , '-9' , -5678 , '0' , '-9' ) ; +test( macro , '9' , 1073741824 , '0' , '9' ) ; +test( macro , '-9' , 1073741824 , '-1' , '1073741815' ) ; +test( macro , '9' , -1073741824 , '-1' , '-1073741815' ) ; +test( macro , '-9' , -1073741824 , '0' , '-9' ) ; +test( macro , '9' , 51676101935731 , '0' , '9' ) ; +test( macro , '-9' , 51676101935731 , '-1' , '51676101935722' ) ; +test( macro , '9' , -51676101935731 , '-1' , '-51676101935722' ) ; +test( macro , '-9' , -51676101935731 , '0' , '-9' ) ; +test( macro , '11' , 1 , '11' , '0' ) ; +test( macro , '-11' , 1 , '-11' , '0' ) ; +test( macro , '11' , -1 , '-11' , '0' ) ; +test( macro , '-11' , -1 , '11' , '0' ) ; +test( macro , '11' , 3 , '3' , '2' ) ; +test( macro , '-11' , 3 , '-4' , '1' ) ; +test( macro , '11' , -3 , '-4' , '-1' ) ; +test( macro , '-11' , -3 , '3' , '-2' ) ; +test( macro , '11' , 7 , '1' , '4' ) ; +test( macro , '-11' , 7 , '-2' , '3' ) ; +test( macro , '11' , -7 , '-2' , '-3' ) ; +test( macro , '-11' , -7 , '1' , '-4' ) ; +test( macro , '11' , 9 , '1' , '2' ) ; +test( macro , '-11' , 9 , '-2' , '7' ) ; +test( macro , '11' , -9 , '-2' , '-7' ) ; +test( macro , '-11' , -9 , '1' , '-2' ) ; +test( macro , '11' , 11 , '1' , '0' ) ; +test( macro , '-11' , 11 , '-1' , '0' ) ; +test( macro , '11' , -11 , '-1' , '0' ) ; +test( macro , '-11' , -11 , '1' , '0' ) ; +test( macro , '11' , 17 , '0' , '11' ) ; +test( macro , '-11' , 17 , '-1' , '6' ) ; +test( macro , '11' , -17 , '-1' , '-6' ) ; +test( macro , '-11' , -17 , '0' , '-11' ) ; +test( macro , '11' , 22 , '0' , '11' ) ; +test( macro , '-11' , 22 , '-1' , '11' ) ; +test( macro , '11' , -22 , '-1' , '-11' ) ; +test( macro , '-11' , -22 , '0' , '-11' ) ; +test( macro , '11' , 24 , '0' , '11' ) ; +test( macro , '-11' , 24 , '-1' , '13' ) ; +test( macro , '11' , -24 , '-1' , '-13' ) ; +test( macro , '-11' , -24 , '0' , '-11' ) ; +test( macro , '11' , 27 , '0' , '11' ) ; +test( macro , '-11' , 27 , '-1' , '16' ) ; +test( macro , '11' , -27 , '-1' , '-16' ) ; +test( macro , '-11' , -27 , '0' , '-11' ) ; +test( macro , '11' , 29 , '0' , '11' ) ; +test( macro , '-11' , 29 , '-1' , '18' ) ; +test( macro , '11' , -29 , '-1' , '-18' ) ; +test( macro , '-11' , -29 , '0' , '-11' ) ; +test( macro , '11' , 1234 , '0' , '11' ) ; +test( macro , '-11' , 1234 , '-1' , '1223' ) ; +test( macro , '11' , -1234 , '-1' , '-1223' ) ; +test( macro , '-11' , -1234 , '0' , '-11' ) ; +test( macro , '11' , 5678 , '0' , '11' ) ; +test( macro , '-11' , 5678 , '-1' , '5667' ) ; +test( macro , '11' , -5678 , '-1' , '-5667' ) ; +test( macro , '-11' , -5678 , '0' , '-11' ) ; +test( macro , '11' , 1073741824 , '0' , '11' ) ; +test( macro , '-11' , 1073741824 , '-1' , '1073741813' ) ; +test( macro , '11' , -1073741824 , '-1' , '-1073741813' ) ; +test( macro , '-11' , -1073741824 , '0' , '-11' ) ; +test( macro , '11' , 51676101935731 , '0' , '11' ) ; +test( macro , '-11' , 51676101935731 , '-1' , '51676101935720' ) ; +test( macro , '11' , -51676101935731 , '-1' , '-51676101935720' ) ; +test( macro , '-11' , -51676101935731 , '0' , '-11' ) ; +test( macro , '17' , 1 , '17' , '0' ) ; +test( macro , '-17' , 1 , '-17' , '0' ) ; +test( macro , '17' , -1 , '-17' , '0' ) ; +test( macro , '-17' , -1 , '17' , '0' ) ; +test( macro , '17' , 3 , '5' , '2' ) ; +test( macro , '-17' , 3 , '-6' , '1' ) ; +test( macro , '17' , -3 , '-6' , '-1' ) ; +test( macro , '-17' , -3 , '5' , '-2' ) ; +test( macro , '17' , 7 , '2' , '3' ) ; +test( macro , '-17' , 7 , '-3' , '4' ) ; +test( macro , '17' , -7 , '-3' , '-4' ) ; +test( macro , '-17' , -7 , '2' , '-3' ) ; +test( macro , '17' , 9 , '1' , '8' ) ; +test( macro , '-17' , 9 , '-2' , '1' ) ; +test( macro , '17' , -9 , '-2' , '-1' ) ; +test( macro , '-17' , -9 , '1' , '-8' ) ; +test( macro , '17' , 11 , '1' , '6' ) ; +test( macro , '-17' , 11 , '-2' , '5' ) ; +test( macro , '17' , -11 , '-2' , '-5' ) ; +test( macro , '-17' , -11 , '1' , '-6' ) ; +test( macro , '17' , 17 , '1' , '0' ) ; +test( macro , '-17' , 17 , '-1' , '0' ) ; +test( macro , '17' , -17 , '-1' , '0' ) ; +test( macro , '-17' , -17 , '1' , '0' ) ; +test( macro , '17' , 22 , '0' , '17' ) ; +test( macro , '-17' , 22 , '-1' , '5' ) ; +test( macro , '17' , -22 , '-1' , '-5' ) ; +test( macro , '-17' , -22 , '0' , '-17' ) ; +test( macro , '17' , 24 , '0' , '17' ) ; +test( macro , '-17' , 24 , '-1' , '7' ) ; +test( macro , '17' , -24 , '-1' , '-7' ) ; +test( macro , '-17' , -24 , '0' , '-17' ) ; +test( macro , '17' , 27 , '0' , '17' ) ; +test( macro , '-17' , 27 , '-1' , '10' ) ; +test( macro , '17' , -27 , '-1' , '-10' ) ; +test( macro , '-17' , -27 , '0' , '-17' ) ; +test( macro , '17' , 29 , '0' , '17' ) ; +test( macro , '-17' , 29 , '-1' , '12' ) ; +test( macro , '17' , -29 , '-1' , '-12' ) ; +test( macro , '-17' , -29 , '0' , '-17' ) ; +test( macro , '17' , 1234 , '0' , '17' ) ; +test( macro , '-17' , 1234 , '-1' , '1217' ) ; +test( macro , '17' , -1234 , '-1' , '-1217' ) ; +test( macro , '-17' , -1234 , '0' , '-17' ) ; +test( macro , '17' , 5678 , '0' , '17' ) ; +test( macro , '-17' , 5678 , '-1' , '5661' ) ; +test( macro , '17' , -5678 , '-1' , '-5661' ) ; +test( macro , '-17' , -5678 , '0' , '-17' ) ; +test( macro , '17' , 1073741824 , '0' , '17' ) ; +test( macro , '-17' , 1073741824 , '-1' , '1073741807' ) ; +test( macro , '17' , -1073741824 , '-1' , '-1073741807' ) ; +test( macro , '-17' , -1073741824 , '0' , '-17' ) ; +test( macro , '17' , 51676101935731 , '0' , '17' ) ; +test( macro , '-17' , 51676101935731 , '-1' , '51676101935714' ) ; +test( macro , '17' , -51676101935731 , '-1' , '-51676101935714' ) ; +test( macro , '-17' , -51676101935731 , '0' , '-17' ) ; +test( macro , '22' , 1 , '22' , '0' ) ; +test( macro , '-22' , 1 , '-22' , '0' ) ; +test( macro , '22' , -1 , '-22' , '0' ) ; +test( macro , '-22' , -1 , '22' , '0' ) ; +test( macro , '22' , 3 , '7' , '1' ) ; +test( macro , '-22' , 3 , '-8' , '2' ) ; +test( macro , '22' , -3 , '-8' , '-2' ) ; +test( macro , '-22' , -3 , '7' , '-1' ) ; +test( macro , '22' , 7 , '3' , '1' ) ; +test( macro , '-22' , 7 , '-4' , '6' ) ; +test( macro , '22' , -7 , '-4' , '-6' ) ; +test( macro , '-22' , -7 , '3' , '-1' ) ; +test( macro , '22' , 9 , '2' , '4' ) ; +test( macro , '-22' , 9 , '-3' , '5' ) ; +test( macro , '22' , -9 , '-3' , '-5' ) ; +test( macro , '-22' , -9 , '2' , '-4' ) ; +test( macro , '22' , 11 , '2' , '0' ) ; +test( macro , '-22' , 11 , '-2' , '0' ) ; +test( macro , '22' , -11 , '-2' , '0' ) ; +test( macro , '-22' , -11 , '2' , '0' ) ; +test( macro , '22' , 17 , '1' , '5' ) ; +test( macro , '-22' , 17 , '-2' , '12' ) ; +test( macro , '22' , -17 , '-2' , '-12' ) ; +test( macro , '-22' , -17 , '1' , '-5' ) ; +test( macro , '22' , 22 , '1' , '0' ) ; +test( macro , '-22' , 22 , '-1' , '0' ) ; +test( macro , '22' , -22 , '-1' , '0' ) ; +test( macro , '-22' , -22 , '1' , '0' ) ; +test( macro , '22' , 24 , '0' , '22' ) ; +test( macro , '-22' , 24 , '-1' , '2' ) ; +test( macro , '22' , -24 , '-1' , '-2' ) ; +test( macro , '-22' , -24 , '0' , '-22' ) ; +test( macro , '22' , 27 , '0' , '22' ) ; +test( macro , '-22' , 27 , '-1' , '5' ) ; +test( macro , '22' , -27 , '-1' , '-5' ) ; +test( macro , '-22' , -27 , '0' , '-22' ) ; +test( macro , '22' , 29 , '0' , '22' ) ; +test( macro , '-22' , 29 , '-1' , '7' ) ; +test( macro , '22' , -29 , '-1' , '-7' ) ; +test( macro , '-22' , -29 , '0' , '-22' ) ; +test( macro , '22' , 1234 , '0' , '22' ) ; +test( macro , '-22' , 1234 , '-1' , '1212' ) ; +test( macro , '22' , -1234 , '-1' , '-1212' ) ; +test( macro , '-22' , -1234 , '0' , '-22' ) ; +test( macro , '22' , 5678 , '0' , '22' ) ; +test( macro , '-22' , 5678 , '-1' , '5656' ) ; +test( macro , '22' , -5678 , '-1' , '-5656' ) ; +test( macro , '-22' , -5678 , '0' , '-22' ) ; +test( macro , '22' , 1073741824 , '0' , '22' ) ; +test( macro , '-22' , 1073741824 , '-1' , '1073741802' ) ; +test( macro , '22' , -1073741824 , '-1' , '-1073741802' ) ; +test( macro , '-22' , -1073741824 , '0' , '-22' ) ; +test( macro , '22' , 51676101935731 , '0' , '22' ) ; +test( macro , '-22' , 51676101935731 , '-1' , '51676101935709' ) ; +test( macro , '22' , -51676101935731 , '-1' , '-51676101935709' ) ; +test( macro , '-22' , -51676101935731 , '0' , '-22' ) ; +test( macro , '24' , 1 , '24' , '0' ) ; +test( macro , '-24' , 1 , '-24' , '0' ) ; +test( macro , '24' , -1 , '-24' , '0' ) ; +test( macro , '-24' , -1 , '24' , '0' ) ; +test( macro , '24' , 3 , '8' , '0' ) ; +test( macro , '-24' , 3 , '-8' , '0' ) ; +test( macro , '24' , -3 , '-8' , '0' ) ; +test( macro , '-24' , -3 , '8' , '0' ) ; +test( macro , '24' , 7 , '3' , '3' ) ; +test( macro , '-24' , 7 , '-4' , '4' ) ; +test( macro , '24' , -7 , '-4' , '-4' ) ; +test( macro , '-24' , -7 , '3' , '-3' ) ; +test( macro , '24' , 9 , '2' , '6' ) ; +test( macro , '-24' , 9 , '-3' , '3' ) ; +test( macro , '24' , -9 , '-3' , '-3' ) ; +test( macro , '-24' , -9 , '2' , '-6' ) ; +test( macro , '24' , 11 , '2' , '2' ) ; +test( macro , '-24' , 11 , '-3' , '9' ) ; +test( macro , '24' , -11 , '-3' , '-9' ) ; +test( macro , '-24' , -11 , '2' , '-2' ) ; +test( macro , '24' , 17 , '1' , '7' ) ; +test( macro , '-24' , 17 , '-2' , '10' ) ; +test( macro , '24' , -17 , '-2' , '-10' ) ; +test( macro , '-24' , -17 , '1' , '-7' ) ; +test( macro , '24' , 22 , '1' , '2' ) ; +test( macro , '-24' , 22 , '-2' , '20' ) ; +test( macro , '24' , -22 , '-2' , '-20' ) ; +test( macro , '-24' , -22 , '1' , '-2' ) ; +test( macro , '24' , 24 , '1' , '0' ) ; +test( macro , '-24' , 24 , '-1' , '0' ) ; +test( macro , '24' , -24 , '-1' , '0' ) ; +test( macro , '-24' , -24 , '1' , '0' ) ; +test( macro , '24' , 27 , '0' , '24' ) ; +test( macro , '-24' , 27 , '-1' , '3' ) ; +test( macro , '24' , -27 , '-1' , '-3' ) ; +test( macro , '-24' , -27 , '0' , '-24' ) ; +test( macro , '24' , 29 , '0' , '24' ) ; +test( macro , '-24' , 29 , '-1' , '5' ) ; +test( macro , '24' , -29 , '-1' , '-5' ) ; +test( macro , '-24' , -29 , '0' , '-24' ) ; +test( macro , '24' , 1234 , '0' , '24' ) ; +test( macro , '-24' , 1234 , '-1' , '1210' ) ; +test( macro , '24' , -1234 , '-1' , '-1210' ) ; +test( macro , '-24' , -1234 , '0' , '-24' ) ; +test( macro , '24' , 5678 , '0' , '24' ) ; +test( macro , '-24' , 5678 , '-1' , '5654' ) ; +test( macro , '24' , -5678 , '-1' , '-5654' ) ; +test( macro , '-24' , -5678 , '0' , '-24' ) ; +test( macro , '24' , 1073741824 , '0' , '24' ) ; +test( macro , '-24' , 1073741824 , '-1' , '1073741800' ) ; +test( macro , '24' , -1073741824 , '-1' , '-1073741800' ) ; +test( macro , '-24' , -1073741824 , '0' , '-24' ) ; +test( macro , '24' , 51676101935731 , '0' , '24' ) ; +test( macro , '-24' , 51676101935731 , '-1' , '51676101935707' ) ; +test( macro , '24' , -51676101935731 , '-1' , '-51676101935707' ) ; +test( macro , '-24' , -51676101935731 , '0' , '-24' ) ; +test( macro , '27' , 1 , '27' , '0' ) ; +test( macro , '-27' , 1 , '-27' , '0' ) ; +test( macro , '27' , -1 , '-27' , '0' ) ; +test( macro , '-27' , -1 , '27' , '0' ) ; +test( macro , '27' , 3 , '9' , '0' ) ; +test( macro , '-27' , 3 , '-9' , '0' ) ; +test( macro , '27' , -3 , '-9' , '0' ) ; +test( macro , '-27' , -3 , '9' , '0' ) ; +test( macro , '27' , 7 , '3' , '6' ) ; +test( macro , '-27' , 7 , '-4' , '1' ) ; +test( macro , '27' , -7 , '-4' , '-1' ) ; +test( macro , '-27' , -7 , '3' , '-6' ) ; +test( macro , '27' , 9 , '3' , '0' ) ; +test( macro , '-27' , 9 , '-3' , '0' ) ; +test( macro , '27' , -9 , '-3' , '0' ) ; +test( macro , '-27' , -9 , '3' , '0' ) ; +test( macro , '27' , 11 , '2' , '5' ) ; +test( macro , '-27' , 11 , '-3' , '6' ) ; +test( macro , '27' , -11 , '-3' , '-6' ) ; +test( macro , '-27' , -11 , '2' , '-5' ) ; +test( macro , '27' , 17 , '1' , '10' ) ; +test( macro , '-27' , 17 , '-2' , '7' ) ; +test( macro , '27' , -17 , '-2' , '-7' ) ; +test( macro , '-27' , -17 , '1' , '-10' ) ; +test( macro , '27' , 22 , '1' , '5' ) ; +test( macro , '-27' , 22 , '-2' , '17' ) ; +test( macro , '27' , -22 , '-2' , '-17' ) ; +test( macro , '-27' , -22 , '1' , '-5' ) ; +test( macro , '27' , 24 , '1' , '3' ) ; +test( macro , '-27' , 24 , '-2' , '21' ) ; +test( macro , '27' , -24 , '-2' , '-21' ) ; +test( macro , '-27' , -24 , '1' , '-3' ) ; +test( macro , '27' , 27 , '1' , '0' ) ; +test( macro , '-27' , 27 , '-1' , '0' ) ; +test( macro , '27' , -27 , '-1' , '0' ) ; +test( macro , '-27' , -27 , '1' , '0' ) ; +test( macro , '27' , 29 , '0' , '27' ) ; +test( macro , '-27' , 29 , '-1' , '2' ) ; +test( macro , '27' , -29 , '-1' , '-2' ) ; +test( macro , '-27' , -29 , '0' , '-27' ) ; +test( macro , '27' , 1234 , '0' , '27' ) ; +test( macro , '-27' , 1234 , '-1' , '1207' ) ; +test( macro , '27' , -1234 , '-1' , '-1207' ) ; +test( macro , '-27' , -1234 , '0' , '-27' ) ; +test( macro , '27' , 5678 , '0' , '27' ) ; +test( macro , '-27' , 5678 , '-1' , '5651' ) ; +test( macro , '27' , -5678 , '-1' , '-5651' ) ; +test( macro , '-27' , -5678 , '0' , '-27' ) ; +test( macro , '27' , 1073741824 , '0' , '27' ) ; +test( macro , '-27' , 1073741824 , '-1' , '1073741797' ) ; +test( macro , '27' , -1073741824 , '-1' , '-1073741797' ) ; +test( macro , '-27' , -1073741824 , '0' , '-27' ) ; +test( macro , '27' , 51676101935731 , '0' , '27' ) ; +test( macro , '-27' , 51676101935731 , '-1' , '51676101935704' ) ; +test( macro , '27' , -51676101935731 , '-1' , '-51676101935704' ) ; +test( macro , '-27' , -51676101935731 , '0' , '-27' ) ; +test( macro , '29' , 1 , '29' , '0' ) ; +test( macro , '-29' , 1 , '-29' , '0' ) ; +test( macro , '29' , -1 , '-29' , '0' ) ; +test( macro , '-29' , -1 , '29' , '0' ) ; +test( macro , '29' , 3 , '9' , '2' ) ; +test( macro , '-29' , 3 , '-10' , '1' ) ; +test( macro , '29' , -3 , '-10' , '-1' ) ; +test( macro , '-29' , -3 , '9' , '-2' ) ; +test( macro , '29' , 7 , '4' , '1' ) ; +test( macro , '-29' , 7 , '-5' , '6' ) ; +test( macro , '29' , -7 , '-5' , '-6' ) ; +test( macro , '-29' , -7 , '4' , '-1' ) ; +test( macro , '29' , 9 , '3' , '2' ) ; +test( macro , '-29' , 9 , '-4' , '7' ) ; +test( macro , '29' , -9 , '-4' , '-7' ) ; +test( macro , '-29' , -9 , '3' , '-2' ) ; +test( macro , '29' , 11 , '2' , '7' ) ; +test( macro , '-29' , 11 , '-3' , '4' ) ; +test( macro , '29' , -11 , '-3' , '-4' ) ; +test( macro , '-29' , -11 , '2' , '-7' ) ; +test( macro , '29' , 17 , '1' , '12' ) ; +test( macro , '-29' , 17 , '-2' , '5' ) ; +test( macro , '29' , -17 , '-2' , '-5' ) ; +test( macro , '-29' , -17 , '1' , '-12' ) ; +test( macro , '29' , 22 , '1' , '7' ) ; +test( macro , '-29' , 22 , '-2' , '15' ) ; +test( macro , '29' , -22 , '-2' , '-15' ) ; +test( macro , '-29' , -22 , '1' , '-7' ) ; +test( macro , '29' , 24 , '1' , '5' ) ; +test( macro , '-29' , 24 , '-2' , '19' ) ; +test( macro , '29' , -24 , '-2' , '-19' ) ; +test( macro , '-29' , -24 , '1' , '-5' ) ; +test( macro , '29' , 27 , '1' , '2' ) ; +test( macro , '-29' , 27 , '-2' , '25' ) ; +test( macro , '29' , -27 , '-2' , '-25' ) ; +test( macro , '-29' , -27 , '1' , '-2' ) ; +test( macro , '29' , 29 , '1' , '0' ) ; +test( macro , '-29' , 29 , '-1' , '0' ) ; +test( macro , '29' , -29 , '-1' , '0' ) ; +test( macro , '-29' , -29 , '1' , '0' ) ; +test( macro , '29' , 1234 , '0' , '29' ) ; +test( macro , '-29' , 1234 , '-1' , '1205' ) ; +test( macro , '29' , -1234 , '-1' , '-1205' ) ; +test( macro , '-29' , -1234 , '0' , '-29' ) ; +test( macro , '29' , 5678 , '0' , '29' ) ; +test( macro , '-29' , 5678 , '-1' , '5649' ) ; +test( macro , '29' , -5678 , '-1' , '-5649' ) ; +test( macro , '-29' , -5678 , '0' , '-29' ) ; +test( macro , '29' , 1073741824 , '0' , '29' ) ; +test( macro , '-29' , 1073741824 , '-1' , '1073741795' ) ; +test( macro , '29' , -1073741824 , '-1' , '-1073741795' ) ; +test( macro , '-29' , -1073741824 , '0' , '-29' ) ; +test( macro , '29' , 51676101935731 , '0' , '29' ) ; +test( macro , '-29' , 51676101935731 , '-1' , '51676101935702' ) ; +test( macro , '29' , -51676101935731 , '-1' , '-51676101935702' ) ; +test( macro , '-29' , -51676101935731 , '0' , '-29' ) ; +test( macro , '1234' , 1 , '1234' , '0' ) ; +test( macro , '-1234' , 1 , '-1234' , '0' ) ; +test( macro , '1234' , -1 , '-1234' , '0' ) ; +test( macro , '-1234' , -1 , '1234' , '0' ) ; +test( macro , '1234' , 3 , '411' , '1' ) ; +test( macro , '-1234' , 3 , '-412' , '2' ) ; +test( macro , '1234' , -3 , '-412' , '-2' ) ; +test( macro , '-1234' , -3 , '411' , '-1' ) ; +test( macro , '1234' , 7 , '176' , '2' ) ; +test( macro , '-1234' , 7 , '-177' , '5' ) ; +test( macro , '1234' , -7 , '-177' , '-5' ) ; +test( macro , '-1234' , -7 , '176' , '-2' ) ; +test( macro , '1234' , 9 , '137' , '1' ) ; +test( macro , '-1234' , 9 , '-138' , '8' ) ; +test( macro , '1234' , -9 , '-138' , '-8' ) ; +test( macro , '-1234' , -9 , '137' , '-1' ) ; +test( macro , '1234' , 11 , '112' , '2' ) ; +test( macro , '-1234' , 11 , '-113' , '9' ) ; +test( macro , '1234' , -11 , '-113' , '-9' ) ; +test( macro , '-1234' , -11 , '112' , '-2' ) ; +test( macro , '1234' , 17 , '72' , '10' ) ; +test( macro , '-1234' , 17 , '-73' , '7' ) ; +test( macro , '1234' , -17 , '-73' , '-7' ) ; +test( macro , '-1234' , -17 , '72' , '-10' ) ; +test( macro , '1234' , 22 , '56' , '2' ) ; +test( macro , '-1234' , 22 , '-57' , '20' ) ; +test( macro , '1234' , -22 , '-57' , '-20' ) ; +test( macro , '-1234' , -22 , '56' , '-2' ) ; +test( macro , '1234' , 24 , '51' , '10' ) ; +test( macro , '-1234' , 24 , '-52' , '14' ) ; +test( macro , '1234' , -24 , '-52' , '-14' ) ; +test( macro , '-1234' , -24 , '51' , '-10' ) ; +test( macro , '1234' , 27 , '45' , '19' ) ; +test( macro , '-1234' , 27 , '-46' , '8' ) ; +test( macro , '1234' , -27 , '-46' , '-8' ) ; +test( macro , '-1234' , -27 , '45' , '-19' ) ; +test( macro , '1234' , 29 , '42' , '16' ) ; +test( macro , '-1234' , 29 , '-43' , '13' ) ; +test( macro , '1234' , -29 , '-43' , '-13' ) ; +test( macro , '-1234' , -29 , '42' , '-16' ) ; +test( macro , '1234' , 1234 , '1' , '0' ) ; +test( macro , '-1234' , 1234 , '-1' , '0' ) ; +test( macro , '1234' , -1234 , '-1' , '0' ) ; +test( macro , '-1234' , -1234 , '1' , '0' ) ; +test( macro , '1234' , 5678 , '0' , '1234' ) ; +test( macro , '-1234' , 5678 , '-1' , '4444' ) ; +test( macro , '1234' , -5678 , '-1' , '-4444' ) ; +test( macro , '-1234' , -5678 , '0' , '-1234' ) ; +test( macro , '1234' , 1073741824 , '0' , '1234' ) ; +test( macro , '-1234' , 1073741824 , '-1' , '1073740590' ) ; +test( macro , '1234' , -1073741824 , '-1' , '-1073740590' ) ; +test( macro , '-1234' , -1073741824 , '0' , '-1234' ) ; +test( macro , '1234' , 51676101935731 , '0' , '1234' ) ; +test( macro , '-1234' , 51676101935731 , '-1' , '51676101934497' ) ; +test( macro , '1234' , -51676101935731 , '-1' , '-51676101934497' ) ; +test( macro , '-1234' , -51676101935731 , '0' , '-1234' ) ; +test( macro , '5678' , 1 , '5678' , '0' ) ; +test( macro , '-5678' , 1 , '-5678' , '0' ) ; +test( macro , '5678' , -1 , '-5678' , '0' ) ; +test( macro , '-5678' , -1 , '5678' , '0' ) ; +test( macro , '5678' , 3 , '1892' , '2' ) ; +test( macro , '-5678' , 3 , '-1893' , '1' ) ; +test( macro , '5678' , -3 , '-1893' , '-1' ) ; +test( macro , '-5678' , -3 , '1892' , '-2' ) ; +test( macro , '5678' , 7 , '811' , '1' ) ; +test( macro , '-5678' , 7 , '-812' , '6' ) ; +test( macro , '5678' , -7 , '-812' , '-6' ) ; +test( macro , '-5678' , -7 , '811' , '-1' ) ; +test( macro , '5678' , 9 , '630' , '8' ) ; +test( macro , '-5678' , 9 , '-631' , '1' ) ; +test( macro , '5678' , -9 , '-631' , '-1' ) ; +test( macro , '-5678' , -9 , '630' , '-8' ) ; +test( macro , '5678' , 11 , '516' , '2' ) ; +test( macro , '-5678' , 11 , '-517' , '9' ) ; +test( macro , '5678' , -11 , '-517' , '-9' ) ; +test( macro , '-5678' , -11 , '516' , '-2' ) ; +test( macro , '5678' , 17 , '334' , '0' ) ; +test( macro , '-5678' , 17 , '-334' , '0' ) ; +test( macro , '5678' , -17 , '-334' , '0' ) ; +test( macro , '-5678' , -17 , '334' , '0' ) ; +test( macro , '5678' , 22 , '258' , '2' ) ; +test( macro , '-5678' , 22 , '-259' , '20' ) ; +test( macro , '5678' , -22 , '-259' , '-20' ) ; +test( macro , '-5678' , -22 , '258' , '-2' ) ; +test( macro , '5678' , 24 , '236' , '14' ) ; +test( macro , '-5678' , 24 , '-237' , '10' ) ; +test( macro , '5678' , -24 , '-237' , '-10' ) ; +test( macro , '-5678' , -24 , '236' , '-14' ) ; +test( macro , '5678' , 27 , '210' , '8' ) ; +test( macro , '-5678' , 27 , '-211' , '19' ) ; +test( macro , '5678' , -27 , '-211' , '-19' ) ; +test( macro , '-5678' , -27 , '210' , '-8' ) ; +test( macro , '5678' , 29 , '195' , '23' ) ; +test( macro , '-5678' , 29 , '-196' , '6' ) ; +test( macro , '5678' , -29 , '-196' , '-6' ) ; +test( macro , '-5678' , -29 , '195' , '-23' ) ; +test( macro , '5678' , 1234 , '4' , '742' ) ; +test( macro , '-5678' , 1234 , '-5' , '492' ) ; +test( macro , '5678' , -1234 , '-5' , '-492' ) ; +test( macro , '-5678' , -1234 , '4' , '-742' ) ; +test( macro , '5678' , 5678 , '1' , '0' ) ; +test( macro , '-5678' , 5678 , '-1' , '0' ) ; +test( macro , '5678' , -5678 , '-1' , '0' ) ; +test( macro , '-5678' , -5678 , '1' , '0' ) ; +test( macro , '5678' , 1073741824 , '0' , '5678' ) ; +test( macro , '-5678' , 1073741824 , '-1' , '1073736146' ) ; +test( macro , '5678' , -1073741824 , '-1' , '-1073736146' ) ; +test( macro , '-5678' , -1073741824 , '0' , '-5678' ) ; +test( macro , '5678' , 51676101935731 , '0' , '5678' ) ; +test( macro , '-5678' , 51676101935731 , '-1' , '51676101930053' ) ; +test( macro , '5678' , -51676101935731 , '-1' , '-51676101930053' ) ; +test( macro , '-5678' , -51676101935731 , '0' , '-5678' ) ; +test( macro , '1073741824' , 1 , '1073741824' , '0' ) ; +test( macro , '-1073741824' , 1 , '-1073741824' , '0' ) ; +test( macro , '1073741824' , -1 , '-1073741824' , '0' ) ; +test( macro , '-1073741824' , -1 , '1073741824' , '0' ) ; +test( macro , '1073741824' , 3 , '357913941' , '1' ) ; +test( macro , '-1073741824' , 3 , '-357913942' , '2' ) ; +test( macro , '1073741824' , -3 , '-357913942' , '-2' ) ; +test( macro , '-1073741824' , -3 , '357913941' , '-1' ) ; +test( macro , '1073741824' , 7 , '153391689' , '1' ) ; +test( macro , '-1073741824' , 7 , '-153391690' , '6' ) ; +test( macro , '1073741824' , -7 , '-153391690' , '-6' ) ; +test( macro , '-1073741824' , -7 , '153391689' , '-1' ) ; +test( macro , '1073741824' , 9 , '119304647' , '1' ) ; +test( macro , '-1073741824' , 9 , '-119304648' , '8' ) ; +test( macro , '1073741824' , -9 , '-119304648' , '-8' ) ; +test( macro , '-1073741824' , -9 , '119304647' , '-1' ) ; +test( macro , '1073741824' , 11 , '97612893' , '1' ) ; +test( macro , '-1073741824' , 11 , '-97612894' , '10' ) ; +test( macro , '1073741824' , -11 , '-97612894' , '-10' ) ; +test( macro , '-1073741824' , -11 , '97612893' , '-1' ) ; +test( macro , '1073741824' , 17 , '63161283' , '13' ) ; +test( macro , '-1073741824' , 17 , '-63161284' , '4' ) ; +test( macro , '1073741824' , -17 , '-63161284' , '-4' ) ; +test( macro , '-1073741824' , -17 , '63161283' , '-13' ) ; +test( macro , '1073741824' , 22 , '48806446' , '12' ) ; +test( macro , '-1073741824' , 22 , '-48806447' , '10' ) ; +test( macro , '1073741824' , -22 , '-48806447' , '-10' ) ; +test( macro , '-1073741824' , -22 , '48806446' , '-12' ) ; +test( macro , '1073741824' , 24 , '44739242' , '16' ) ; +test( macro , '-1073741824' , 24 , '-44739243' , '8' ) ; +test( macro , '1073741824' , -24 , '-44739243' , '-8' ) ; +test( macro , '-1073741824' , -24 , '44739242' , '-16' ) ; +test( macro , '1073741824' , 27 , '39768215' , '19' ) ; +test( macro , '-1073741824' , 27 , '-39768216' , '8' ) ; +test( macro , '1073741824' , -27 , '-39768216' , '-8' ) ; +test( macro , '-1073741824' , -27 , '39768215' , '-19' ) ; +test( macro , '1073741824' , 29 , '37025580' , '4' ) ; +test( macro , '-1073741824' , 29 , '-37025581' , '25' ) ; +test( macro , '1073741824' , -29 , '-37025581' , '-25' ) ; +test( macro , '-1073741824' , -29 , '37025580' , '-4' ) ; +test( macro , '1073741824' , 1234 , '870131' , '170' ) ; +test( macro , '-1073741824' , 1234 , '-870132' , '1064' ) ; +test( macro , '1073741824' , -1234 , '-870132' , '-1064' ) ; +test( macro , '-1073741824' , -1234 , '870131' , '-170' ) ; +test( macro , '1073741824' , 5678 , '189105' , '3634' ) ; +test( macro , '-1073741824' , 5678 , '-189106' , '2044' ) ; +test( macro , '1073741824' , -5678 , '-189106' , '-2044' ) ; +test( macro , '-1073741824' , -5678 , '189105' , '-3634' ) ; +test( macro , '1073741824' , 1073741824 , '1' , '0' ) ; +test( macro , '-1073741824' , 1073741824 , '-1' , '0' ) ; +test( macro , '1073741824' , -1073741824 , '-1' , '0' ) ; +test( macro , '-1073741824' , -1073741824 , '1' , '0' ) ; +test( macro , '1073741824' , 51676101935731 , '0' , '1073741824' ) ; +test( macro , '-1073741824' , 51676101935731 , '-1' , '51675028193907' ) ; +test( macro , '1073741824' , -51676101935731 , '-1' , '-51675028193907' ) ; +test( macro , '-1073741824' , -51676101935731 , '0' , '-1073741824' ) ; +test( macro , '51676101935731' , 1 , '51676101935731' , '0' ) ; +test( macro , '-51676101935731' , 1 , '-51676101935731' , '0' ) ; +test( macro , '51676101935731' , -1 , '-51676101935731' , '0' ) ; +test( macro , '-51676101935731' , -1 , '51676101935731' , '0' ) ; +test( macro , '51676101935731' , 3 , '17225367311910' , '1' ) ; +test( macro , '-51676101935731' , 3 , '-17225367311911' , '2' ) ; +test( macro , '51676101935731' , -3 , '-17225367311911' , '-2' ) ; +test( macro , '-51676101935731' , -3 , '17225367311910' , '-1' ) ; +test( macro , '51676101935731' , 7 , '7382300276533' , '0' ) ; +test( macro , '-51676101935731' , 7 , '-7382300276533' , '0' ) ; +test( macro , '51676101935731' , -7 , '-7382300276533' , '0' ) ; +test( macro , '-51676101935731' , -7 , '7382300276533' , '0' ) ; +test( macro , '51676101935731' , 9 , '5741789103970' , '1' ) ; +test( macro , '-51676101935731' , 9 , '-5741789103971' , '8' ) ; +test( macro , '51676101935731' , -9 , '-5741789103971' , '-8' ) ; +test( macro , '-51676101935731' , -9 , '5741789103970' , '-1' ) ; +test( macro , '51676101935731' , 11 , '4697827448702' , '9' ) ; +test( macro , '-51676101935731' , 11 , '-4697827448703' , '2' ) ; +test( macro , '51676101935731' , -11 , '-4697827448703' , '-2' ) ; +test( macro , '-51676101935731' , -11 , '4697827448702' , '-9' ) ; +test( macro , '51676101935731' , 17 , '3039770702101' , '14' ) ; +test( macro , '-51676101935731' , 17 , '-3039770702102' , '3' ) ; +test( macro , '51676101935731' , -17 , '-3039770702102' , '-3' ) ; +test( macro , '-51676101935731' , -17 , '3039770702101' , '-14' ) ; +test( macro , '51676101935731' , 22 , '2348913724351' , '9' ) ; +test( macro , '-51676101935731' , 22 , '-2348913724352' , '13' ) ; +test( macro , '51676101935731' , -22 , '-2348913724352' , '-13' ) ; +test( macro , '-51676101935731' , -22 , '2348913724351' , '-9' ) ; +test( macro , '51676101935731' , 24 , '2153170913988' , '19' ) ; +test( macro , '-51676101935731' , 24 , '-2153170913989' , '5' ) ; +test( macro , '51676101935731' , -24 , '-2153170913989' , '-5' ) ; +test( macro , '-51676101935731' , -24 , '2153170913988' , '-19' ) ; +test( macro , '51676101935731' , 27 , '1913929701323' , '10' ) ; +test( macro , '-51676101935731' , 27 , '-1913929701324' , '17' ) ; +test( macro , '51676101935731' , -27 , '-1913929701324' , '-17' ) ; +test( macro , '-51676101935731' , -27 , '1913929701323' , '-10' ) ; +test( macro , '51676101935731' , 29 , '1781934549507' , '28' ) ; +test( macro , '-51676101935731' , 29 , '-1781934549508' , '1' ) ; +test( macro , '51676101935731' , -29 , '-1781934549508' , '-1' ) ; +test( macro , '-51676101935731' , -29 , '1781934549507' , '-28' ) ; +test( macro , '51676101935731' , 1234 , '41876905944' , '835' ) ; +test( macro , '-51676101935731' , 1234 , '-41876905945' , '399' ) ; +test( macro , '51676101935731' , -1234 , '-41876905945' , '-399' ) ; +test( macro , '-51676101935731' , -1234 , '41876905944' , '-835' ) ; +test( macro , '51676101935731' , 5678 , '9101109886' , '3023' ) ; +test( macro , '-51676101935731' , 5678 , '-9101109887' , '2655' ) ; +test( macro , '51676101935731' , -5678 , '-9101109887' , '-2655' ) ; +test( macro , '-51676101935731' , -5678 , '9101109886' , '-3023' ) ; +test( macro , '51676101935731' , 1073741824 , '48127' , '129172083' ) ; +test( macro , '-51676101935731' , 1073741824 , '-48128' , '944569741' ) ; +test( macro , '51676101935731' , -1073741824 , '-48128' , '-944569741' ) ; +test( macro , '-51676101935731' , -1073741824 , '48127' , '-129172083' ) ; +test( macro , '51676101935731' , 51676101935731 , '1' , '0' ) ; +test( macro , '-51676101935731' , 51676101935731 , '-1' , '0' ) ; +test( macro , '51676101935731' , -51676101935731 , '-1' , '0' ) ; +test( macro , '-51676101935731' , -51676101935731 , '1' , '0' ) ; +test( macro , '717897987691852588770249' , 1 , '717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , 1 , '-717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , -1 , '-717897987691852588770249' , '0' ) ; +test( macro , '-717897987691852588770249' , -1 , '717897987691852588770249' , '0' ) ; +test( macro , '717897987691852588770249' , 3 , '239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , 3 , '-239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , -3 , '-239299329230617529590083' , '0' ) ; +test( macro , '-717897987691852588770249' , -3 , '239299329230617529590083' , '0' ) ; +test( macro , '717897987691852588770249' , 7 , '102556855384550369824321' , '2' ) ; +test( macro , '-717897987691852588770249' , 7 , '-102556855384550369824322' , '5' ) ; +test( macro , '717897987691852588770249' , -7 , '-102556855384550369824322' , '-5' ) ; +test( macro , '-717897987691852588770249' , -7 , '102556855384550369824321' , '-2' ) ; +test( macro , '717897987691852588770249' , 9 , '79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , 9 , '-79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , -9 , '-79766443076872509863361' , '0' ) ; +test( macro , '-717897987691852588770249' , -9 , '79766443076872509863361' , '0' ) ; +test( macro , '717897987691852588770249' , 11 , '65263453426532053524568' , '1' ) ; +test( macro , '-717897987691852588770249' , 11 , '-65263453426532053524569' , '10' ) ; +test( macro , '717897987691852588770249' , -11 , '-65263453426532053524569' , '-10' ) ; +test( macro , '-717897987691852588770249' , -11 , '65263453426532053524568' , '-1' ) ; +test( macro , '717897987691852588770249' , 17 , '42229293393638387574720' , '9' ) ; +test( macro , '-717897987691852588770249' , 17 , '-42229293393638387574721' , '8' ) ; +test( macro , '717897987691852588770249' , -17 , '-42229293393638387574721' , '-8' ) ; +test( macro , '-717897987691852588770249' , -17 , '42229293393638387574720' , '-9' ) ; +test( macro , '717897987691852588770249' , 22 , '32631726713266026762284' , '1' ) ; +test( macro , '-717897987691852588770249' , 22 , '-32631726713266026762285' , '21' ) ; +test( macro , '717897987691852588770249' , -22 , '-32631726713266026762285' , '-21' ) ; +test( macro , '-717897987691852588770249' , -22 , '32631726713266026762284' , '-1' ) ; +test( macro , '717897987691852588770249' , 24 , '29912416153827191198760' , '9' ) ; +test( macro , '-717897987691852588770249' , 24 , '-29912416153827191198761' , '15' ) ; +test( macro , '717897987691852588770249' , -24 , '-29912416153827191198761' , '-15' ) ; +test( macro , '-717897987691852588770249' , -24 , '29912416153827191198760' , '-9' ) ; +test( macro , '717897987691852588770249' , 27 , '26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , 27 , '-26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , -27 , '-26588814358957503287787' , '0' ) ; +test( macro , '-717897987691852588770249' , -27 , '26588814358957503287787' , '0' ) ; +test( macro , '717897987691852588770249' , 29 , '24755103023856985819663' , '22' ) ; +test( macro , '-717897987691852588770249' , 29 , '-24755103023856985819664' , '7' ) ; +test( macro , '717897987691852588770249' , -29 , '-24755103023856985819664' , '-7' ) ; +test( macro , '-717897987691852588770249' , -29 , '24755103023856985819663' , '-22' ) ; +test( macro , '717897987691852588770249' , 1234 , '581764981922084755891' , '755' ) ; +test( macro , '-717897987691852588770249' , 1234 , '-581764981922084755892' , '479' ) ; +test( macro , '717897987691852588770249' , -1234 , '-581764981922084755892' , '-479' ) ; +test( macro , '-717897987691852588770249' , -1234 , '581764981922084755891' , '-755' ) ; +test( macro , '717897987691852588770249' , 5678 , '126435010160593974774' , '3477' ) ; +test( macro , '-717897987691852588770249' , 5678 , '-126435010160593974775' , '2201' ) ; +test( macro , '717897987691852588770249' , -5678 , '-126435010160593974775' , '-2201' ) ; +test( macro , '-717897987691852588770249' , -5678 , '126435010160593974774' , '-3477' ) ; +test( macro , '717897987691852588770249' , 1073741824 , '668594602208447' , '278782921' ) ; +test( macro , '-717897987691852588770249' , 1073741824 , '-668594602208448' , '794958903' ) ; +test( macro , '717897987691852588770249' , -1073741824 , '-668594602208448' , '-794958903' ) ; +test( macro , '-717897987691852588770249' , -1073741824 , '668594602208447' , '-278782921' ) ; +test( macro , '717897987691852588770249' , 51676101935731 , '13892262782' , '51258661506607' ) ; +test( macro , '-717897987691852588770249' , 51676101935731 , '-13892262783' , '417440429124' ) ; +test( macro , '717897987691852588770249' , -51676101935731 , '-13892262783' , '-417440429124' ) ; +test( macro , '-717897987691852588770249' , -51676101935731 , '13892262782' , '-51258661506607' ) ;