### ----------------------------------------------------
### -- BigRoot
### -- Licenses: Artistic-2.0
### -- Authors: Julio
### -- File: t/03-rational-roots.t
### ----------------------------------------------------
### -- Chunk 1 of 3
use BigRoot;
use Test;

# All results are checked with Wolfram Mathematica
# https://www.wolfram.com/mathematica/

plan 6;

test-root
        precision => 80,
        root => FatRat.new(2, 3),
        number => 2,
        expected => '2.82842712474619009760337744841939615713934375075389614635335947598146495692421408';

test-root
        precision => 80,
        root => FatRat.new(101, 2),
        number => 2000,
        expected => '1.16243032359535622105669923968936813791614060324601689664852216140243791714966312';

test-root
        precision => 80,
        root => FatRat.new(202, 3),
        number => 1_234_567_890,
        expected => '1.36465383390258849141189616162072833521048201533633207103790279308855008778049205';

test-root
        precision => 500,
        root => FatRat.new(31, 2),
        number => 1_234_567_890,
        expected => '3.8596627043475144497410301884516246732524362950686466841306647967279297350069'
                ~ '14009164660954421089311092858189466737441216525875447122857019233824499879907672'
                ~ '27439764768671313353954494174369323753524857599751674671932541941871104684811265'
                ~ '13934196812628590515580735727766890927642254681061917255671587061655346997643718'
                ~ '32791267378684475240090912115336733143871386441291349705489796856083261948741490'
                ~ '66798826006431298189900097433572916226590506474261267476210518934713384197631643'
                ~ '41074345569013073068852';

test-root
        precision => 999,
        root => FatRat.new(2, 31),
        number => 2,
        expected => '46340.950011841578559133736114903386638571008012351834461853441654480321854246'
                ~ '32344904949872484815905538093371329453414891273702787811695698392257321697069732'
                ~ '37484803171125032634220527780217743625608059325500611495844339559496699744986240'
                ~ '58774024657260037810724224509827950885301117340995682148398137006071919298030200'
                ~ '71172966385632078569128115390874542931842596325212882002024389054806014700448969'
                ~ '02237515579382398649897789208667026330895727926663083765569493919523950792407996'
                ~ '40388010495789268573789725933871590973423541138942637520603336081889115245023841'
                ~ '00925163325708591973571043814751278156612115090137062656319816363404317989751488'
                ~ '14956769146522560112603570060268571283623136292330012776414587853042394015027725'
                ~ '76494016532688862757703245240861475114934928103640686833261872728434635464717167'
                ~ '39438466973933829935834418630818837751554262572639517796049486634818151798906833'
                ~ '81421867154140107590569828333693885760519474570972475263461267304261704422886987'
                ~ '65857855002671250665362496396093782486183025344';

test-root
        precision => 19_996,
        root => FatRat.new(2, 3),
        number => 2,
        expected => '2.8284271247461900976033774484193961571393437507538961463533594759814649569242'
                ~ '14077700775068655283145470027692461824594049849672111701474425288242994199871662'
                ~ '82644533185501118551159990100230556412114294021911994321194054906919372402945703'
                ~ '48372817783972191046584609686174286429016795252072559905028159793745067930926636'
                ~ '17659281241230516704790109491500575519923459671150440675063714022708749206816997'
                ~ '69432077379994139800963006108805558063290849564613698587383724316115692622319333'
                ~ '74260260312371379744744705770185297224989954308436668408571372120293649441542871'
                ~ '70974831131413935530744045297089403171760324151694984531445200417116893304291679'
                ~ '77878887418531836006227764929363141652602011897174080063729606843897945565812820'
                ~ '90145273762627479710512234644080490182455400453882255147254560991476217935008036'
                ~ '73973673690145159872945812152599388276095130964745799436065360494884125853824971'
                ~ '81043620089196843011822404988826834570629562116072067421546183657386294203422233'
                ~ '67833163453778839517433164304256459036976944179389267725783125765531905270281084'
                ~ '53530647938923502258320481743102027030091076257512010526293603425480530793894048'
                ~ '06010349906377258512627703763269560031387383537637047573681045756752587784286013'
                ~ '11739137371929190311003289449019673792073774646228778831153302081767828584676226'
                ~ '41210486725897063409983154351245709948287799837604352486193041312842365463345251'
                ~ '50791894345118692744772645229654852444173423116791998530423525053978350819763186'
                ~ '97280166914170362944463628408140853018113064666796872915731593593038534584799750'
                ~ '73323443196515772052672723565499198843880755550736285243547759838910279446254813'
                ~ '37966599797907734576457127573954993250399331670515523978786456906894713895899259'
                ~ '04337782970985077809511657669052193048193085778789077293251489855112763928820633'
                ~ '95966612370403875876988011431266744109613708115173599934024274447895164285261317'
                ~ '02644348176647658945752347872949356748639200031843776146957152345044237349808499'
                ~ '54733858414622192739443217867417322313469170669666590509351703289421515697204927'
                ~ '20166889822963717531110857291024662843985262266503594121687311940870571282017583'
                ~ '70015207220183189313413537672111434801535138101922734388026498712104803719982101'
                ~ '24216327195452862761210934020587139942084850211563499062114511869968902253845560'
                ~ '68982701327513749552056632565921106484485391506905805767753689285834656554177663'
                ~ '61740506797046762454999816247437850814529507357006096431836037723342179457384584'
                ~ '02395199761407637086665072920422164598558586145743561599776198353483548217966121'
                ~ '60065262363285597646234308727739323405999868323229757372036091011107973826230372'
                ~ '02077275065000911637208960815004823903686113490673672273491947488479771065703586'
                ~ '17920747797830346391748268857635684250043833903751186888774792378629099999812215'
                ~ '17409818052176703527244949951571771673607491586231467960419997324437389984519182'
                ~ '65528472388211842006560522997491331993777481359123347837191457772849469271717737'
                ~ '28993644772013966705285598112566331227827885115298124130372043294526066725950151'
                ~ '39574121321371299632018543741858430626473656271397787419483300894918192107494559'
                ~ '30489541881984824774212289410879734872946769549096382017457724442991790591823757'
                ~ '84298359667962167576556306131124631620721297351746072029004546417658702682774455'
                ~ '36835335687381058857396981676911489158819197252148499909833605706154797876592072'
                ~ '42670797506410183997872150278128889915369139869425527290143265583094031954670972'
                ~ '77878846514555080076520549571348345161902832614319195699636018887120758781971180'
                ~ '33654430806916316304200987332590689765421458479320464327647653322525366100514556'
                ~ '23389020707587431376467318645956463859721293595797281841712191162852287272620092'
                ~ '31188665100948987951867998250839064601864350608953067929413255223323507037509292'
                ~ '41935269117477232976039769699495852809013088979382008158842363385159371512756976'
                ~ '29979728337099898327152289680940420679784306847540744667062312918887794073063334'
                ~ '43898098703765811612614802693725283344940221306926987832814292571135960355867628'
                ~ '84809053827413321955527756973247600678464874094823066374506381203833199291076231'
                ~ '57768276168664642106753492362435602859218566482272550508177474581025881467895886'
                ~ '61238879138734041588590317564566986438633328222603099189396757955348688870786754'
                ~ '19914269976815781701631784732140177316210941899580931445977761784922565632026267'
                ~ '40205816058199949129569916309122929743103278100483971581226218691756661240052441'
                ~ '47449433533709109998099881714216198515198577864732308765439100115632502660763062'
                ~ '93155815853737001613968856958304848550882053611512643130644123771502450226127874'
                ~ '05072585432393650251838405043211740237919346448847853484746898152929345475069592'
                ~ '91976382996158634360048477109077720767366216015583649329255082348885000374555590'
                ~ '36328766902926922598041526686035937108771263335447036778673334084444221878289860'
                ~ '57592762567977862346261686008425110037099701305891127553206292251181820922276953'
                ~ '65647191849544572580852854723265291708867857545277206862996097927947266595097718'
                ~ '51362298593672253451797147666432873326974046954605220212261014597223068259897617'
                ~ '54894622245908530550330733182346028472125305173815439643407419620928872095445347'
                ~ '85659748305186139124127694216548164369813474466117486059418485798963478488157387'
                ~ '50568802088798097041757703828387083025801363470340613877394118009485031531049615'
                ~ '68947242882100324016908882445119124059694518807056038135961361966007929079713718'
                ~ '60917250521275594907119855494598129777490902484992152756021727800382116185749529'
                ~ '44150221847721190039086456320417759243032467704322575045703605058575236651407434'
                ~ '57148135278898196509288443693086176132211604031694568134252605091875978130163371'
                ~ '42743313371882601066394073192806753348292209912753020616732269786218956053625871'
                ~ '14663781103941040369030079938197326305024823222385188110561712997863917966912466'
                ~ '396736698976161234312487822573262559569674395790673803055520109961103327003957