### ----------------------------------------------------
### -- Math::Root
### -- Licenses: Artistic-2.0
### -- Authors: Steve Schulze (thundergnat)
### -- File: t/02-rational.t
### ----------------------------------------------------
### -- Chunk 1 of 4
use Math::Root;
use Test;

plan 67;

ok( root(2)        eq '1.4142135623730950488016887242097',     'square root 2 defaults ok');
ok( root(2, 2, 66) eq '1.414213562373095048801688724209698078569671875376948073176679737991',
  'square root 2 higher precision ok' );

ok( root(2, 2, 20076) == sqrt2(), 'square root 2 ridiculous precision ok' );

my @test-rats = <
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642
1.259921049894873164767210607278228350570251464701507980081975112155299676513959483729396562436255
1.189207115002721066717499970560475915292972092463817413019002224719466668226917159870781344538138
1.148698354997035006798626946777927589443850889097797505513711118493603206253513056811473113011508
1.122462048309372981433533049679179516232411110613986753440409545882904005565861247087923227112509
1.104089513673812337649505387623344721325326600780124165514532464142106322880380980716598289886302
1.090507732665257659207010655760707978992702718540067121785667647683300530848841840338211140494203
1.080059738892306169872930831288596912737466762465644733136497122283534876578258927885325469533216
1.732050807568877293527446341505872366942805253810380628055806979451933016908800037081146186757249
1.442249570307408382321638310780109588391869253499350577546416194541687596829997339854755479705645
1.316074012952492460819218901796999055160068590205822176731922658595866795197302133050743150246602
1.245730939615517325966680336640305080939309993068779811046173014360746653775493566605895144588123
1.200936955176002726675465387349542846298407418225982225018371390449205604019094586044741788369754
1.169930812758686886462975725513734667699404196420934209030218965589333936274003670151143019693935
1.147202690439877089473058613536597374191379921936880452392361946724974378082555574740832144749412
1.129830963909753032612166104282841874484003893836849629893151201541106033681200795472372000265857
2
1.587401051968199474751705639272308260391493327899853009808285761825216505624219173273544213262221
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642
1.319507910772894259374001971229640133033469013193418681505807795980535980893520830050353795235959
1.259921049894873164767210607278228350570251464701507980081975112155299676513959483729396562436255
1.219013654204475440911691002592560857277411935859960806590971514832067295459667993817258140313705
1.189207115002721066717499970560475915292972092463817413019002224719466668226917159870781344538138
1.16652903957611658089369263466066806141790915389889835490926576177235422049017813994506254082794
2.236067977499789696409173668731276235440618359611525724270897245410520925637804899414414408378782
1.709975946676696989353108872543860109868055110543054924382861707444295920504173216257187010020189
1.495348781221220541911898994140913395363459757614706345516593500047921466972997012848624425707488
1.379729661461214832390063464216017692855649877977606121772737674791506189421635833156589593014712
1.307660486011830591229231694340203125161784549323589811075368959742469829123247044254339925916507
1.258498950641826734992787171177713894818680481506718196707472578562558254592348571156459363478865
1.222844544993851841941144364467601531422421552354080233985825169851652975693654752641717404602487
1.195813174500401941460048400253595622343948264277896972445697917019522030330569530493479250375043
2.44948974278317809819728407470589139196594748065667012843269256725096037745731502653985943310464
1.817120592832139658891211756327260502428210463141219671481334297931309739459301865647141704126417
1.565084580073287316584485499158689809810726942774789222819809092010823441052882008742035271910459
1.430969081105255501045224413143116904972649939661281739988368579758282502783233499856088160468133
1.348006154597277667374236313903078675536497830266462284666301883367275778776554814926868023842414
1.291708342090746606827509755365477981907068733459737362811456071908505178490881216669340344409509
1.251033404859073823678043717779847252888561061861152423858879662633314605045400391177673044375659
1.220284935872810456057954851011838324017358469326132507019736014763277597057732474289120098489766
2.645751311064590590501615753639260425710259183082450180368334459201068823230283627760392886474544
1.912931182772389101199116839548760282862439050345875766210647640447234276179230756007525441477286
1.626576561697785743211232345493760173018270792269497618187455583488676741172680018697342567823053
1.475773161594552069276916695632244106544093613740203567770904168884521767499208360714411082351298
1.383087554268488492640658513534822590877042736210251148719084292539758759454907954855146478473344
1.320469247756123791809327331500263082736600151973358251802661288354671743652891985533728824094673
1.275373106858454085386009750458792273453704755396770427552361322969506961939939948361676014908057
1.241365817015208677576626391295093622967596700551532422375089423860186823381396930457960365942806
2.828427124746190097603377448419396157139343750753896146353359475981464956924214077700775068655283
2
1.681792830507429086062250952466429790080068524713569021626452171949849509907804479628648008398585
1.515716566510398082347259801306445238681283542978141642037505242097453677202058277641176134849432
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642
1.34590019263235613194283260375094190436624702677747672325028313188850020829354875293398819538772
1.296839554651009665933754117792451159835345149424965512807790522629014625647344355614595907572396
1.259921049894873164767210607278228350570251464701507980081975112155299676513959483729396562436255
3
2.080083823051904114530056824357885386337805340373262109697591080200106311397268773606056636790757
1.732050807568877293527446341505872366942805253810380628055806979451933016908800037081146186757249
1.55184557391535967427334513551669932326234629380966783773634049978290635717070807248226687309326
1.442249570307408382321638310780109588391869253499350577546416194541687596829997339854755479705645
1.3687381066422016748423677886640296530497869798190825993499202430277449295993516048597588555603
1.316074012952492460819218901796999055160068590205822176731922658595866795197302133050743150246602
1.276518007009241659684398650582716282142608995948478353074364220513826823588759216100043655418433
>;

{
    temp $*ROOT-PRECISION = 96;
    for 2..9 -> $i {
        for 2..9 -> $n {
            is( root($i, $n), @test-rats[($i - 2) * 8 + $n - 2], "high default $n root of $i ok" );
        }
    }
}

done-testing;

sub sqrt2 {
    # From: https://apod.nasa.gov/htmltest/gifcity/sqrt2.1mil
q:to/SQRT2/.lines.join;
1.4142135623730950488016887242096980785696718753769480731766797379907324784621
07038850387534327641572735013846230912297024924836055850737212644121497099935831
41322266592750559275579995050115278206057147010955997160597027453459686201472851
74186408891986095523292304843087143214508397626036279952514079896872533965463318
08829640620615258352395054745750287759961729835575220337531857011354374603408498
84716038689997069900481503054402779031645424782306849293691862158057846311159666
87130130156185689872372352885092648612494977154218334204285686060146824720771435
85487415565706967765372022648544701585880162075847492265722600208558446652145839
88939443709265918003113882464681570826301005948587040031864803421948972782906410
45072636881313739855256117322040245091227700226941127573627280495738108967504018
36986836845072579936472906076299694138047565482372899718032680247442062926912485
90521810044598421505911202494413417285314781058036033710773091828693147101711116
83916581726889419758716582152128229518488472089694633862891562882765952635140542
26765323969461751129160240871551013515045538128756005263146801712740265396947024
03005174953188629256313851881634780015693691768818523786840522878376293892143006
55869568685964595155501644724509836896036887323114389415576651040883914292338113
20605243362948531704991577175622854974143899918802176243096520656421182731672625
75395947172559346372386322614827426222086711558395999265211762526989175409881593
48640083457085181472231814204070426509056532333398436457865796796519267292399875
36661721598257886026336361782749599421940377775368142621773879919455139723127406
68983299898953867288228563786977496625199665835257761989393228453447356947949629
52168891485492538904755828834526096524096542889394538646625744927556381964410