import test from 'ava' ; import { Amount } from '../..' ; test ( 'add' , ( c ) => { const decimal = 30 ; let fixed = 4 ; const t = ( appendA , appendB , expected ) => { c . is ( new Amount ( appendA , decimal ) . add ( new Amount ( appendB , decimal ) ) . toString ( decimal , { fixed } ) , new Amount ( expected , decimal ) . toString ( decimal , { fixed } ) ) ; } ; t ( 1 , 0 , '1' ) ; t ( 1 , - 0 , '1' ) ; t ( - 1 , 0 , '-1' ) ; t ( - 1 , 0 , '-1' ) ; t ( 0 , 1 , '1' ) ; t ( 0 , - 1 , '-1' ) ; t ( - 0 , 1 , '1' ) ; t ( - 0 , - 1 , '-1' ) ; fixed = 3 ; t ( '0' , '-0' , '-0' ) ; t ( '-0' , '0' , '-0' ) ; t ( '0' , '0' , '0' ) ; t ( '-0' , '-0' , '-0' ) ; t ( '1' , '-1' , '-0' ) ; t ( '-1' , '1' , '-0' ) ; fixed = 4 ; t ( '0' , '-0' , '-0' ) ; t ( '-0' , '0' , '-0' ) ; t ( '0' , '0' , '0' ) ; t ( '-0' , '-0' , '-0' ) ; t ( '1' , '-1' , '-0' ) ; t ( '-1' , '1' , '-0' ) ; t ( 1 , '0' , '1' ) ; t ( 1 , '1' , '2' ) ; t ( 1 , '-45' , '-44' ) ; t ( 1 , '22' , '23' ) ; t ( 1 , '0144' , '145' ) ; t ( 1 , '6.1915' , '7.1915' ) ; t ( 1 , '-1.02' , '-0.02' ) ; t ( 1 , '0.09' , '1.09' ) ; t ( 1 , '-0.0001' , '0.9999' ) ; t ( '0' , 0 , '0' ) ; t ( '0' , '0' , '0' ) ; t ( 3 , - 0 , '3' ) ; t ( 9.654 , 0 , '9.654' ) ; t ( 0 , '0.001' , '0.001' ) ; t ( 0 , '111.1111111110000' , '111.111111111' ) ; t ( - 1 , 1 , '0' ) ; t ( - 0.01 , 0.01 , '0' ) ; t ( 54 , - 54 , '0' ) ; t ( 9.99 , '-9.99' , '0' ) ; t ( '0.00000' , '-0.000001' , '-0.000001' ) ; t ( '0.0000023432495704937' , '-0.0000023432495704937' , '0' ) ; t ( 100 , 100 , '200' ) ; t ( - 999.99 , '0.01' , '-999.98' ) ; t ( '10' , 4 , '14' ) ; t ( '03.333' , - 4 , '-0.667' ) ; t ( - 1 , - 0.1 , '-1.1' ) ; t ( 43534.5435 , '0.054645' , '43534.598145' ) ; t ( '99999' , '1' , '100000' ) ; } ) ; test ( 'add_round' , ( c ) => { const t = ( appendA , appendB , expected , sd , rm ) => { sd = 100 ; c . is ( new Amount ( appendA , sd ) . add ( new Amount ( appendB , sd ) ) . toString ( sd , { fixed : rm } ) , new Amount ( expected , sd ) . toString ( sd , { fixed : rm } ) ) ; } ; t ( '593563412042.65071284077577238642546669796903116' , '7399734315.5' , '600963146358.15071284077577238642546669796903116' , 78 , 2 ) ; t ( '91834314419826105636913315.2250760351217688154427716325' , '3453589484.0922087' , '91834314419826109090502799.317284735121768815442772' , 50 , 2 ) ; t ( '84956243086401045.957714583212857676046952761360420789675' , '236266946455107694023566236.1067' , '236266946540063937109967282.064414583212857676046952761360420789675' , 76 , 4 ) ; t ( '9182914763445141913243843569172715469835.4885696227829197845538926' , '7633444625534.6271670438' , '9182914763445141913243843576806160095370.115' , 43 , 1 ) ; t ( '29495676.658886008145597040990327830' , '6931766589765486564126938677173.788' , '6931766589765486564126968172850.44688600814559704099032783' , 97 , 4 ) ; t ( '294375205.06' , '0.4210755138711679324480015392679141' , '294375205.4810755138711679324480015392679141' , 80 , 3 ) ; t ( '97.8245' , '678086929547037858952090.4586' , '678086929547037858952188.2831' , 47 , 2 ) ; t ( '6.6986623837182087397483631708665129676441' , '4979636344219290763240.0069' , '4979636344219290763246.705562383718208739748363170866513' , 55 , 6 ) ; t ( '70719500740711222218051791089542849911.838248343393159286401111269584528' , '72611217359692246954.6315' , '70719500740711222290663008449235096866.469748343393159286401111269584528' , 100 , 2 ) ; t ( '697637766264066731981534075222456637269.8150' , '84841485703909.9296471188463060' , '697637766264066731981534160063942341179.745' , 42 , 3 ) ; t ( '47061.38' , '1757281333528971368573.2805225778643923494834101231347769030' , '1757281333528971415634.660522577864392349483410123134776903' , 76 , 2 ) ; t ( '12589380812542.2800574047701400763640862141749065' , '6621312631.8566626344982182410585379' , '12596002125174.136720039268' , 26 , 6 ) ; t ( '7882195982742109440258991594228896.97647548424454' , '549984552171.2' , '7882195982742109440259541578781068.17647548424454' , 62 , 3 ) ; t ( '79344567.9583146261700423456539738617142116267' , '76770085769491324895202178331658.82467912070' , '76770085769491324895202257676226.7829937468700423456539738617142116267' , 75 , 1 ) ; t ( '9803952036104667191144020833.60300205' , '9495298573633466486861.2007267111985' , '9803961531403240824610507694.8037287611985' , 91 , 6 ) ; t ( '42717742030595859.2062217089376928894751002693' , '4392.7633096899809016584837135701339842639427' , '42717742030600251.9695313989185945479588138394339842639427' , 84 , 1 ) ; t ( '388528785785093377176597943386.8074346502385319459876897943393772766' , '780579558740664211027356329768421.54760979278144' , '780968087526449304404532927711808.355044443019971' , 48 , 3 ) ; t ( '8.1572164344501210656681193' , '141383742681203268175705548539.5903424774279108405668653' , '141383742681203268175705548547.7475589118780319062349846' , 87 , 1 ) ; t ( '623051342929926112359884960895415731939.5562490236742100882954960168' , '503245645050146765988526273.758561914511343318476865211' , '623051342930429358004935107661404258213.3148109381855534067723612278' , 74 , 6 ) ; t ( '6222.818987' , '2745.84213504008632396977994287249342' , '8968.66112204008632396977994287249342' , 45 , 5 ) ; t ( '58075371184786989216823527114006.8193336921861462723001823062864617438' , '831577.37480626' , '58075371184786989216823527945584.1941399521861463' , 48 , 4 ) ; t ( '171792414269.20500878' , '7228500834975.6421662524366409' , '7400293249244.8471750324366409' , 86 , 5 ) ; t ( '3686865567196977754914570753132702.86443144944286374816106555429' , '252977292743732124354509767399171006.56792658736276850447471854354498' , '256664158310929102109424338152303709.43235803680563225263578409783498' , 76 , 1 ) ; t ( '7772413527479.0292045567366574215506978466' , '6951039673098790484081676762223797578.48972170861559580041987995' , '6951039673098790484081684534637325057.5189262' , 44 , 1 ) ; t ( '897519.488463768126475213360003650464' , '243345915368302813437999412228446907.03319139912318828693096' , '243345915368302813437999412229344426.521655167249663500290963650464' , 69 , 1 ) ; t ( '9944701104687189448523634989441.1145387693210320276079647' , '76461573432179845156280348475771563.06533912678377627209249' , '76471518133284532345728872110761004.179877896' , 44 , 1 ) ; t ( '49868358282915444463601511745776323.6756' , '426.127124853' , '49868358282915444463601511745776749.802724853' , 62 , 1 ) ; t ( '462611390833337670596267664076995136589.8078310066750996553090298147792146374' , '86220896429616059447274947806526227.378336884633' , '462697611729767286655714939024801662817.18616789130809965530902981477921' , 71 , 5 ) ; t ( '3082844058.9630699111683783220405718767649310463' , '9821678552282552.46' , '9821681635126611.4230699111683783220405718767649310463' , 85 , 6 ) ; t ( '18829358460454562606796373222566693.8406444934478081754024757172' , '245696827314924767344.62999383040940' , '18829358460454808303623688147334038.4706383238572081754024757172' , 65 , 1 ) ; t ( '451443519.5' , '40545287685504171383686533617478.0379433921591774655032923922180' , '40545287685504171383686985060997.537943392159177465503292392218' , 85 , 1 ) ; t ( '9103707265251.90817165947074590284' , '7132.1726911109784489' , '9103707272384.08086277044919480284' , 57 , 1 ) ; t ( '1327536619868001635732671456652796081.82503453353162015625727828' , '777720909904.3138244842545463' , '1327536619868001635732672234373705986.13885901778616645625727828' , 94 , 6 ) ; t ( '94785498339319783.701937' , '5.5284513' , '94785498339319789.2303883' , 45 , 3 ) ; t ( '45087586598522825025991129716000.35589454049730836' , '85381176658152430597133806358376750.386015723730182079339361073643' , '85426264244750953422159797488092750.741910264227490439339361073643' , 95 , 3 ) ; t ( '1.577' , '5867361133548635578508631112769.512' , '5867361133548635578508631112771.089' , 37 , 6 ) ; } ) ;